diff --git a/Unreal/Content/Assets/Boots/MI_Boots_Scondary.uasset b/Unreal/Content/Assets/Boots/MI_Boots_Scondary.uasset deleted file mode 100644 index 498ec09..0000000 --- a/Unreal/Content/Assets/Boots/MI_Boots_Scondary.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8d4aa4ad34ce9437cada33f3c3b3e62161ff6ea139fd24dab539ca40f76d600b -size 8308 diff --git a/Unreal/Content/Assets/Boots/MI_Boots_Secondary.uasset b/Unreal/Content/Assets/Boots/MI_Boots_Secondary.uasset new file mode 100644 index 0000000..6716034 --- /dev/null +++ b/Unreal/Content/Assets/Boots/MI_Boots_Secondary.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a905100aa9ce4fd5bf58d1be9f630428f5790b40b6dad10ea9b73ce0acd11fb9 +size 8314 diff --git a/Unreal/Content/Assets/Clothes/SKM_Clothes_Shirt.uasset b/Unreal/Content/Assets/Clothes/SKM_Clothes_Shirt.uasset new file mode 100644 index 0000000..8388880 --- /dev/null +++ b/Unreal/Content/Assets/Clothes/SKM_Clothes_Shirt.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:663aa88065b604b5ba3570160d716cbfdcaaa6ffcddb1d79b2b21bbfbf3319ea +size 25275570 diff --git a/Unreal/Content/SPIE/Avatars/Avatar_SpieFrau_Shirt.uasset b/Unreal/Content/SPIE/Avatars/Avatar_SpieFrau_Shirt.uasset new file mode 100644 index 0000000..8587ecc --- /dev/null +++ b/Unreal/Content/SPIE/Avatars/Avatar_SpieFrau_Shirt.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea4803fbbf3599882858edf0c1f879e3afa463b14f897410c6a0f262f0cc83a4 +size 182519 diff --git a/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_Masked.uasset b/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_Masked.uasset deleted file mode 100644 index 3f6f37f..0000000 --- a/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_Masked.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fee5d458894dfd7bbfbd534d9cb56e532700007d6b9ac8b8f520049a4e4ac957 -size 22636 diff --git a/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_NotMasked.uasset b/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_NotMasked.uasset deleted file mode 100644 index a740485..0000000 --- a/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_NotMasked.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ea1e88c815ac1a80c47e47341f2ffd6d71944eaa78a27bf281c571aac10eca08 -size 22414 diff --git a/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_Shirt.uasset b/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_Shirt.uasset new file mode 100644 index 0000000..a07fc83 --- /dev/null +++ b/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_Shirt.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:407719208a333bf16ea4f174e42f5f0ac1fbf13ee7fc747dfde222a4aad1243b +size 22698 diff --git a/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_Vest.uasset b/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_Vest.uasset new file mode 100644 index 0000000..c6d739d --- /dev/null +++ b/Unreal/Content/ThirdParty/Shirt_157/Materials/MI_Shirt_Weiß_Vest.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdd417785c9277a3834b0f06e8d5c3ef818439e9abba476b115a3cdf6af7ed5f +size 22646 diff --git a/Unreal/Content/ThirdParty/Shirt_157/Textures/T_Shirt_MaskOut.uasset b/Unreal/Content/ThirdParty/Shirt_157/Textures/T_Shirt_MaskOut.uasset deleted file mode 100644 index 0c3dc7b..0000000 --- a/Unreal/Content/ThirdParty/Shirt_157/Textures/T_Shirt_MaskOut.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:79e3aa3cd0a74a81c13c451eb7d39399f823a58cd6595dfe14dd409517c8227d -size 66939 diff --git a/Unreal/Content/ThirdParty/Shirt_157/Textures/T_Shirt_MaskOut_Vest.uasset b/Unreal/Content/ThirdParty/Shirt_157/Textures/T_Shirt_MaskOut_Vest.uasset new file mode 100644 index 0000000..dee82ab --- /dev/null +++ b/Unreal/Content/ThirdParty/Shirt_157/Textures/T_Shirt_MaskOut_Vest.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a6a6769d293f80a83e097115fb865ffa5e300931aa32ac61deb2eec5abd449c +size 66964 diff --git a/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/Tools/OpenAiModerator.cpp b/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/Tools/OpenAiModerator.cpp new file mode 100644 index 0000000..a206d76 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/Tools/OpenAiModerator.cpp @@ -0,0 +1,178 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "Tools/OpenAiModerator.h" + +#include "HttpModule.h" +#include "Interfaces/IHttpResponse.h" +#include "Dom/JsonObject.h" +#include "Serialization/JsonReader.h" +#include "Serialization/JsonSerializer.h" + +FString UOpenAiModerator::StoredApiKey; +FString UOpenAiModerator::StoredModel = TEXT("omni-moderation-latest"); +TArray> UOpenAiModerator::ActiveRequests; + +void UOpenAiModerator::InitModeration(const FString& ApiKey, const FString& Model) +{ + StoredApiKey = ApiKey; + StoredModel = Model; +} + +UOpenAiModerator* UOpenAiModerator::UseModeration(UObject* WorldContextObject, const FString& Text) +{ + UOpenAiModerator* Action = NewObject(); + Action->InputText = Text; + Action->RegisterWithGameInstance(WorldContextObject); + return Action; +} + +void UOpenAiModerator::Activate() +{ + if (StoredApiKey.IsEmpty()) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiModerator: API key not set. Call InitModeration first.")); + FModerationResult EmptyResult; + Passed.Broadcast(EmptyResult); + return; + } + + RequestStartTime = FPlatformTime::Seconds(); + ActiveRequests.Add(this); + + TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + HttpRequest->SetURL(TEXT("https://api.openai.com/v1/moderations")); + HttpRequest->SetVerb(TEXT("POST")); + HttpRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json")); + HttpRequest->SetHeader(TEXT("Authorization"), FString::Printf(TEXT("Bearer %s"), *StoredApiKey)); + + const FString Body = FString::Printf(TEXT("{\"model\":\"%s\",\"input\":\"%s\"}"), + *StoredModel, + *InputText.ReplaceCharWithEscapedChar()); + + HttpRequest->SetContentAsString(Body); + + HttpRequest->OnProcessRequestComplete().BindUObject(this, &UOpenAiModerator::HandleHttpResponse); + + if (!HttpRequest->ProcessRequest()) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiModerator: Failed to start HTTP request.")); + FModerationResult EmptyResult; + Passed.Broadcast(EmptyResult); + } +} + +void UOpenAiModerator::ClearModeration() +{ + TArray> RequestsCopy = ActiveRequests; + ActiveRequests.Empty(); + + for (const TWeakObjectPtr& Weak : RequestsCopy) + { + if (UOpenAiModerator* Action = Weak.Get()) + { + Action->SetReadyToDestroy(); + } + } +} + +void UOpenAiModerator::HandleHttpResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful) +{ + ActiveRequests.RemoveAll([this](const TWeakObjectPtr& Weak) { return !Weak.IsValid() || Weak.Get() == this; }); + + const float ElapsedTime = static_cast(FPlatformTime::Seconds() - RequestStartTime); + + FModerationResult Result; + Result.ExecutionTime = ElapsedTime; + + if (!bWasSuccessful || !Response.IsValid()) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiModerator: HTTP request failed.")); + Passed.Broadcast(Result); + return; + } + + const int32 Code = Response->GetResponseCode(); + const FString Body = Response->GetContentAsString(); + + if (Code < 200 || Code >= 300) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiModerator: HTTP %d — %s"), Code, *Body); + Passed.Broadcast(Result); + return; + } + + TSharedPtr RootObject; + TSharedRef> Reader = TJsonReaderFactory<>::Create(Body); + if (!FJsonSerializer::Deserialize(Reader, RootObject) || !RootObject.IsValid()) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiModerator: Failed to parse response JSON.")); + Passed.Broadcast(Result); + return; + } + + const TArray>* ResultsArray; + if (!RootObject->TryGetArrayField(TEXT("results"), ResultsArray) || ResultsArray->Num() == 0) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiModerator: No results in response.")); + Passed.Broadcast(Result); + return; + } + + const TSharedPtr& FirstResult = (*ResultsArray)[0]->AsObject(); + if (!FirstResult.IsValid()) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiModerator: Invalid result object.")); + Passed.Broadcast(Result); + return; + } + + Result.bFlagged = FirstResult->GetBoolField(TEXT("flagged")); + + const TSharedPtr* CategoriesObject; + if (FirstResult->TryGetObjectField(TEXT("categories"), CategoriesObject)) + { + FModerationCategories& C = Result.Categories; + C.bSexual = (*CategoriesObject)->GetBoolField(TEXT("sexual")); + C.bSexualMinors = (*CategoriesObject)->GetBoolField(TEXT("sexual/minors")); + C.bHarassment = (*CategoriesObject)->GetBoolField(TEXT("harassment")); + C.bHarassmentThreatening = (*CategoriesObject)->GetBoolField(TEXT("harassment/threatening")); + C.bHate = (*CategoriesObject)->GetBoolField(TEXT("hate")); + C.bHateThreatening = (*CategoriesObject)->GetBoolField(TEXT("hate/threatening")); + C.bIllicit = (*CategoriesObject)->GetBoolField(TEXT("illicit")); + C.bIllicitViolent = (*CategoriesObject)->GetBoolField(TEXT("illicit/violent")); + C.bSelfHarm = (*CategoriesObject)->GetBoolField(TEXT("self-harm")); + C.bSelfHarmIntent = (*CategoriesObject)->GetBoolField(TEXT("self-harm/intent")); + C.bSelfHarmInstructions = (*CategoriesObject)->GetBoolField(TEXT("self-harm/instructions")); + C.bViolence = (*CategoriesObject)->GetBoolField(TEXT("violence")); + C.bViolenceGraphic = (*CategoriesObject)->GetBoolField(TEXT("violence/graphic")); + } + + const TSharedPtr* ScoresObject; + if (FirstResult->TryGetObjectField(TEXT("category_scores"), ScoresObject)) + { + FModerationCategoryScores& S = Result.CategoryScores; + S.Sexual = (*ScoresObject)->GetNumberField(TEXT("sexual")); + S.SexualMinors = (*ScoresObject)->GetNumberField(TEXT("sexual/minors")); + S.Harassment = (*ScoresObject)->GetNumberField(TEXT("harassment")); + S.HarassmentThreatening = (*ScoresObject)->GetNumberField(TEXT("harassment/threatening")); + S.Hate = (*ScoresObject)->GetNumberField(TEXT("hate")); + S.HateThreatening = (*ScoresObject)->GetNumberField(TEXT("hate/threatening")); + S.Illicit = (*ScoresObject)->GetNumberField(TEXT("illicit")); + S.IllicitViolent = (*ScoresObject)->GetNumberField(TEXT("illicit/violent")); + S.SelfHarm = (*ScoresObject)->GetNumberField(TEXT("self-harm")); + S.SelfHarmIntent = (*ScoresObject)->GetNumberField(TEXT("self-harm/intent")); + S.SelfHarmInstructions = (*ScoresObject)->GetNumberField(TEXT("self-harm/instructions")); + S.Violence = (*ScoresObject)->GetNumberField(TEXT("violence")); + S.ViolenceGraphic = (*ScoresObject)->GetNumberField(TEXT("violence/graphic")); + } + + if (Result.bFlagged) + { + Flagged.Broadcast(Result); + } + else + { + Passed.Broadcast(Result); + } +} diff --git a/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/Tools/OpenAiResponder.cpp b/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/Tools/OpenAiResponder.cpp new file mode 100644 index 0000000..a58d7e8 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/Tools/OpenAiResponder.cpp @@ -0,0 +1,298 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "Tools/OpenAiResponder.h" + +#include "HttpModule.h" +#include "Interfaces/IHttpResponse.h" +#include "Dom/JsonObject.h" +#include "Serialization/JsonReader.h" +#include "Serialization/JsonSerializer.h" +#include "Serialization/JsonWriter.h" + +FString UOpenAiResponder::StoredApiKey; +FString UOpenAiResponder::StoredModel = TEXT("gpt-4.1"); +TArray> UOpenAiResponder::ActiveRequests; + +void UOpenAiResponder::InitResponder(const FString& ApiKey, const FString& Model) +{ + StoredApiKey = ApiKey; + StoredModel = Model; +} + +UOpenAiResponder* UOpenAiResponder::CallOpenAiResponse( + UObject* WorldContextObject, + const FString& Prompt, + const TArray& MCPTools, + const FString& Instructions, + const FString& OverrideModel, + int32 MaxOutputTokens, + EResponderReasoning Reasoning, + bool bUseWebSearch, + EResponderToolChoice ToolChoice) +{ + UOpenAiResponder* Action = NewObject(); + Action->InputPrompt = Prompt; + Action->InputInstructions = Instructions; + Action->InputModel = OverrideModel.IsEmpty() ? StoredModel : OverrideModel; + Action->InputMaxOutputTokens = MaxOutputTokens; + Action->InputReasoning = Reasoning; + Action->bInputUseWebSearch = bUseWebSearch; + Action->InputMCPTools = MCPTools; + Action->InputToolChoice = ToolChoice; + Action->RegisterWithGameInstance(WorldContextObject); + return Action; +} + +void UOpenAiResponder::Activate() +{ + if (StoredApiKey.IsEmpty()) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiResponder: API key not set. Call InitResponder first.")); + Failed.Broadcast(TEXT("API key not set. Call InitResponder first.")); + return; + } + + RequestStartTime = FPlatformTime::Seconds(); + ActiveRequests.Add(this); + + // ── Build JSON request body ──────────────────────────────────────────── + + TSharedRef RootObject = MakeShared(); + RootObject->SetStringField(TEXT("model"), InputModel); + RootObject->SetStringField(TEXT("input"), InputPrompt); + + if (!InputInstructions.IsEmpty()) + { + RootObject->SetStringField(TEXT("instructions"), InputInstructions); + } + + if (InputMaxOutputTokens > 0) + { + RootObject->SetNumberField(TEXT("max_output_tokens"), InputMaxOutputTokens); + } + + // Reasoning + if (InputReasoning != EResponderReasoning::None) + { + TSharedRef ReasoningObject = MakeShared(); + FString EffortStr; + switch (InputReasoning) + { + case EResponderReasoning::Low: EffortStr = TEXT("low"); break; + case EResponderReasoning::Medium: EffortStr = TEXT("medium"); break; + case EResponderReasoning::High: EffortStr = TEXT("high"); break; + default: break; + } + ReasoningObject->SetStringField(TEXT("effort"), EffortStr); + RootObject->SetObjectField(TEXT("reasoning"), ReasoningObject); + } + + // Tools array + const bool bHasTools = bInputUseWebSearch || InputMCPTools.Num() > 0; + if (bHasTools) + { + TArray> ToolsArray; + + // Web search + if (bInputUseWebSearch) + { + TSharedRef WebSearchTool = MakeShared(); + WebSearchTool->SetStringField(TEXT("type"), TEXT("web_search_preview")); + ToolsArray.Add(MakeShared(WebSearchTool)); + } + + // MCP tools + for (const FResponderMCPTool& MCPTool : InputMCPTools) + { + TSharedRef MCPObject = MakeShared(); + MCPObject->SetStringField(TEXT("type"), TEXT("mcp")); + MCPObject->SetStringField(TEXT("server_label"), MCPTool.ServerLabel); + MCPObject->SetStringField(TEXT("server_url"), MCPTool.ServerUrl); + + if (MCPTool.Headers.Num() > 0) + { + TSharedRef HeadersObject = MakeShared(); + for (const auto& Pair : MCPTool.Headers) + { + HeadersObject->SetStringField(Pair.Key, Pair.Value); + } + MCPObject->SetObjectField(TEXT("headers"), HeadersObject); + } + + ToolsArray.Add(MakeShared(MCPObject)); + } + + RootObject->SetArrayField(TEXT("tools"), ToolsArray); + + // Tool choice: auto-promote None → Auto when tools are present + EResponderToolChoice EffectiveToolChoice = InputToolChoice; + if (EffectiveToolChoice == EResponderToolChoice::None) + { + EffectiveToolChoice = EResponderToolChoice::Auto; + } + + switch (EffectiveToolChoice) + { + case EResponderToolChoice::Auto: + RootObject->SetStringField(TEXT("tool_choice"), TEXT("auto")); + break; + case EResponderToolChoice::Required: + RootObject->SetStringField(TEXT("tool_choice"), TEXT("required")); + break; + default: + break; + } + } + + // Serialize to string + FString Body; + TSharedRef> Writer = TJsonWriterFactory<>::Create(&Body); + FJsonSerializer::Serialize(RootObject, Writer); + + // ── Fire HTTP request ────────────────────────────────────────────────── + + TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + HttpRequest->SetURL(TEXT("https://api.openai.com/v1/responses")); + HttpRequest->SetVerb(TEXT("POST")); + HttpRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json")); + HttpRequest->SetHeader(TEXT("Authorization"), FString::Printf(TEXT("Bearer %s"), *StoredApiKey)); + HttpRequest->SetContentAsString(Body); + HttpRequest->OnProcessRequestComplete().BindUObject(this, &UOpenAiResponder::HandleHttpResponse); + + if (!HttpRequest->ProcessRequest()) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiResponder: Failed to start HTTP request.")); + Failed.Broadcast(TEXT("Failed to start HTTP request.")); + } +} + +void UOpenAiResponder::ClearAllResponses() +{ + TArray> RequestsCopy = ActiveRequests; + ActiveRequests.Empty(); + + for (const TWeakObjectPtr& Weak : RequestsCopy) + { + if (UOpenAiResponder* Action = Weak.Get()) + { + Action->SetReadyToDestroy(); + } + } +} + +void UOpenAiResponder::HandleHttpResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful) +{ + ActiveRequests.RemoveAll([this](const TWeakObjectPtr& Weak) + { + return !Weak.IsValid() || Weak.Get() == this; + }); + + const float ElapsedTime = static_cast(FPlatformTime::Seconds() - RequestStartTime); + + if (!bWasSuccessful || !Response.IsValid()) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiResponder: HTTP request failed.")); + Failed.Broadcast(TEXT("HTTP request failed.")); + return; + } + + const int32 Code = Response->GetResponseCode(); + const FString Body = Response->GetContentAsString(); + + if (Code < 200 || Code >= 300) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiResponder: HTTP %d — %s"), Code, *Body); + Failed.Broadcast(FString::Printf(TEXT("HTTP %d — %s"), Code, *Body)); + return; + } + + // Parse root JSON + TSharedPtr RootObject; + TSharedRef> Reader = TJsonReaderFactory<>::Create(Body); + if (!FJsonSerializer::Deserialize(Reader, RootObject) || !RootObject.IsValid()) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiResponder: Failed to parse response JSON.")); + Failed.Broadcast(TEXT("Failed to parse response JSON.")); + return; + } + + // Check for API-level error + if (RootObject->HasField(TEXT("error"))) + { + const TSharedPtr* ErrorObject; + if (RootObject->TryGetObjectField(TEXT("error"), ErrorObject)) + { + FString ErrorMsg = (*ErrorObject)->GetStringField(TEXT("message")); + UE_LOG(LogTemp, Error, TEXT("OpenAiResponder: API error — %s"), *ErrorMsg); + Failed.Broadcast(ErrorMsg); + return; + } + } + + // Navigate output[] → find message → content[] + FResponderResult Result; + Result.ExecutionTime = ElapsedTime; + + const TArray>* OutputArray; + if (!RootObject->TryGetArrayField(TEXT("output"), OutputArray)) + { + UE_LOG(LogTemp, Error, TEXT("OpenAiResponder: No output array in response.")); + Failed.Broadcast(TEXT("No output array in response.")); + return; + } + + for (const TSharedPtr& OutputItem : *OutputArray) + { + const TSharedPtr& OutputObject = OutputItem->AsObject(); + if (!OutputObject.IsValid()) continue; + + FString ItemType = OutputObject->GetStringField(TEXT("type")); + if (ItemType != TEXT("message")) continue; + + const TArray>* ContentArray; + if (!OutputObject->TryGetArrayField(TEXT("content"), ContentArray)) continue; + + for (const TSharedPtr& ContentItem : *ContentArray) + { + const TSharedPtr& ContentObject = ContentItem->AsObject(); + if (!ContentObject.IsValid()) continue; + + FResponseContent ResponseContent; + ResponseContent.Type = ContentObject->GetStringField(TEXT("type")); + ResponseContent.Text = ContentObject->HasField(TEXT("text")) ? ContentObject->GetStringField(TEXT("text")) : FString(); + + // Parse annotations + const TArray>* AnnotationsArray; + if (ContentObject->TryGetArrayField(TEXT("annotations"), AnnotationsArray)) + { + for (const TSharedPtr& AnnotationItem : *AnnotationsArray) + { + const TSharedPtr& AnnotationObject = AnnotationItem->AsObject(); + if (!AnnotationObject.IsValid()) continue; + + FResponseAnnotation Annotation; + Annotation.Type = AnnotationObject->GetStringField(TEXT("type")); + Annotation.StartIndex = static_cast(AnnotationObject->GetNumberField(TEXT("start_index"))); + Annotation.EndIndex = static_cast(AnnotationObject->GetNumberField(TEXT("end_index"))); + Annotation.Url = AnnotationObject->HasField(TEXT("url")) ? AnnotationObject->GetStringField(TEXT("url")) : FString(); + Annotation.Title = AnnotationObject->HasField(TEXT("title")) ? AnnotationObject->GetStringField(TEXT("title")) : FString(); + + ResponseContent.Annotations.Add(Annotation); + } + } + + Result.Content.Add(ResponseContent); + } + } + + if (Result.Content.Num() > 0) + { + Success.Broadcast(Result); + } + else + { + UE_LOG(LogTemp, Warning, TEXT("OpenAiResponder: Response contained no message content.")); + Failed.Broadcast(TEXT("Response contained no message content.")); + } +} diff --git a/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/AIBaseConfig.h b/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/AIBaseConfig.h index 546d7de..f2a69cf 100644 --- a/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/AIBaseConfig.h +++ b/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/AIBaseConfig.h @@ -28,12 +28,19 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Settings", meta = (ExposeOnSpawn = "true")) TArray SystemPrompts; + // Check user transcription for inappropriate behaviour first (adds a delay!) + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|MCP", meta = (ExposeOnSpawn = "true")) + bool bUseModeration = false; + + // Boot up a FastMCP Server on Startup (On close keep open in Editor Mode, kill in shipping) UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|MCP", meta = (ExposeOnSpawn = "true")) bool bUseMCPServer = true; + // Class of the MCP Server UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|MCP", meta = (ExposeOnSpawn = "true")) TSubclassOf MCPManagerClass; + // Config of the MCP Server UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|MCP", meta = (ExposeOnSpawn = "true")) UMCPBaseConfig* MCPConfig; diff --git a/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/Tools/OpenAiModerator.h b/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/Tools/OpenAiModerator.h new file mode 100644 index 0000000..619235d --- /dev/null +++ b/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/Tools/OpenAiModerator.h @@ -0,0 +1,159 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Kismet/BlueprintAsyncActionBase.h" +#include "Http.h" +#include "OpenAiModerator.generated.h" + +USTRUCT(BlueprintType) +struct FModerationCategories +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bSexual = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bSexualMinors = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bHarassment = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bHarassmentThreatening = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bHate = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bHateThreatening = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bIllicit = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bIllicitViolent = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bSelfHarm = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bSelfHarmIntent = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bSelfHarmInstructions = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bViolence = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bViolenceGraphic = false; +}; + +USTRUCT(BlueprintType) +struct FModerationCategoryScores +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float Sexual = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float SexualMinors = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float Harassment = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float HarassmentThreatening = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float Hate = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float HateThreatening = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float Illicit = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float IllicitViolent = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float SelfHarm = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float SelfHarmIntent = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float SelfHarmInstructions = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float Violence = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float ViolenceGraphic = 0.f; +}; + +USTRUCT(BlueprintType) +struct FModerationResult +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + bool bFlagged = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + FModerationCategories Categories; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + FModerationCategoryScores CategoryScores; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Moderation") + float ExecutionTime = 0.f; +}; + +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnModerationResult, const FModerationResult&, Result); + +/** + * Async Blueprint node for OpenAI Moderation API. + * Call InitModeration once to set API key and model, then use UseModeration to classify text. + */ +UCLASS() +class AVATARCORE_AI_API UOpenAiModerator : public UBlueprintAsyncActionBase +{ + GENERATED_BODY() + +public: + /** Set API key and model. Call once before using UseModeration. */ + UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI|Moderation", meta = (DisplayName = "Init Moderation")) + static void InitModeration(const FString& ApiKey, const FString& Model = TEXT("omni-moderation-latest")); + + /** Classify text using the OpenAI Moderation API. Returns via Flagged or Passed exec pins. */ + UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI|Moderation", meta = (BlueprintInternalUseOnly = "true", DisplayName = "Use Moderation", WorldContext = "WorldContextObject")) + static UOpenAiModerator* UseModeration(UObject* WorldContextObject, const FString& Text); + + /** Cancel all active moderation requests. */ + UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI|Moderation", meta = (DisplayName = "Clear Moderation")) + static void ClearModeration(); + + UPROPERTY(BlueprintAssignable) + FOnModerationResult Flagged; + + UPROPERTY(BlueprintAssignable) + FOnModerationResult Passed; + + virtual void Activate() override; + +private: + void HandleHttpResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful); + + FString InputText; + double RequestStartTime = 0.0; + + static FString StoredApiKey; + static FString StoredModel; + static TArray> ActiveRequests; +}; diff --git a/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/Tools/OpenAiResponder.h b/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/Tools/OpenAiResponder.h new file mode 100644 index 0000000..c3f4b80 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/Tools/OpenAiResponder.h @@ -0,0 +1,154 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Kismet/BlueprintAsyncActionBase.h" +#include "Http.h" +#include "OpenAiResponder.generated.h" + +// ── Enums ────────────────────────────────────────────────────────────────── + +UENUM(BlueprintType) +enum class EResponderToolChoice : uint8 +{ + None UMETA(DisplayName = "None"), + Auto UMETA(DisplayName = "Auto"), + Required UMETA(DisplayName = "Required") +}; + +UENUM(BlueprintType) +enum class EResponderReasoning : uint8 +{ + None UMETA(DisplayName = "None"), + Low UMETA(DisplayName = "Low"), + Medium UMETA(DisplayName = "Medium"), + High UMETA(DisplayName = "High") +}; + +// ── Structs ──────────────────────────────────────────────────────────────── + +USTRUCT(BlueprintType) +struct FResponderMCPTool +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + FString ServerLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + FString ServerUrl; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + TMap Headers; +}; + +USTRUCT(BlueprintType) +struct FResponseAnnotation +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + FString Type; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + int32 StartIndex = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + int32 EndIndex = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + FString Url; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + FString Title; +}; + +USTRUCT(BlueprintType) +struct FResponseContent +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + FString Type; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + FString Text; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + TArray Annotations; +}; + +USTRUCT(BlueprintType) +struct FResponderResult +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + TArray Content; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|Responder") + float ExecutionTime = 0.f; +}; + +// ── Delegates ────────────────────────────────────────────────────────────── + +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnResponderSuccess, const FResponderResult&, Result); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnResponderFailed, const FString&, ErrorMessage); + +// ── Class ────────────────────────────────────────────────────────────────── + +UCLASS() +class AVATARCORE_AI_API UOpenAiResponder : public UBlueprintAsyncActionBase +{ + GENERATED_BODY() + +public: + /** Set API key and default model. Call once before using CallOpenAiResponse. */ + UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI|Responder", meta = (DisplayName = "Init Responder")) + static void InitResponder(const FString& ApiKey, const FString& Model = TEXT("gpt-4.1")); + + /** Send a one-shot request to the OpenAI Responses API. */ + UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI|Responder", + meta = (BlueprintInternalUseOnly = "true", DisplayName = "Call OpenAI Response", WorldContext = "WorldContextObject", + AutoCreateRefTerm = "Instructions,OverrideModel,MCPTools")) + static UOpenAiResponder* CallOpenAiResponse( + UObject* WorldContextObject, + const FString& Prompt, + const TArray& MCPTools, + const FString& Instructions, + const FString& OverrideModel, + int32 MaxOutputTokens = 0, + EResponderReasoning Reasoning = EResponderReasoning::None, + bool bUseWebSearch = false, + EResponderToolChoice ToolChoice = EResponderToolChoice::None); + + /** Cancel all active response requests. */ + UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI|Responder", meta = (DisplayName = "Clear All Responses")) + static void ClearAllResponses(); + + UPROPERTY(BlueprintAssignable) + FOnResponderSuccess Success; + + UPROPERTY(BlueprintAssignable) + FOnResponderFailed Failed; + + virtual void Activate() override; + +private: + void HandleHttpResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful); + + FString InputPrompt; + FString InputInstructions; + FString InputModel; + int32 InputMaxOutputTokens = 0; + EResponderReasoning InputReasoning = EResponderReasoning::None; + bool bInputUseWebSearch = false; + TArray InputMCPTools; + EResponderToolChoice InputToolChoice = EResponderToolChoice::None; + double RequestStartTime = 0.0; + + static FString StoredApiKey; + static FString StoredModel; + static TArray> ActiveRequests; +}; diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/AvatarCore_FaceDetector.uplugin b/Unreal/Plugins/AvatarCore_FaceDetector/AvatarCore_FaceDetector.uplugin new file mode 100644 index 0000000..bccdcff --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/AvatarCore_FaceDetector.uplugin @@ -0,0 +1,24 @@ +{ + "FileVersion": 3, + "Version": 1, + "VersionName": "1.0", + "FriendlyName": "AvatarCore_FaceDetector", + "Description": "Tracking faces in webcame streams", + "Category": "Other", + "CreatedBy": "b.ReX", + "CreatedByURL": "", + "DocsURL": "", + "MarketplaceURL": "", + "SupportURL": "", + "CanContainContent": true, + "IsBetaVersion": false, + "IsExperimentalVersion": false, + "Installed": false, + "Modules": [ + { + "Name": "AvatarCore_FaceDetector", + "Type": "Runtime", + "LoadingPhase": "Default" + } + ] +} \ No newline at end of file diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Content/BP_FaceDetector.uasset b/Unreal/Plugins/AvatarCore_FaceDetector/Content/BP_FaceDetector.uasset new file mode 100644 index 0000000..1e0843f --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Content/BP_FaceDetector.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e2c75901f0365cc99789da9d57035891f2a36fb4daba590703e78d3dbaae933 +size 439459 diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Content/Material/M_Face.uasset b/Unreal/Plugins/AvatarCore_FaceDetector/Content/Material/M_Face.uasset new file mode 100644 index 0000000..8d0e6a5 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Content/Material/M_Face.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:125c72bb49428c32e298d989f66a7b28416a7311cc2d8282fa943228a6cd2af5 +size 13934 diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Content/Material/M_FaceArea.uasset b/Unreal/Plugins/AvatarCore_FaceDetector/Content/Material/M_FaceArea.uasset new file mode 100644 index 0000000..55f9369 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Content/Material/M_FaceArea.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:618d3bf2b9e96fbf6c5502c9e952189a390b53f600045dad015a7f1058c5daf8 +size 11705 diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Content/Misc/BP_TargetActor.uasset b/Unreal/Plugins/AvatarCore_FaceDetector/Content/Misc/BP_TargetActor.uasset new file mode 100644 index 0000000..3735d8c --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Content/Misc/BP_TargetActor.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3382025c8c64eb4048bf7f8661e34969542da1187472f69c7ddcc35b967ae19f +size 102360 diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Content/Misc/Target.uasset b/Unreal/Plugins/AvatarCore_FaceDetector/Content/Misc/Target.uasset new file mode 100644 index 0000000..13dc7c1 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Content/Misc/Target.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7957059cacf581b1bb22a643c0060c6e9bdd76300e457dc49af58f8cf57d3c81 +size 72077 diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Resources/Icon128.png b/Unreal/Plugins/AvatarCore_FaceDetector/Resources/Icon128.png new file mode 100644 index 0000000..9cbf628 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Resources/Icon128.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f41cab739893bde1040beb34ba2e9f666cc4a502c0f350cf1c6bfa8bee783d1f +size 6957 diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/AvatarCore_FaceDetector.Build.cs b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/AvatarCore_FaceDetector.Build.cs new file mode 100644 index 0000000..60e0bcc --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/AvatarCore_FaceDetector.Build.cs @@ -0,0 +1,60 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using System.IO; +using UnrealBuildTool; + +public class AvatarCore_FaceDetector : ModuleRules +{ + public AvatarCore_FaceDetector(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + // ... add public include paths required here ... + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + // ... add other private include paths required here ... + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core", + // ... add other public dependencies that you statically link with here ... + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "CoreUObject", + "Engine", + "Projects", + "Json", + "JsonUtilities", + "Slate", + "SlateCore", + // ... add private dependencies that you statically link with here ... + } + ); + + + DynamicallyLoadedModuleNames.AddRange( + new string[] + { + // ... add any modules that your module loads dynamically here ... + } + ); + + RuntimeDependencies.Add(Path.Combine(ModuleDirectory, "..", "ThirdParty", "FaceDetector.exe")); + RuntimeDependencies.Add(Path.Combine(ModuleDirectory, "..", "ThirdParty", "face_landmarker.task")); + } +} diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Private/AvatarCore_FaceDetector.cpp b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Private/AvatarCore_FaceDetector.cpp new file mode 100644 index 0000000..11f5a50 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Private/AvatarCore_FaceDetector.cpp @@ -0,0 +1,20 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "AvatarCore_FaceDetector.h" + +#define LOCTEXT_NAMESPACE "FAvatarCore_FaceDetectorModule" + +void FAvatarCore_FaceDetectorModule::StartupModule() +{ + // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module +} + +void FAvatarCore_FaceDetectorModule::ShutdownModule() +{ + // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, + // we call this function before unloading the module. +} + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(FAvatarCore_FaceDetectorModule, AvatarCore_FaceDetector) \ No newline at end of file diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Private/AvatarFaceDetectorSubsystem.cpp b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Private/AvatarFaceDetectorSubsystem.cpp new file mode 100644 index 0000000..c321fb8 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Private/AvatarFaceDetectorSubsystem.cpp @@ -0,0 +1,307 @@ +#include "AvatarFaceDetectorSubsystem.h" + +#include "Async/Async.h" +#include "Interfaces/IPluginManager.h" +#include "Misc/Paths.h" +#include "Serialization/JsonReader.h" +#include "Serialization/JsonSerializer.h" + +bool UAvatarFaceDetectorSubsystem::InitializeFaceDetector(const FFaceDetectorSettings& Settings) +{ + ShutdownFaceDetector(); + return StartProcess(Settings); +} + +void UAvatarFaceDetectorSubsystem::ShutdownFaceDetector() +{ + StopProcess(); +} + +bool UAvatarFaceDetectorSubsystem::IsFaceDetectorRunning() const +{ + FProcHandle HandleCopy = ProcHandle; + return HandleCopy.IsValid() && FPlatformProcess::IsProcRunning(HandleCopy); +} + +void UAvatarFaceDetectorSubsystem::Deinitialize() +{ + ShutdownFaceDetector(); + Super::Deinitialize(); +} + +FString UAvatarFaceDetectorSubsystem::ResolveThirdPartyFilePath(const FString& FileName) const +{ + const TSharedPtr Plugin = IPluginManager::Get().FindPlugin(TEXT("AvatarCore_FaceDetector")); + if (!Plugin.IsValid()) + { + return FString(); + } + + const FString ThirdPartyDir = FPaths::Combine(Plugin->GetBaseDir(), TEXT("Source"), TEXT("ThirdParty")); + return FPaths::Combine(ThirdPartyDir, FileName); +} + +bool UAvatarFaceDetectorSubsystem::StartProcess(const FFaceDetectorSettings& Settings) +{ + FScopeLock Lock(&StateCriticalSection); + + const FString ExePath = ResolveThirdPartyFilePath(TEXT("FaceDetector.exe")); + if (ExePath.IsEmpty() || !FPaths::FileExists(ExePath)) + { + AsyncTask(ENamedThreads::GameThread, [this]() + { + OnFaceDetectorError.Broadcast(TEXT("FaceDetector.exe not found (expected under Plugin/Source/ThirdParty).")); + }); + return false; + } + + FString Args; + if (!Settings.WebcamName.IsEmpty()) + { + Args += FString::Printf(TEXT(" --device \"%s\""), *Settings.WebcamName); + } + if (!Settings.ModelName.IsEmpty()) + { + const FString ModelPath = ResolveThirdPartyFilePath(Settings.ModelName); + Args += FString::Printf(TEXT(" --model \"%s\""), *ModelPath); + } + Args += FString::Printf(TEXT(" --num_faces %d"), Settings.NumFaces); + if (Settings.bDebugMode) + { + Args += TEXT(" --debugMode"); + } + + Args += FString::Printf(TEXT(" --fps_limit %d"), Settings.FrameRateLimit); + + FPlatformProcess::CreatePipe(ReadPipe, WritePipe); + + bStopRequested = false; + StdoutRemainder.Reset(); + + ProcHandle = FPlatformProcess::CreateProc( + *ExePath, + *Args, + false, + true, + true, + nullptr, + 0, + nullptr, + WritePipe, + ReadPipe); + + if (!ProcHandle.IsValid()) + { + FPlatformProcess::ClosePipe(ReadPipe, WritePipe); + ReadPipe = nullptr; + WritePipe = nullptr; + + AsyncTask(ENamedThreads::GameThread, [this]() + { + OnFaceDetectorError.Broadcast(TEXT("Failed to launch FaceDetector.exe")); + }); + return false; + } + + ReaderFuture = Async(EAsyncExecution::Thread, [this]() + { + ReaderThreadMain(); + }); + + return true; +} + +void UAvatarFaceDetectorSubsystem::StopProcess() +{ + TFuture LocalFuture; + FProcHandle LocalProc; + void* LocalReadPipe = nullptr; + void* LocalWritePipe = nullptr; + + { + FScopeLock Lock(&StateCriticalSection); + + bStopRequested = true; + LocalFuture = MoveTemp(ReaderFuture); + LocalProc = ProcHandle; + LocalReadPipe = ReadPipe; + LocalWritePipe = WritePipe; + + ProcHandle.Reset(); + ReadPipe = nullptr; + WritePipe = nullptr; + StdoutRemainder.Reset(); + } + + if (LocalProc.IsValid()) + { + FPlatformProcess::TerminateProc(LocalProc, true); + FPlatformProcess::CloseProc(LocalProc); + } + + if (LocalFuture.IsValid()) + { + LocalFuture.Wait(); + } + + if (LocalReadPipe != nullptr || LocalWritePipe != nullptr) + { + FPlatformProcess::ClosePipe(LocalReadPipe, LocalWritePipe); + } +} + +void UAvatarFaceDetectorSubsystem::ReaderThreadMain() +{ + while (!bStopRequested) + { + FString NewOutput; + { + FScopeLock Lock(&StateCriticalSection); + if (ReadPipe == nullptr) + { + break; + } + NewOutput = FPlatformProcess::ReadPipe(ReadPipe); + } + + if (NewOutput.IsEmpty()) + { + if (!IsFaceDetectorRunning()) + { + break; + } + FPlatformProcess::Sleep(0.01f); + continue; + } + + FString Combined; + { + FScopeLock Lock(&StateCriticalSection); + Combined = StdoutRemainder + NewOutput; + StdoutRemainder.Reset(); + } + + TArray Lines; + Combined.ParseIntoArrayLines(Lines, false); + + const bool bEndsWithNewline = Combined.EndsWith(TEXT("\n")) || Combined.EndsWith(TEXT("\r\n")); + if (!bEndsWithNewline && Lines.Num() > 0) + { + FScopeLock Lock(&StateCriticalSection); + StdoutRemainder = Lines.Pop(); + } + + for (const FString& Line : Lines) + { + const FString Trimmed = Line.TrimStartAndEnd(); + if (!Trimmed.IsEmpty()) + { + HandleLineOnWorkerThread(Trimmed); + } + } + } + + if (!bStopRequested) + { + AsyncTask(ENamedThreads::GameThread, [this]() + { + OnFaceDetectorError.Broadcast(TEXT("FaceDetector process stopped.")); + }); + } +} + +void UAvatarFaceDetectorSubsystem::HandleLineOnWorkerThread(const FString& Line) +{ + TSharedPtr Root; + TSharedRef> Reader = TJsonReaderFactory<>::Create(Line); + if (!FJsonSerializer::Deserialize(Reader, Root) || !Root.IsValid()) + { + AsyncTask(ENamedThreads::GameThread, [this, Line]() + { + OnFaceDetectorLog.Broadcast(Line); + }); + return; + } + + FString Type; + if (!Root->TryGetStringField(TEXT("type"), Type)) + { + AsyncTask(ENamedThreads::GameThread, [this, Line]() + { + OnFaceDetectorLog.Broadcast(Line); + }); + return; + } + + if (Type.Equals(TEXT("error"), ESearchCase::IgnoreCase)) + { + FString Message; + Root->TryGetStringField(TEXT("message"), Message); + AsyncTask(ENamedThreads::GameThread, [this, Message]() + { + OnFaceDetectorError.Broadcast(Message); + }); + return; + } + + if (Type.Equals(TEXT("log"), ESearchCase::IgnoreCase)) + { + FString Message; + Root->TryGetStringField(TEXT("message"), Message); + AsyncTask(ENamedThreads::GameThread, [this, Message]() + { + OnFaceDetectorLog.Broadcast(Message); + }); + return; + } + + if (Type.Equals(TEXT("faces"), ESearchCase::IgnoreCase)) + { + TArray Faces; + + const TArray>* FacesJson = nullptr; + if (Root->TryGetArrayField(TEXT("faces"), FacesJson) && FacesJson != nullptr) + { + Faces.Reserve(FacesJson->Num()); + for (const TSharedPtr& FaceVal : *FacesJson) + { + if (!FaceVal.IsValid() || FaceVal->Type != EJson::Object) + { + continue; + } + const TSharedPtr FaceObj = FaceVal->AsObject(); + if (!FaceObj.IsValid()) + { + continue; + } + + double X = 0.0; + double Y = 0.0; + double IdNum = (double)INDEX_NONE; + bool bActive = false; + + FaceObj->TryGetNumberField(TEXT("x"), X); + FaceObj->TryGetNumberField(TEXT("y"), Y); + FaceObj->TryGetNumberField(TEXT("id"), IdNum); + FaceObj->TryGetBoolField(TEXT("active"), bActive); + + FDetectedFace Face; + Face.Position = FVector2D((float)X, (float)Y); + Face.Id = (int32)IdNum; + Face.TrackingLost = !bActive; + Faces.Add(Face); + } + } + + AsyncTask(ENamedThreads::GameThread, [this, Faces = MoveTemp(Faces)]() mutable + { + OnFaceDetectorUpdate.Broadcast(Faces); + }); + return; + } + + AsyncTask(ENamedThreads::GameThread, [this, Line]() + { + OnFaceDetectorLog.Broadcast(Line); + }); +} diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Public/AvatarCore_FaceDetector.h b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Public/AvatarCore_FaceDetector.h new file mode 100644 index 0000000..5c81379 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Public/AvatarCore_FaceDetector.h @@ -0,0 +1,14 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "Modules/ModuleManager.h" + +class FAvatarCore_FaceDetectorModule : public IModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; +}; diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Public/AvatarFaceDetectorSubsystem.h b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Public/AvatarFaceDetectorSubsystem.h new file mode 100644 index 0000000..bd54fd8 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Public/AvatarFaceDetectorSubsystem.h @@ -0,0 +1,56 @@ +#pragma once + +#include "CoreMinimal.h" +#include "HAL/PlatformProcess.h" +#include "Async/Future.h" +#include "Subsystems/GameInstanceSubsystem.h" +#include "FaceDetectorTypes.h" +#include "AvatarFaceDetectorSubsystem.generated.h" + +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFaceDetectorErrorSig, const FString&, ErrorMessage); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFaceDetectorLogSig, const FString&, LogMessage); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFaceDetectorUpdateSig, const TArray&, Faces); + +UCLASS() +class AVATARCORE_FACEDETECTOR_API UAvatarFaceDetectorSubsystem : public UGameInstanceSubsystem +{ + GENERATED_BODY() + +public: + UFUNCTION(BlueprintCallable, Category="FaceDetector") + bool InitializeFaceDetector(const FFaceDetectorSettings& Settings); + + UFUNCTION(BlueprintCallable, Category="FaceDetector") + void ShutdownFaceDetector(); + + UFUNCTION(BlueprintCallable, Category="FaceDetector") + bool IsFaceDetectorRunning() const; + + UPROPERTY(BlueprintAssignable, Category="FaceDetector") + FFaceDetectorErrorSig OnFaceDetectorError; + + UPROPERTY(BlueprintAssignable, Category="FaceDetector") + FFaceDetectorLogSig OnFaceDetectorLog; + + UPROPERTY(BlueprintAssignable, Category="FaceDetector") + FFaceDetectorUpdateSig OnFaceDetectorUpdate; + + virtual void Deinitialize() override; + +private: + bool StartProcess(const FFaceDetectorSettings& Settings); + void StopProcess(); + void ReaderThreadMain(); + void HandleLineOnWorkerThread(const FString& Line); + + FString ResolveThirdPartyFilePath(const FString& FileName) const; + +private: + FProcHandle ProcHandle; + void* ReadPipe = nullptr; + void* WritePipe = nullptr; + TAtomic bStopRequested = false; + TFuture ReaderFuture; + FCriticalSection StateCriticalSection; + FString StdoutRemainder; +}; diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Public/FaceDetectorTypes.h b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Public/FaceDetectorTypes.h new file mode 100644 index 0000000..265acc8 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_FaceDetector/Source/AvatarCore_FaceDetector/Public/FaceDetectorTypes.h @@ -0,0 +1,45 @@ +#pragma once + +#include "CoreMinimal.h" +#include "FaceDetectorTypes.generated.h" + +USTRUCT(BlueprintType) +struct FDetectedFace +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="FaceDetector") + FVector2D Position = FVector2D::ZeroVector; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="FaceDetector") + int32 Id = INDEX_NONE; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="FaceDetector") + bool TrackingLost = false; +}; + +USTRUCT(BlueprintType) +struct FFaceDetectorSettings +{ + GENERATED_BODY() + + //Name of the webcam (pick first if ambigious) + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="FaceDetector") + FString WebcamName; + + //Create a DebugWindow to see detected faces + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="FaceDetector") + bool bDebugMode = false; + + //Override Model (full path to modelfile) + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="FaceDetector") + FString ModelName; + + //Limit Framerate of Videostream (0 to disable) + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="FaceDetector") + int32 FrameRateLimit = 24; + + //Max faces to track + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="FaceDetector") + int32 NumFaces = 5; +}; diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/FaceDetector.exe b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/FaceDetector.exe new file mode 100644 index 0000000..64fe9e3 Binary files /dev/null and b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/FaceDetector.exe differ diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/blaze_face_short_range.tflite b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/blaze_face_short_range.tflite new file mode 100644 index 0000000..1b2b522 Binary files /dev/null and b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/blaze_face_short_range.tflite differ diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/face_landmarker.task b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/face_landmarker.task new file mode 100644 index 0000000..c50c845 Binary files /dev/null and b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/face_landmarker.task differ diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/ffmpeg.exe b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/ffmpeg.exe new file mode 100644 index 0000000..bb2dbeb Binary files /dev/null and b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/ffmpeg.exe differ diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/ffplay.exe b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/ffplay.exe new file mode 100644 index 0000000..a36cb9e Binary files /dev/null and b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/ffplay.exe differ diff --git a/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/ffprobe.exe b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/ffprobe.exe new file mode 100644 index 0000000..f06e311 Binary files /dev/null and b/Unreal/Plugins/AvatarCore_FaceDetector/Source/ThirdParty/ffprobe.exe differ diff --git a/Unreal/Plugins/AvatarCore_Manager/Content/AvatarCoreManager.uasset b/Unreal/Plugins/AvatarCore_Manager/Content/AvatarCoreManager.uasset index e0b6040..2a85e90 100644 --- a/Unreal/Plugins/AvatarCore_Manager/Content/AvatarCoreManager.uasset +++ b/Unreal/Plugins/AvatarCore_Manager/Content/AvatarCoreManager.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8395e1e60135aa4a7ab0cc0e0d9c65979692eca809cf9738f885d8a9ce3cb51 -size 1739559 +oid sha256:4b39e51dc4b46cea4952c5a6fe1a64522ed20f7fda08463c8772d534f93e3a49 +size 1782888 diff --git a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BFL_ProjectHelper.uasset b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BFL_ProjectHelper.uasset index 4141154..0732cac 100644 --- a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BFL_ProjectHelper.uasset +++ b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BFL_ProjectHelper.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28ca6f971697adb60abc9218bcd65a24f0ed403d2fb0b40dabc0740c3226f9a9 -size 79194 +oid sha256:7f69b23eb63a4d07ad9816cc0d94ed37515fd9b26fabaebd51672a6fd3f6b09b +size 77944 diff --git a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BP_StateManager.uasset b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BP_StateManager.uasset index 9c3ca26..4b27f28 100644 --- a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BP_StateManager.uasset +++ b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BP_StateManager.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d86a9c65d318f83d29a84e8dd966f00c6a3da4eddb21bd64e022c628ca9b85f -size 686648 +oid sha256:aef95b404ab0246c5c70b99f865a6226aa4c6acb4fec519200fb0262b9d427ea +size 695304 diff --git a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/DataTable/PDA_Mode.uasset b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/DataTable/PDA_Mode.uasset index c1430c3..4c6f180 100644 --- a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/DataTable/PDA_Mode.uasset +++ b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/DataTable/PDA_Mode.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79e3d452badf2d77deb4f05ffb68a96391b9a854db1228cedc3bcb754d551539 -size 14730 +oid sha256:65cf80e749250fcefa24dda965a09e29f23b582d5784c55c8d98025541a3e2db +size 17369 diff --git a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/BP_LookAtTest.uasset b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/BP_LookAtTest.uasset index dda5424..8b68ba6 100644 --- a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/BP_LookAtTest.uasset +++ b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/BP_LookAtTest.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68a68d411ec89f21c3d9d1543ca24962e6c60970c0ea442b30044a199a7886da -size 30555 +oid sha256:6b134f4a3b9500393e4238f99ff770d4a1b67921742623cf5aea93a1fea5bd5a +size 29971 diff --git a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/W_Base_DynamicAvatarReaction.uasset b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/W_Base_DynamicAvatarReaction.uasset index ff561cf..918a3bb 100644 --- a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/W_Base_DynamicAvatarReaction.uasset +++ b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/W_Base_DynamicAvatarReaction.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e90260cb087f825af1fcc79ad096593cc6b8b21e63fa104c3b9379703967f54d -size 81979 +oid sha256:d2824833cd9f37a0cf36836b32e16484160cce9f5c7d9851c5430e119bfa700d +size 110698 diff --git a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/W_TestAvatarLookAtWidgetCollection.uasset b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/W_TestAvatarLookAtWidgetCollection.uasset index 826f720..d7b772e 100644 --- a/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/W_TestAvatarLookAtWidgetCollection.uasset +++ b/Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/W_TestAvatarLookAtWidgetCollection.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:568c4dfd36758b8f7eb9de9e55eb4cd80c4e1ec8950ba5cf656b64dcf9d04e7a -size 215755 +oid sha256:56f0170b0662440eb41fdab5169d0608649dfe28825daa374a9740002bb0ced0 +size 380285 diff --git a/Unreal/Plugins/AvatarCore_Manager/Content/UnrealCommands/OpenAI_Websearch_Command.uasset b/Unreal/Plugins/AvatarCore_Manager/Content/UnrealCommands/OpenAI_Websearch_Command.uasset new file mode 100644 index 0000000..19ca7a0 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_Manager/Content/UnrealCommands/OpenAI_Websearch_Command.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee7d8e8a915c988035d09fc4c0ba4d29e9b001bcf15e1adc04b8554cb62dcb84 +size 81649 diff --git a/Unreal/Plugins/AvatarCore_Manager/Content/n8n/BP_N8N_Connector.uasset b/Unreal/Plugins/AvatarCore_Manager/Content/n8n/BP_N8N_Connector.uasset index 7635bd6..3203b7b 100644 --- a/Unreal/Plugins/AvatarCore_Manager/Content/n8n/BP_N8N_Connector.uasset +++ b/Unreal/Plugins/AvatarCore_Manager/Content/n8n/BP_N8N_Connector.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:798aeec1d80776e179033c5db0bb19743a181d0eb95b343ac9c03012766f8f30 -size 246170 +oid sha256:dd78e5ceb04c264878d42998909a9957e9e15c3eeb060d317e404092ee8a337d +size 232521 diff --git a/Unreal/Plugins/AvatarCore_Manager/Content/n8n/N8N_WebResearchCommand.uasset b/Unreal/Plugins/AvatarCore_Manager/Content/n8n/N8N_WebResearchCommand.uasset index 501f093..d1fb346 100644 --- a/Unreal/Plugins/AvatarCore_Manager/Content/n8n/N8N_WebResearchCommand.uasset +++ b/Unreal/Plugins/AvatarCore_Manager/Content/n8n/N8N_WebResearchCommand.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b767b8cdb58ba9511878ca5a64ca6f02ae0b10987193b1b3f5ec7befe6d8ec25 -size 104596 +oid sha256:9f073ad0c1c11f9890fa8d6119d8d3bd8bcf0fac6a04201ae9e1dac31a6c7f0d +size 124979 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/AvatarCore_MetaHuman.uplugin b/Unreal/Plugins/AvatarCore_MetaHuman/AvatarCore_MetaHuman.uplugin index a2a59c4..a0d9642 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/AvatarCore_MetaHuman.uplugin +++ b/Unreal/Plugins/AvatarCore_MetaHuman/AvatarCore_MetaHuman.uplugin @@ -13,5 +13,12 @@ "CanContainContent": true, "IsBetaVersion": false, "IsExperimentalVersion": false, - "Installed": false + "Installed": false, + "Modules": [ + { + "Name": "AvatarCore_MetaHuman", + "Type": "Runtime", + "LoadingPhase": "Default" + } + ] } \ No newline at end of file diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_Body.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_Body.uasset index bb033ec..9e3d93e 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_Body.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_Body.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac721e4a880fb06c567d34b587927eeb0bac8f966f589b70c877c167bb77858b -size 696202 +oid sha256:ca5c1c3be9024f9a44e75d6e631ff62c216fa647732400ad7b224126464d2479 +size 697427 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_BodyRetarget.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_BodyRetarget.uasset index 30da548..b33420b 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_BodyRetarget.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_BodyRetarget.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35e0851e79bd53c8270025584190e250ae853190e13d1375542d83132c037d19 -size 524209 +oid sha256:8f846e1b35b1129dbc6a91828e14572e41d4e212e91d3003aa8ea26ed4965525 +size 544028 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_Face.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_Face.uasset index dbf33e4..2af3ee3 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_Face.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/AvatarCore_AnimInst_Face.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b4f1d0d75152f07b99049a2dd9e9babd13439ae3f08cc021701ad08c68acaac -size 1908385 +oid sha256:a3cd40ac35b280f1a9485f834a4f4bb4974735f250d57ea31d9be3711544868f +size 2017369 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_01.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_01.uasset new file mode 100644 index 0000000..9380e95 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_01.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8771031a0d97b0cfcae1f2a82c57ec82c022019fd4e095e458badea01f35cb7 +size 7235 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_02.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_02.uasset new file mode 100644 index 0000000..5a37061 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_02.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11419f10a3e9ca953e023e8e3dc84855c016f6e66999b4fc5786c78ec46b5ba6 +size 7069 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_03.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_03.uasset new file mode 100644 index 0000000..34e8bb9 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_03.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b786f33c3b4ba7238f3107f6de0f728e20898fc8bcee5d2d3f02e2384b200138 +size 6479 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_04.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_04.uasset new file mode 100644 index 0000000..8a2828f --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_04.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afacaaabc1786121a09c56d0ab249aaed4d1e8e6f14f6b25809cd342313d6d63 +size 7673 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_05.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_05.uasset new file mode 100644 index 0000000..1f9ce06 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Multiple_05.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfb32fb6140ff0a9bf093f0e9a58f5491c19dc1d4733c442c7e43301b7d55a47 +size 6443 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Normal_01.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Normal_01.uasset new file mode 100644 index 0000000..14d539f --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Normal_01.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d27ffdaa90f2442bd2e167f8805754a38dc75c948ffc8c332352b934e505213d +size 4756 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Normal_02.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Normal_02.uasset new file mode 100644 index 0000000..23beb6e --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Normal_02.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60ffe3a6772976292cddb08ab023d0a52f1d336ac5c1790cd0d2535bbbaa36f2 +size 4856 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Normal_03.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Normal_03.uasset new file mode 100644 index 0000000..775ab4c --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Normal_03.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:860b8534c1eaa16a13844639a861477c34c1e2aabfcd8c46cbcdf45db165b6b4 +size 4800 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Partial_01.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Partial_01.uasset new file mode 100644 index 0000000..987aac9 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Partial_01.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44d397a21d9780da2c6d7692efc8d24943056ff390e565e5af03aab5b0aca1b9 +size 4988 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Partial_02.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Partial_02.uasset new file mode 100644 index 0000000..0f2ffde --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Partial_02.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99229a82da4ff9c3f1af3416ce6960793fcc95f32b2a6bc97c3720767f4ed204 +size 5043 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Partial_03.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Partial_03.uasset new file mode 100644 index 0000000..7c8f92d --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Partial_03.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d09c2b3f5e59c6bb9fbaa317aea87f88f4e0852496fd695cef1d4d878422bbd9 +size 5005 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Slow_01.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Slow_01.uasset new file mode 100644 index 0000000..1fd7c6e --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Slow_01.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67760af8ae5e85927cc17e142807c97cba868fb184cbc67f2fdff244ce217aa4 +size 5578 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Slow_02.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Slow_02.uasset new file mode 100644 index 0000000..7808507 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Slow_02.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:158824e0c9631415d6be06fbfff42478828637da0ed4f0e36baadd5a241223ae +size 5592 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Slow_03.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Slow_03.uasset new file mode 100644 index 0000000..814cc6d --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Blinking/CF_AvatarCore_Animation_Blinking_Slow_03.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2861ac8c65b7c61a39dd950b053d937602316a6bc5fea973608944d745d3286b +size 5770 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/CF_AvatarCore_Animation_PupilConstriction.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/CF_AvatarCore_Animation_PupilConstriction.uasset index 0660108..c328bdd 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/CF_AvatarCore_Animation_PupilConstriction.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/CF_AvatarCore_Animation_PupilConstriction.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2eb3e5f47aa7f346f69191390238c1f3d7090f685b06b4b94e87c7636b4397b9 -size 5011 +oid sha256:6af2c85e7577fb1189aeda027fc1e5dfaa73961591125cb33583201c7fda4509 +size 4967 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_01.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_01.uasset deleted file mode 100644 index a3c8df8..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_01.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:00d793bec07938b00b2dac3084583a39ce9694e677c01b183982d8e753958cb3 -size 5586 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_02.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_02.uasset deleted file mode 100644 index d0efba0..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_02.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:faaa146bbaad4bd415697cd7fe27b527d8b4ba2f378457078659004cf0031f2a -size 4436 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_03.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_03.uasset deleted file mode 100644 index b3ea579..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_03.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f3e5f98b1464e23bbfd366a03a3429219b5be44abab4ef2210ee0c9437a59c2c -size 4329 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_04.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_04.uasset deleted file mode 100644 index 5ffc15d..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_04.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f78725c4240ed611704cae262638e6b97896711dc68f47cf5528b7f5f32c435b -size 4357 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_05.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_05.uasset deleted file mode 100644 index 5ab5566..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_05.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3398d18ee47d963f9d4632e9cf5bc911b38abaf13c9abce69ab36f9821083dde -size 4195 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_06.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_06.uasset deleted file mode 100644 index ab82c2d..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_06.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7917e2fd5b18410f69a6ae3455936e1b46e2312409d6a257d7f939bc970e40b3 -size 4344 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_07.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_07.uasset deleted file mode 100644 index 93fe9fd..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_07.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:81be01f1b4b3efe6e49e3aa68eac2e9c01e1c89f56158880ce37f08dff10a275 -size 4283 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_08.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_08.uasset deleted file mode 100644 index d2e55e4..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_08.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca6fa810a1a09c12587502990b311550326923efd16a2bddef8f2059db96386b -size 4226 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_09.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_09.uasset deleted file mode 100644 index cbe3fa8..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/CF_AvatarCore_Animation_Nodding_09.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6855b50c57a26ff34aed05ca7e08560bbfa6eacce2c1c22c16c9d237c0559dbd -size 4284 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_01.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_01.uasset new file mode 100644 index 0000000..5448809 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_01.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a023b6028a14464ee42b32efec8a798702fe63dd3d37da277449c536e6a2b9f9 +size 5562 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_02.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_02.uasset new file mode 100644 index 0000000..f858dad --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_02.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b72741fa7b0cdb68f1fd22e3c31c7fd0dce2a9301c3ea1576cad96fe5c6ea10e +size 4962 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_03.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_03.uasset new file mode 100644 index 0000000..078602f --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_03.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad075a1c1872189be0bf2777f9bdd378a02977d0d3727431f9f77aafbb01b79a +size 4578 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_04.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_04.uasset new file mode 100644 index 0000000..96be781 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_04.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed0d93c8bc6ad335da1c34f2cbade3c2b7bf8efa9a3d6d7b15177f4d7c394016 +size 4427 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_05.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_05.uasset new file mode 100644 index 0000000..56a1854 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Strong/CF_AvatarCore_Animation_Nodding_Strong_05.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d665d315b88f8438bfb06a7afffeb21e717793657ad79e055960aa87105433c +size 4342 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_01.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_01.uasset new file mode 100644 index 0000000..a8c1733 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_01.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fcab1147b876edb4ba368a416c2d93376e1f04122590a7adc661bac16b801d1 +size 5635 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_02.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_02.uasset new file mode 100644 index 0000000..5998346 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_02.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:736a53439d2cb297983809445e59a5ad4f1aca4fe56d9235174bd57bd5a7f5db +size 4485 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_03.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_03.uasset new file mode 100644 index 0000000..7175508 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_03.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2cd114b030978eef5e2c8fb6b6804f4889c6de160e3e18306c149fc219835bd +size 4378 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_04.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_04.uasset new file mode 100644 index 0000000..7917e6b --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_04.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bd61d3b19d0d3ba05b269ddeada266c05791c597f55999c3efe0d08071d2e00 +size 4406 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_05.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_05.uasset new file mode 100644 index 0000000..d1778e4 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_05.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2a870b40933183431a37cb5978fa475f9fd380a4cd79cc46a76b4d2db9ed3f3 +size 4244 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_06.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_06.uasset new file mode 100644 index 0000000..036a90d --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_06.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1f7ddbc912c6c3e6a63f70dd2558ba0332dfedd1071ab9b4b1ed9e0e23470ce +size 4393 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_07.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_07.uasset new file mode 100644 index 0000000..2bfd108 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_07.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d172555c9e96b19616c257b944a8c1661ad38db2afca4625172c771d98eba8af +size 4332 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_08.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_08.uasset new file mode 100644 index 0000000..1a39539 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_08.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:631967720428be15e4c3dd4f9007527cd4202a71ec8e15047e7d677e5c7812d4 +size 4275 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_09.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_09.uasset new file mode 100644 index 0000000..696c081 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Curves/Nodding/Subtle/CF_AvatarCore_Animation_Nodding_Subtle_09.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f13e011f069d75ffa7f5f7f562bb9cc5558926ee1c4a7a2e7446b0f8c54f19d +size 4333 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Interface/BI_AvatarAnimBP.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Interface/BI_AvatarAnimBP.uasset index 3df2039..af37883 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Interface/BI_AvatarAnimBP.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimBPs/Interface/BI_AvatarAnimBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f93e61f75d51cc493885586df1ce74bb378e34093259c705be70ce36b589f574 -size 62307 +oid sha256:c3466a1f45157b91e5908643a5bb3ea6a69b27a92a7d2bd57bba3615c4da1d10 +size 61951 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkMultiple.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkMultiple.uasset new file mode 100644 index 0000000..559f5d6 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkMultiple.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fefabd3f4c3bdc7ace4d29229a3d8cfca684983f573ff71f9612a7889a361309 +size 30092 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkNormal.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkNormal.uasset new file mode 100644 index 0000000..b385d2d --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkNormal.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6f22c6c253bc7a2bbaa03bcbd56b3b869d23ea6ff6096c333c6c6ca087a6d3b +size 30064 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkPartial.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkPartial.uasset new file mode 100644 index 0000000..6ca64ce --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkPartial.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:323ddba13d0c38b8b687f0c84597337f1caddb87a7712bbdc85f9a3971d18ed4 +size 30078 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkRandom.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkRandom.uasset new file mode 100644 index 0000000..64915fc --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkRandom.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d68ba5e99562a667375d65f82588eac2faf42f4cb78288f60bd880699eef6684 +size 30064 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkSlow.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkSlow.uasset new file mode 100644 index 0000000..187f531 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkSlow.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec0502535f2b4e1a60cc8853a59a269661950188f753666d7bf7da674c9aefed +size 30494 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkSlowOrMultiple.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkSlowOrMultiple.uasset new file mode 100644 index 0000000..08c56cb --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimNotifys/AF_AvatarCore_BlinkSlowOrMultiple.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54a3771ba2a4ecd0f72224d5dc48eeb53512e76beb9b3d969c577120871ad42a +size 37361 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimationConfigs/AnimationConfig.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimationConfigs/AnimationConfig.uasset index 39415c4..3bf1415 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimationConfigs/AnimationConfig.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimationConfigs/AnimationConfig.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c84ec7141745b11dbffe5f5d321e356eba245e5687a390697d81dbb805d257ae -size 25937 +oid sha256:0d442703a57dc86721104a13ca780899c4145f5360261918f1e8dcc1083b7468 +size 26564 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimationConfigs/AnimationConfig_Base.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimationConfigs/AnimationConfig_Base.uasset index ab04f50..4a26983 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimationConfigs/AnimationConfig_Base.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimationConfigs/AnimationConfig_Base.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3ecf0febf137ad1f89abaeb62fc2289b4458498342835d4d3b3c4758e0ef0ed -size 24697 +oid sha256:378ea3acba8a1303fc28f223af3ba464c8f424cdb80629626ea4221a8c98cf92 +size 39798 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_04_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_04_Neutralized.uasset new file mode 100644 index 0000000..7d02a5f --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_04_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa963595a0484e0b54ed86fd285b0d46670f11aa8c350a213c1ec4500b0a4196 +size 28361508 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_04_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_04_adjusted.uasset deleted file mode 100644 index 1a062c0..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_04_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f4b4b760166956fdc31389d29b39812fe349bcb49a154c6d986a2258b9610ba0 -size 29008652 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_23_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_23_adjusted.uasset deleted file mode 100644 index 670b25b..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_23_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:803f9c502c6cd1d6e08bddb74d85b466dfa3aeb53a357207da92f806783db801 -size 20488845 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_25_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_25_adjusted.uasset deleted file mode 100644 index 27ce329..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_25_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f88cb4c4200543f780c0087e8f80197a820f3f7b805e8e2f0c1bc65e5d263fe9 -size 38857272 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_28_01.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_28_01.uasset new file mode 100644 index 0000000..f56b7ef --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_28_01.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89996cc28e0a0eee4469d072f4f6679e0370f287d27b66a6775b50436f7fb3f9 +size 5657966 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_28_02.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_28_02.uasset new file mode 100644 index 0000000..a850680 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_LL_JG_01_Idle_28_02.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8632b4fbb8c34bdf383896c1f1803e615b8e988d35385521c60437176e4ddffd +size 16735236 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take01_Anim01_HandsBehindBack_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take01_Anim01_HandsBehindBack_Cascadeur.uasset new file mode 100644 index 0000000..d0b39e4 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take01_Anim01_HandsBehindBack_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77bd0e1493ea3a9e42f1db2ba1d2a651e05688fe49dc303c7d81747f241d37d5 +size 7312853 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take02_Anim02_ShakeArms_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take02_Anim02_ShakeArms_Cascadeur.uasset new file mode 100644 index 0000000..28dc13e --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take02_Anim02_ShakeArms_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e65153fd97ff27b9ee067414f882f3b79994cf1bc0e9b00f813279cb0eab6ab +size 3222419 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take02_Anim03_StretchUpperBody_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take02_Anim03_StretchUpperBody_Cascadeur.uasset new file mode 100644 index 0000000..794e400 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take02_Anim03_StretchUpperBody_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:138fd72ac5044f4884fb4425235b99f0c260f6d72e28fe6afb07fce425ef8a3c +size 1779 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take11_Anim02_SwingArms_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take11_Anim02_SwingArms_Cascadeur.uasset new file mode 100644 index 0000000..7746781 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take11_Anim02_SwingArms_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac10e881d154d12affe042eebce672b09560dabc68a490c90f9d082fb5349a9e +size 3042401 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take21_Anim01_StretchFingers_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take21_Anim01_StretchFingers_Cascadeur.uasset new file mode 100644 index 0000000..d69f5ce --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdleActive/AS_MC_Tim_02_Take21_Anim01_StretchFingers_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a3c22f9b858e9a30ef44c0168cac6288fc93f78d4dd4b3bc6cb9372fac6bdf3 +size 3066727 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_04_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_04_Neutralized.uasset new file mode 100644 index 0000000..3e454f6 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_04_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82ca2511c56deb8775dc2d6b8e554240ceb56d319a637d7e78b5abdd6aa1e969 +size 28361507 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_04_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_04_adjusted.uasset deleted file mode 100644 index 430e11d..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_04_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5e962612df3894cf2010b9f83fee8fc32a8cbaeb83c8eba0068f51b1163a155c -size 29008658 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_07_Eyebrows.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_07_Eyebrows.uasset deleted file mode 100644 index 5df31c2..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_07_Eyebrows.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a1172a2a48f3971c3dd3448b450aec3d1d99f09a941479eaa3fb8c92847e8733 -size 2183117 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_07_Eyebrows_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_07_Eyebrows_Neutralized.uasset new file mode 100644 index 0000000..fecdb27 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_07_Eyebrows_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5437ecfa397bfb9157192a4ec7d3be5a8b5644032d1b40f96f8f4b7c2342c7b9 +size 18751396 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_08.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_08.uasset deleted file mode 100644 index ef444a9..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_08.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:37e4bc3e8e9eb0343cddbcc581aac56b76f82e7be0707a81a6c57038053a4aa7 -size 3073020 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_08_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_08_Neutralized.uasset new file mode 100644 index 0000000..f978af9 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_08_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7551645acb67446213d6338404e017a3421c83a70db372b959f5ed871080642a +size 28044985 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_14.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_14.uasset deleted file mode 100644 index 8b4b608..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_14.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ef2e45de7980ab0d63a17f8ace40889dc203c75b752abad8e2ad38e1233c79a7 -size 2021526 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_14_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_14_Neutralized.uasset new file mode 100644 index 0000000..af7abf9 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_14_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9acd860eb4920a3ee68653e0b8741db1b19619c5c86a86ab48ef443497624ead +size 17306893 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_15.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_15.uasset deleted file mode 100644 index 47dfd1e..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_15.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5a94afc3391c1b0f6e126f8749c3826fee9b1e56aa42cbf2589373ee9b14295b -size 2301734 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_15_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_15_Neutralized.uasset new file mode 100644 index 0000000..690ea46 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_15_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ad209ad1f34c22cd8c7fd8093d471bd9c24b7bf3f7b505afd7ed3a155ae5d4f +size 20157454 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_17.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_17.uasset deleted file mode 100644 index dd667aa..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_17.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fab7992df4dce6597b8a93f6739ede3b445b9bdbb14b3c1e8cd5102cbd70432a -size 3078228 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_17_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_17_Neutralized.uasset new file mode 100644 index 0000000..654912a --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_17_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71ed86328efcac05297ee9c645fa1f2179675353570a1552e6e1c292b3f92e75 +size 28016244 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_20.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_20.uasset deleted file mode 100644 index edbbfc0..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_20.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:18bcfef7257741f520180ebc279c1734162148f81b42b1baeac26f3cc6b54100 -size 2455911 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_23.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_23.uasset deleted file mode 100644 index 10ec17a..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_23.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:81786ff46c33daf26599cd4f16044b7b35e3f828b2bfedd231a04ed1baefaa91 -size 2296167 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_23_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_23_Neutralized.uasset new file mode 100644 index 0000000..3e30270 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_23_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41af4f9d20b2975ed4859c77c701d2d754f2843e3236cfe94bfbd38d9c6ab4ef +size 19686786 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_23_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_23_adjusted.uasset deleted file mode 100644 index 38613b8..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_23_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4ff5be481fea9b8e65e5808b4b913402697caaca370eaed61f3ff3cf0006469 -size 20488847 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_25.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_25.uasset deleted file mode 100644 index 5904ef3..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_25.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2535c0d46463c12578bd3868a3a14184410ffdb8849ad7db5ec45d441a4920e1 -size 4133407 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_25_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_25_Neutralized.uasset new file mode 100644 index 0000000..7135a4b --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_25_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:816fdb85fa4593fe8e10cd471e522d65189072c474cab8c66402edbc3d8a9466 +size 38122029 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_25_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_25_adjusted.uasset deleted file mode 100644 index 357a897..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_25_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e7582b3f1e4e2f5a943bd48d5dcb0f411a15d97426d73b40da53dcde3c415d54 -size 38857274 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_26.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_26.uasset deleted file mode 100644 index 99658e8..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_26.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c25f9af70b8e3643b25dd5a675819e74720ed7a6647c44bdd86d62f3c7f616eb -size 4165683 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_26_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_26_Neutralized.uasset new file mode 100644 index 0000000..9089c56 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_26_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:191981774fbff3aca2f4808a74bfc568039ac05feb81902dca1540f998dce710 +size 38681376 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_28_01.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_28_01.uasset deleted file mode 100644 index d429e4f..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_28_01.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:261bb3a2b7bd84152dbe597a1031cc9909d595b09b9f8b1e4a79f34ebf03152e -size 6533351 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_28_02.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_28_02.uasset deleted file mode 100644 index f9550a8..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_LL_JG_01_Idle_28_02.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:065dfb1677f9c7bc9b147c2ebc78ca02647a631b61d4273899681550cf616469 -size 19296558 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take01_Anim01_HandsBehindBack_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take01_Anim01_HandsBehindBack_Cascadeur.uasset new file mode 100644 index 0000000..512a4bc --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take01_Anim01_HandsBehindBack_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3bdf0847af78291ba30e57dec18bf8a71b63f3ed75982ddb09a9462f5c317f7 +size 7312847 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take02_Anim02_ShakeArms_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take02_Anim02_ShakeArms_Cascadeur.uasset new file mode 100644 index 0000000..6de85ad --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take02_Anim02_ShakeArms_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40cf5acb0a6963adde7bc9bcc2b952a0e3a81f2787674025d2d8d2ee9aef5a10 +size 3222244 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take02_Anim03_StretchUpperBody_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take02_Anim03_StretchUpperBody_Cascadeur.uasset new file mode 100644 index 0000000..eb213f9 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take02_Anim03_StretchUpperBody_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ce6df5659a73864b6d3403b2d0791b5c0940ff4f6f5ca4797a129397021b8b4 +size 5343924 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take02_Anim04_SquatStretch.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take02_Anim04_SquatStretch.uasset new file mode 100644 index 0000000..14c8b77 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take02_Anim04_SquatStretch.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:899e51d1985daaa687a630f2dc70e36cb51aa733cee6a3fbfaebda2ef6c73929 +size 3839862 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take05_Anim01_LookToSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take05_Anim01_LookToSide_Cut_Cascadeur.uasset new file mode 100644 index 0000000..0d11b91 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take05_Anim01_LookToSide_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fae49adafaf02daab709272c181ca8cf4bd581bc36f1773ce2b1fc438ee4676 +size 3990057 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take05_Anim02_LookToSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take05_Anim02_LookToSide_Cut_Cascadeur.uasset new file mode 100644 index 0000000..02db596 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take05_Anim02_LookToSide_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88daff7689e4defd3130474a41a839b72832d89097f2400c8b277831d8807fff +size 2247592 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take07_Anim01_StretchDown_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take07_Anim01_StretchDown_Cascadeur.uasset new file mode 100644 index 0000000..e51ac45 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take07_Anim01_StretchDown_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68f059fc147370f71107750a340b82cdf948be35d5851c35b2e56e43a6fa41ab +size 4569732 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take08_Anim01_Idle_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take08_Anim01_Idle_Cascadeur.uasset new file mode 100644 index 0000000..4e0bde5 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take08_Anim01_Idle_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5eed845b63ed683e11552f1872e6de69046b21265aaf6a6835b0f91f936b532d +size 3324854 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take08_Anim02_Idle_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take08_Anim02_Idle_Cascadeur.uasset new file mode 100644 index 0000000..2570f58 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take08_Anim02_Idle_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b59dd1c68bb5c904a95692741bd73b3589b72a297e82f265b79cffe489733af5 +size 3180415 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take08_Anim02_LongIdle_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take08_Anim02_LongIdle_Cut_Cascadeur.uasset new file mode 100644 index 0000000..9bb678f --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take08_Anim02_LongIdle_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d5f296406c66717488923f2b82119404e77978a0d68fd2fe396ccedb304a9e3 +size 4129801 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take09_Anim01_LookToSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take09_Anim01_LookToSide_Cut_Cascadeur.uasset new file mode 100644 index 0000000..d95e7ad --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take09_Anim01_LookToSide_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04e9989f5312d9dc9ddb6889a2ca76b0a531cf57a3949964e27f3dcb2ab4977a +size 3774249 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take09_Anim03_LookToSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take09_Anim03_LookToSide_Cut_Cascadeur.uasset new file mode 100644 index 0000000..0e6c438 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take09_Anim03_LookToSide_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc6d2d6ead5c4d781df6ea712972e29112de688abf840880b70fa75eeaee23c3 +size 2440927 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take10_Anim01_LookToSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take10_Anim01_LookToSide_Cut_Cascadeur.uasset new file mode 100644 index 0000000..e624ec5 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take10_Anim01_LookToSide_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6ae5dc6e5c98e19eecb429a9fc02aba5783f60d98de9a81295cece0972a2d03 +size 2436700 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take11_Anim02_SwingArms_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take11_Anim02_SwingArms_Cascadeur.uasset new file mode 100644 index 0000000..f445be3 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take11_Anim02_SwingArms_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88b106161306415f94c839246e04cb1ba4e955768a9013d70b3dd2b47c2a1f85 +size 3042190 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take12_Anim02_Idle_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take12_Anim02_Idle_Cascadeur.uasset new file mode 100644 index 0000000..4ff1aac --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take12_Anim02_Idle_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f455cdb64d5cf1f37b4a0ff3676c8bf64940acb54cc91691ca08aa6040f786d +size 2457344 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take13_Anim01_LookSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take13_Anim01_LookSide_Cut_Cascadeur.uasset new file mode 100644 index 0000000..8e0f65f --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take13_Anim01_LookSide_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9290fd982990b99f279fd6a2b32490a10c14eab17342eea387cc9fa14eaee17e +size 2330724 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take13_Anim02_LookSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take13_Anim02_LookSide_Cut_Cascadeur.uasset new file mode 100644 index 0000000..3c085a2 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take13_Anim02_LookSide_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fc5da2419a7d2332d89d4742a7f20fce1afcb888a7ae9a95fd6723eae419447 +size 2439574 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take19_Anim01_ListenNod_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take19_Anim01_ListenNod_Cut_Cascadeur.uasset new file mode 100644 index 0000000..fd60a82 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take19_Anim01_ListenNod_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04032ab3d533ced387b546d8817ecb8a69aebe33b7954f0055edc058900a0109 +size 2030591 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take19_Anim02_ListenNod_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take19_Anim02_ListenNod_Cut_Cascadeur.uasset new file mode 100644 index 0000000..f786231 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take19_Anim02_ListenNod_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcbb2838f6dcbc4cd312ac28abe47b54536f6f944a3b22e551d5e9b052f809ac +size 1949417 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take20_Anim01_Listen_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take20_Anim01_Listen_Cut_Cascadeur.uasset new file mode 100644 index 0000000..e37dc6a --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take20_Anim01_Listen_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9ef8613960b52272ec805dac3980ebf3a474aa340bb35c66af79bd637e1a75d +size 2672343 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take20_Anim02_ListenNod_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take20_Anim02_ListenNod_Cut_Cascadeur.uasset new file mode 100644 index 0000000..ef4f7a7 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take20_Anim02_ListenNod_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:448f301f02c536cc974a6f9737ceece9e8d4f90fb44017795a8dc0c923d81272 +size 2353325 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take20_Anim03_ListenNod_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take20_Anim03_ListenNod_Cut_Cascadeur.uasset new file mode 100644 index 0000000..c815981 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take20_Anim03_ListenNod_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da6b8e4b276b6ce63f99927500515643d5b977709b44f0031d54a43d7d322c54 +size 2157085 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take21_Anim01_StretchFingers_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take21_Anim01_StretchFingers_Cascadeur.uasset new file mode 100644 index 0000000..e0ad26a --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take21_Anim01_StretchFingers_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38a93b28214998cf2edfd319c21ace2c5c5c48f6c481d3825515d859d0f01979 +size 3066532 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take22_Anim01_ListenNod_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take22_Anim01_ListenNod_Cut_Cascadeur.uasset new file mode 100644 index 0000000..6e8f43a --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/IdlePassive/AS_MC_Tim_02_Take22_Anim01_ListenNod_Cut_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1171fce44c83e2d492c6cc21d62ea9c6744ad458a957d60c64b8137750379eba +size 2733685 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_02_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_02_adjusted.uasset deleted file mode 100644 index 9dd3104..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_02_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:070ca57863e86fcb672525e2d7a2743975e199e2974e8314f948dedbac013595 -size 26054487 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_04_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_04_adjusted.uasset deleted file mode 100644 index 6f9f7cf..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_04_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4c1625128fbcd11e9061b6aa14a6ca56ff1c16286cb26ae1e726da24fb5fa6a6 -size 23211124 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_05_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_05_adjusted.uasset deleted file mode 100644 index 789aabc..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_05_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32b597fffa47f6518fbf55a1562609260c87d741a1f3f6756fc7cb54d923a07f -size 24275723 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_06_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_06_adjusted.uasset deleted file mode 100644 index 732d755..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_06_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b2f43bbf96fff3b6424d39cfc5f3e711661c3a32c5f1c22ca1885a11ff002d9b -size 15209209 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_09_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_09_adjusted.uasset deleted file mode 100644 index 027df77..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_09_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce156f8040c0d2e670b375bb9f5386458ae7ef3e358e88dae42978a5db9fe825 -size 9364227 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_16_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_16_adjusted.uasset deleted file mode 100644 index 6f49a20..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_16_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f75abe9d0f30e43551a206bbc6e0c9912bd08b55d17a512c14b9620d5a610fef -size 23207191 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_17_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_17_adjusted.uasset deleted file mode 100644 index 9332dbc..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Listening/AS_LL_JG_01_Listening_17_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:18ed949b1eef6a506356f8b4fde82cad8cc108f1d6af7f2ab041244d82420fd3 -size 22856261 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_01_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_01_Neutralized.uasset new file mode 100644 index 0000000..db3b9b0 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_01_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41001fba227ecd62d3490992d6722a64c7abe99abf3623c023e54afc769df6c2 +size 18930579 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_01_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_01_adjusted.uasset deleted file mode 100644 index 5d605b6..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_01_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36766cdbdc4ce9758cc058cae244e4fb8abb9d5889dc035d97428deffeb7af8c -size 19485050 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_02_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_02_adjusted.uasset deleted file mode 100644 index a3c0502..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_02_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:62fc1f2e3c9441c6c2e83269e18ccb6eb5b80454395e3a1eec756712f5d00e50 -size 17167034 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_06_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_06_adjusted.uasset index 9838965..33f514b 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_06_adjusted.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_06_adjusted.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fc7e8edda67bd1a18ff306b0653bb05ce73a7c5dee68e4a313c0fee885590a4 -size 15106862 +oid sha256:3694aba84c12a49d2ece9533c9512be67788aae1c574c87d898e35bae4e6bb8d +size 15106879 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_07_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_07_Neutralized.uasset new file mode 100644 index 0000000..679cf2f --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_07_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78faeb694e7c7ece0313359a42c33a7ec219690a020a8eaaa5f4332811ad625e +size 12832715 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_07_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_07_adjusted.uasset deleted file mode 100644 index 562896e..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_07_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4c5c569bbb2c5305ec13211900bc7f27395d2768156dd7e429ea0ae55c0dce8a -size 13393606 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_08_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_08_adjusted.uasset deleted file mode 100644 index f02ed18..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_08_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d9d15519e82e17459cef0894082794e6f0d51bba9f30bcdba1912a287565d39a -size 17181271 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_09_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_09_adjusted.uasset index b2bbad4..09b6c41 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_09_adjusted.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_09_adjusted.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b04d9d1e0bc8591404a2556e43a4c7f10515aa0ed5c80ddf85fb953f85d347b -size 15022550 +oid sha256:0a1b98b7c9473439a70e386482824d89a7342c951aec6e1cf730f167a5d87a25 +size 15391119 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_11_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_11_Neutralized.uasset new file mode 100644 index 0000000..f41b8b2 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_11_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0734220d01ddb1f3ba8a3979d8186b48ea411cf06cd19781712d147f0f17fd22 +size 21407889 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_11_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_11_adjusted.uasset deleted file mode 100644 index 21d40d6..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_11_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dd2501bed8b6013e656b298ae791576f5b35bdfe1416dcbf30f18ddbd8069a99 -size 21447333 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_12_Neutralized.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_12_Neutralized.uasset new file mode 100644 index 0000000..0022a88 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_12_Neutralized.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58d503ad2f5c5181ade3e3dc0f61c0c9bc929255eea0030d4efc2e3634af72d8 +size 17696015 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_12_adjusted.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_12_adjusted.uasset deleted file mode 100644 index 2cb4a1e..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_LL_JG_01_Thinking_12_adjusted.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ed3c51d3de885a30dec24a5393aa97c06aae824fbd47eaad92ec93e4cf4386b2 -size 17710723 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take05_Anim01_LookToSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take05_Anim01_LookToSide_Cut_Cascadeur.uasset deleted file mode 100644 index 1b6398b..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take05_Anim01_LookToSide_Cut_Cascadeur.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:019cc388909ade3345ebe6898c1f3376cb24266926eae6a70aa1cf4f7b4fb109 -size 2880852 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take05_Anim02_LookToSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take05_Anim02_LookToSide_Cut_Cascadeur.uasset deleted file mode 100644 index 2dadcfc..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take05_Anim02_LookToSide_Cut_Cascadeur.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ffa716af62ee1da0b80846657254cd264affb8e73ba7a45b7302970eff2dccc0 -size 1522222 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take09_Anim01_LookToSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take09_Anim01_LookToSide_Cut_Cascadeur.uasset deleted file mode 100644 index 5f11aa3..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take09_Anim01_LookToSide_Cut_Cascadeur.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6584519f1649dcdd91f8b68c38e5aa9020f12c43a15cf86a8d5ac6937a90307f -size 3184597 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take09_Anim02_LookToSide_Cut_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take09_Anim02_LookToSide_Cut_Cascadeur.uasset deleted file mode 100644 index 91df088..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take09_Anim02_LookToSide_Cut_Cascadeur.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:332eec8bf8cf398eed84845eb29d9e5f1216b1d004c8fd572cc17446cb69f9f5 -size 1906806 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take09_Anim03_LookToSide_Posed_2_Cascadeur.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take09_Anim03_LookToSide_Posed_2_Cascadeur.uasset new file mode 100644 index 0000000..816254d --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/Animations/Thinking/AS_MC_Tim_02_Take09_Anim03_LookToSide_Posed_2_Cascadeur.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4887fb7c04a9c4c736dc93b527e4a12946e4d2b099dc71334d5801d9bac06688 +size 2517403 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/ControlRig/CR_AvatarCore_Body.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/ControlRig/CR_AvatarCore_Body.uasset index 52d97b4..0057c75 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/ControlRig/CR_AvatarCore_Body.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/ControlRig/CR_AvatarCore_Body.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fbd548c88d615159388ef09dc951a196e1adc5c5ad80289bcb826714f8b8799e -size 2398517 +oid sha256:28e006d44f3fff9a45b27f79671b57168d22fa1c794e05fafbcaee89b05d37bc +size 2375371 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/ControlRig/CR_AvatarCore_Head.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/ControlRig/CR_AvatarCore_Head.uasset index f89a716..dd9b4cf 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/ControlRig/CR_AvatarCore_Head.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/ControlRig/CR_AvatarCore_Head.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7fd23182f5a378122acf049d48b5db2d6ce2a799fa960a7f91b6940b89b76da -size 3132450 +oid sha256:f04cae9205948ce57ad7458808bb252512b3752319983e8ee021045ad0a2919b +size 3115688 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Body/E_PressKit_Poses_Body.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Body/E_PressKit_Poses_Body.uasset deleted file mode 100644 index b1e89a6..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Body/E_PressKit_Poses_Body.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e9a0f0d3c1ca9e25b15ac0e5ea3b87bacab303968f6f054e3475259adbd98dc0 -size 3762 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Body/E_PressKit_Poses_BodyOld.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Body/E_PressKit_Poses_BodyOld.uasset new file mode 100644 index 0000000..a3a5998 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Body/E_PressKit_Poses_BodyOld.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d537132f609efcf5813229c350d0a6d00c4b9168412d826cd3fe08484f261e32 +size 2587 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Face/E_PressKit_Poses_Face.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Face/E_PressKit_Poses_Face.uasset deleted file mode 100644 index f236e5b..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Face/E_PressKit_Poses_Face.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8a110d0f58ef54bc6c1440ee3b831fea47be79af9667053de5295038652ea47a -size 4519 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Face/E_PressKit_Poses_FaceOld.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Face/E_PressKit_Poses_FaceOld.uasset new file mode 100644 index 0000000..288affc --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/PressKit/Face/E_PressKit_Poses_FaceOld.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4b861c4c1a86d1edf753f57198b974b05bafc7bb248bfdbbc5cacb5875d8fc5 +size 2869 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/BaseAvatar.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/BaseAvatar.uasset index 8dd53d4..0af8dbd 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/BaseAvatar.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/BaseAvatar.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c7faa1ed900be9c4fc2141a5e94e76134345acc234a699ecc40fb9fe9aae841 -size 1889644 +oid sha256:46bf5695fac1fd722fc48fd5ad59c43f32716072264a267fa00e48758094144f +size 1959772 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_BlinkingType.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_BlinkingType.uasset new file mode 100644 index 0000000..297080a --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_BlinkingType.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61ac74336a58453b656fe19096fab75da52f6be542a42c8ce30905fccc833d69 +size 2433 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_LookAtSetup.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_LookAtSetup.uasset deleted file mode 100644 index 6342f11..0000000 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_LookAtSetup.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fe9f118a9145d7465bb44b10931c1a7088c13171ba0f1f8992cb892c1e02efcc -size 3024 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_LookAtSetupOld.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_LookAtSetupOld.uasset new file mode 100644 index 0000000..49510d7 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_LookAtSetupOld.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbbb284d01b4e19d61822e05181a9ac7105641306b031c3fd98a8d080ff14b89 +size 2282 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_LookTargetType.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_LookTargetType.uasset index aaf638b..51b2495 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_LookTargetType.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_LookTargetType.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d25cc4e34257469383ee546c5efed6a8fbf0aa24a6517a31c3444c0104794ff6 -size 2350 +oid sha256:9f0e69b082c7b91368eccc3b518690c64745421eed8ab4135dc0a8bcdafe7bf9 +size 2546 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_NoddingType.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_NoddingType.uasset new file mode 100644 index 0000000..a64c3b0 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/E_NoddingType.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bc259654452e71c80437912516d8170bfc8fe76287699f4b811c808b8e202f9 +size 1890 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/S_AnimAsset.uasset b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/S_AnimAsset.uasset index 461e491..9fffdf4 100644 --- a/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/S_AnimAsset.uasset +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/StructsAndEnums/S_AnimAsset.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dfa83be53eee42b26d74aa77b57a411233b84198a63c7b145f3a2375a1fd9ca2 -size 7531 +oid sha256:df3c07928996d71f202077afbf0953678573170aa7367bb7742c40a310020a3f +size 7540 diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/AvatarCore_MetaHuman.Build.cs b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/AvatarCore_MetaHuman.Build.cs new file mode 100644 index 0000000..6859a25 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/AvatarCore_MetaHuman.Build.cs @@ -0,0 +1,54 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; + +public class AvatarCore_MetaHuman : ModuleRules +{ + public AvatarCore_MetaHuman(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + // ... add public include paths required here ... + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + // ... add other private include paths required here ... + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core", + "GameplayTags" + // ... add other public dependencies that you statically link with here ... + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "CoreUObject", + "Engine", + "Slate", + "SlateCore" + // ... add private dependencies that you statically link with here ... + } + ); + + + DynamicallyLoadedModuleNames.AddRange( + new string[] + { + // ... add any modules that your module loads dynamically here ... + } + ); + } +} diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Private/AvatarCore_BaseAvatar.cpp b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Private/AvatarCore_BaseAvatar.cpp new file mode 100644 index 0000000..7fcab45 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Private/AvatarCore_BaseAvatar.cpp @@ -0,0 +1,27 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "AvatarCore_BaseAvatar.h" + +// Sets default values +AAvatarCore_BaseAvatar::AAvatarCore_BaseAvatar() +{ + // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. + PrimaryActorTick.bCanEverTick = true; + +} + +// Called when the game starts or when spawned +void AAvatarCore_BaseAvatar::BeginPlay() +{ + Super::BeginPlay(); + +} + +// Called every frame +void AAvatarCore_BaseAvatar::Tick(float DeltaTime) +{ + Super::Tick(DeltaTime); + +} + diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Private/AvatarCore_MetaHuman.cpp b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Private/AvatarCore_MetaHuman.cpp new file mode 100644 index 0000000..9d3411f --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Private/AvatarCore_MetaHuman.cpp @@ -0,0 +1,12 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "AvatarCore_MetaHuman.h" + +#define LOCTEXT_NAMESPACE "FAvatarCore_MetaHumanModule" + + + + +IMPLEMENT_MODULE(FAvatarCore_MetaHumanModule, AvatarCore_MetaHuman) + +#undef LOCTEXT_NAMESPACE diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Public/AvatarCore_AnimationVariables.h b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Public/AvatarCore_AnimationVariables.h new file mode 100644 index 0000000..f19052e --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Public/AvatarCore_AnimationVariables.h @@ -0,0 +1,81 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Animation/AnimSequence.h" +#include "AvatarCore_AnimationVariables.generated.h" + +UENUM(BlueprintType) +enum class EPressKitPosesBody : uint8 +{ + ArmsOpen UMETA(DisplayName = "Arms Open"), + ArmsClosed UMETA(DisplayName = "Arms Closed"), + Forward UMETA(DisplayName = "Forward"), + FingerUp UMETA(DisplayName = "Finger Up"), + HandsTouching UMETA(DisplayName = "Hands Touching") +}; + +UENUM(BlueprintType) +enum class EPressKitPosesFace : uint8 +{ + Neutral UMETA(DisplayName = "Neutral"), + Smile UMETA(DisplayName = "Smile"), + SmileSide UMETA(DisplayName = "Smile Side"), + SmileBrowsRaised UMETA(DisplayName = "Smile Brows Raised"), + SmileTeeth UMETA(DisplayName = "Smile Teeth"), + SmileOpen UMETA(DisplayName = "Smile Open"), + Custom UMETA(DisplayName = "Custom") +}; + +UENUM(BlueprintType) +enum class ELookAtSetup : uint8 +{ + Disabled UMETA(DisplayName = "Disabled"), + BodyHeadEyes UMETA(DisplayName = "Body Head Eyes"), + BodyHead UMETA(DisplayName = "Body Head"), + Body UMETA(DisplayName = "Body") +}; + +USTRUCT(BlueprintType) +struct FFaceAnim +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + UAnimSequence* AnimFace = nullptr; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "0", ClampMax = "1", UIMin = "0", UIMax = "1")) + float Probability = 1.0f; +}; + +USTRUCT(BlueprintType) +struct FAnimAsset +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + bool HasFaceAnim = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "HasFaceAnim", EditConditionHides)) + UAnimSequence* AnimFace = nullptr; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + UAnimSequence* AnimBody = nullptr; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + ELookAtSetup LookAtSetup = ELookAtSetup::BodyHeadEyes; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "0", ClampMax = "1", UIMin = "0", UIMax = "1")) + float Probability = 1.0f; +}; + +USTRUCT(BlueprintType) +struct FAnimationTypeConfig +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TArray AnimFaceBase; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TArray AnimAssets; +}; diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Public/AvatarCore_BaseAvatar.h b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Public/AvatarCore_BaseAvatar.h new file mode 100644 index 0000000..f757f24 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Public/AvatarCore_BaseAvatar.h @@ -0,0 +1,61 @@ +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "Animation/AnimSequence.h" +#include "AvatarCore_AnimationVariables.h" +#include "AvatarCore_BaseAvatar.generated.h" + +UCLASS(BlueprintType, Blueprintable) +class AVATARCORE_METAHUMAN_API AAvatarCore_BaseAvatar : public AActor +{ + GENERATED_BODY() + +public: + AAvatarCore_BaseAvatar(); + +protected: + virtual void BeginPlay() override; + +public: + virtual void Tick(float DeltaTime) override; + + + /* ========================= + * Modes + * ========================= */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Modes") + bool bPressKitMode = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Modes") + bool bAnimPreviewMode = false; + + + /* ========================= + * Modes | PressKit + * ========================= */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Modes|PressKit", meta = (EditCondition = "bPressKitMode && !bAnimPreviewMode", EditConditionHides)) + TObjectPtr FacePoseCustom = nullptr; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Modes|PressKit", meta = (EditCondition = "bPressKitMode && !bAnimPreviewMode", EditConditionHides)) + EPressKitPosesFace FacePose = EPressKitPosesFace::Neutral; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Modes|PressKit", meta = (EditCondition = "bPressKitMode && !bAnimPreviewMode", EditConditionHides)) + EPressKitPosesBody BodyPose = EPressKitPosesBody::ArmsOpen; + + + /* ========================= + * Modes | AnimPreview + * ========================= */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Modes|AnimPreview", meta = (EditCondition = "bAnimPreviewMode", EditConditionHides)) + TObjectPtr AnimPreviewFace = nullptr; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Modes|AnimPreview", meta = (EditCondition = "bAnimPreviewMode", EditConditionHides)) + TObjectPtr AnimPreviewBody = nullptr; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Modes|AnimPreview", meta = (EditCondition = "bAnimPreviewMode", EditConditionHides)) + float AnimPreviewFaceTime = 0.f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Modes|AnimPreview", meta = (EditCondition = "bAnimPreviewMode", EditConditionHides)) + float AnimPreviewBodyTime = 0.f; +}; diff --git a/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Public/AvatarCore_MetaHuman.h b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Public/AvatarCore_MetaHuman.h new file mode 100644 index 0000000..744df0c --- /dev/null +++ b/Unreal/Plugins/AvatarCore_MetaHuman/Source/AvatarCore_MetaHuman/Public/AvatarCore_MetaHuman.h @@ -0,0 +1,12 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Modules/ModuleManager.h" + +class FAvatarCore_MetaHumanModule : public IModuleInterface +{ +public: + +}; diff --git a/Unreal/Plugins/AvatarCore_nDisplay/AvatarCore_nDisplay.uplugin b/Unreal/Plugins/AvatarCore_nDisplay/AvatarCore_nDisplay.uplugin new file mode 100644 index 0000000..ee63252 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/AvatarCore_nDisplay.uplugin @@ -0,0 +1,34 @@ +{ + "FileVersion": 3, + "Version": 1, + "VersionName": "1.1", + "FriendlyName": "Avatar Core nDisplay", + "Description": "nDisplay integration for the Avatar Core Framework", + "Category": "Other", + "CreatedBy": "b.ReX", + "CreatedByURL": "b.ReX", + "DocsURL": "", + "MarketplaceURL": "", + "SupportURL": "", + "CanContainContent": true, + "IsBetaVersion": false, + "IsExperimentalVersion": false, + "Installed": false, + "Modules": [ + { + "Name": "AvatarCore_nDisplay", + "Type": "Runtime", + "LoadingPhase": "PreLoadingScreen" + } + ], + "Plugins": [ + { + "Name": "nDisplay", + "Enabled": true + }, + { + "Name": "AvatarCore_Manager", + "Enabled": true + } + ] +} \ No newline at end of file diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Content/AvatarBaseReplicated.uasset b/Unreal/Plugins/AvatarCore_nDisplay/Content/AvatarBaseReplicated.uasset new file mode 100644 index 0000000..b440b1e --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Content/AvatarBaseReplicated.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffc37cd0272d0cd97829e508ccddcce9a0ff55d0a64559b9a340805a1129993 +size 159662 diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Content/BodyReplicated_AnimBP.uasset b/Unreal/Plugins/AvatarCore_nDisplay/Content/BodyReplicated_AnimBP.uasset new file mode 100644 index 0000000..4b66d31 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Content/BodyReplicated_AnimBP.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7b3b542379c45c813e6f04853f9b0862d4a985de11fc009a2aecb728e01503d +size 70187 diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Content/FaceReplicated_AvatarCore_AnimBP.uasset b/Unreal/Plugins/AvatarCore_nDisplay/Content/FaceReplicated_AvatarCore_AnimBP.uasset new file mode 100644 index 0000000..6559c01 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Content/FaceReplicated_AvatarCore_AnimBP.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:471da184b8567374ec098036ebea5c5ccfda27638968f380cd6d6d17c9f9c65e +size 128602 diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Content/FaceReplicating_AvatarCore_AnimInst_Face_Child.uasset b/Unreal/Plugins/AvatarCore_nDisplay/Content/FaceReplicating_AvatarCore_AnimInst_Face_Child.uasset new file mode 100644 index 0000000..ac069c7 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Content/FaceReplicating_AvatarCore_AnimInst_Face_Child.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc591c8c7d4d5ba84ef9f1e75898a1590231e66139fb26337897c2dcaab1cee2 +size 75700 diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Resources/Icon128.png b/Unreal/Plugins/AvatarCore_nDisplay/Resources/Icon128.png new file mode 100644 index 0000000..25b1721 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Resources/Icon128.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1831a717c8a8f83fd3819fef3f921966e33c0a546dec6a85592a4b9d81f21bd +size 5946 diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/AvatarCore_nDisplay.Build.cs b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/AvatarCore_nDisplay.Build.cs new file mode 100644 index 0000000..f1f2451 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/AvatarCore_nDisplay.Build.cs @@ -0,0 +1,54 @@ +// Some copyright should be here... + +using UnrealBuildTool; + +public class AvatarCore_nDisplay : ModuleRules +{ + public AvatarCore_nDisplay(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + // ... add public include paths required here ... + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + // ... add other private include paths required here ... + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core", + "DisplayCluster", + // ... add other public dependencies that you statically link with here ... + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "CoreUObject", + "Engine", + "Slate", + "SlateCore", + // ... add private dependencies that you statically link with here ... + } + ); + + + DynamicallyLoadedModuleNames.AddRange( + new string[] + { + // ... add any modules that your module loads dynamically here ... + } + ); + } +} diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Private/AvatarCore_nDisplay.cpp b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Private/AvatarCore_nDisplay.cpp new file mode 100644 index 0000000..8cd439c --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Private/AvatarCore_nDisplay.cpp @@ -0,0 +1,22 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "AvatarCore_nDisplay.h" + +#define LOCTEXT_NAMESPACE "FAvatarCore_nDisplayModule" + +void FAvatarCore_nDisplayModule::StartupModule() +{ + // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module + +} + +void FAvatarCore_nDisplayModule::ShutdownModule() +{ + // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, + // we call this function before unloading the module. + +} + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(FAvatarCore_nDisplayModule, AvatarCore_nDisplay) \ No newline at end of file diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Private/AvatarCore_nDisplayBPLibrary.cpp b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Private/AvatarCore_nDisplayBPLibrary.cpp new file mode 100644 index 0000000..048f67a --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Private/AvatarCore_nDisplayBPLibrary.cpp @@ -0,0 +1,161 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "AvatarCore_nDisplayBPLibrary.h" +#include "Engine/Engine.h" +#include "AvatarCore_nDisplay.h" +#include "Animation/AnimInstance.h" +#include "Components/SkeletalMeshComponent.h" +#include "ReplicatedFaceCPPAnimInstance.h" +#include "Serialization/BufferArchive.h" +#include "Serialization/MemoryReader.h" + +UAvatarCore_nDisplayBPLibrary::UAvatarCore_nDisplayBPLibrary(const FObjectInitializer& ObjectInitializer) +: Super(ObjectInitializer) +{ + +} + +FDisplayClusterClusterEventBinary UAvatarCore_nDisplayBPLibrary::MakeClusterPoseEvent( + UAnimInstance* AnimInstance, + int32 EventID, + FName SnapshotName) +{ + FDisplayClusterClusterEventBinary OutEvent; + if (!AnimInstance) + { + return OutEvent; + } + + // 1) Capture skeleton pose into AnimInstance's internal local-space snapshot + AnimInstance->SavePoseSnapshot(SnapshotName); + + // 2) Retrieve the snapshot pointer + const FPoseSnapshot* PosePtr = AnimInstance->GetPoseSnapshot(SnapshotName); + if (!PosePtr || !PosePtr->bIsValid) + { + return OutEvent; + } + + // 3) Serialize the FPoseSnapshot struct + FBufferArchive Buffer(true); + const UScriptStruct* Struct = FPoseSnapshot::StaticStruct(); + Struct->SerializeBin(Buffer, const_cast(PosePtr)); + + // 4) Capture morph target weights directly from the mesh component after graph evaluation + TArray MorphNames; + TArray MorphWeights; + + //Get Morph Curve list and save them to buffer + TMap InOutCurveList; + + AnimInstance->GetAnimationCurveList(EAnimCurveType::MorphTargetCurve, InOutCurveList); + AnimInstance->GetAnimationCurveList(EAnimCurveType::AttributeCurve, InOutCurveList); + + const auto* foundItem = InOutCurveList.Find(FName(TEXT("CTRL_expressions_jawOpen"))); + float JawOpenValue = foundItem ? *foundItem : -1.0f; + + //UAvatarCore_nDisplayBPLibrary::PrintHighestMorphTarget(InOutCurveList); //Debug Printing + + InOutCurveList.GenerateKeyArray(MorphNames); + InOutCurveList.GenerateValueArray(MorphWeights); + Buffer << MorphNames; + Buffer << MorphWeights; + + // 5) Package into cluster event data + OutEvent.EventId = EventID; + OutEvent.EventData = MoveTemp(Buffer); + return OutEvent; +} + + +void UAvatarCore_nDisplayBPLibrary::ApplyClusterPoseEvent( + UAnimInstance* AnimInstance, + const FDisplayClusterClusterEventBinary& EventData) +{ + if (!AnimInstance) + { + return; + } + + // Deserialize skeleton pose and morph target data in one go + FPoseSnapshot Pose; + TArray MorphNames; + TArray MorphWeights; + + + const UScriptStruct* Struct = FPoseSnapshot::StaticStruct(); + { + FMemoryReader Reader(EventData.EventData, /*bIsPersistent=*/ true); + // 1) Skeleton pose + Struct->SerializeBin(Reader, &Pose); + // 2) Morph targets + Reader << MorphNames; + Reader << MorphWeights; + } + + // 3) Apply skeleton pose + if (Pose.bIsValid) + { + AnimInstance->RemovePoseSnapshot(Pose.SnapshotName); + FPoseSnapshot& InternalPose = AnimInstance->AddPoseSnapshot(Pose.SnapshotName); + InternalPose = Pose; + } + + TMap InOutCurveList; + + if (MorphNames.Num() == MorphWeights.Num()) + { + for (int32 i = 0; i < MorphNames.Num(); ++i) + { + InOutCurveList.Add(MorphNames[i], MorphWeights[i]); + } + } + else + { + if (GEngine) + GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Yellow, FString::Printf(TEXT("MorphNames and MorphWeights arrays have different lengths!"))); + } + + //UAvatarCore_nDisplayBPLibrary::PrintHighestMorphTarget(InOutCurveList); //Debug Printing + + // First apply to animation instance for the animation system to pick up + AnimInstance->AppendAnimationCurveList(EAnimCurveType::MorphTargetCurve, InOutCurveList); + AnimInstance->UpdateCurvesPostEvaluation(); + + // Then apply directly to the skeletal mesh component to ensure it works on all nDisplay nodes + if (auto* SkelMesh = AnimInstance->GetSkelMeshComponent()) + { + // Clear old targets + SkelMesh->ClearMorphTargets(); + if (auto* MI = Cast(SkelMesh->GetAnimInstance())) + { + MI->SetMorphTargetCurves(InOutCurveList); + } + + // (Optional) also set them directly on the mesh if you need immediate, nDisplay-safe updates: + for (auto& KV : InOutCurveList) + { + SkelMesh->SetMorphTarget(KV.Key, KV.Value, false); ///*bRemoveZeroWeight=*/ + } + } +} + +void UAvatarCore_nDisplayBPLibrary::PrintHighestMorphTarget(const TMap& MorphTargets) +{ + FName HighestKey; + float HighestValue = -FLT_MAX; + bool bFound = false; + for (const auto& Pair : MorphTargets) + { + if (!bFound || Pair.Value > HighestValue) + { + HighestKey = Pair.Key; + HighestValue = Pair.Value; + bFound = true; + } + } + if (bFound && GEngine) + { + GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Yellow, FString::Printf(TEXT("MorphName %s with %f is the highest"), *HighestKey.ToString(), HighestValue)); + } +} diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Private/ReplicatedFaceCPPAnimInstance.cpp b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Private/ReplicatedFaceCPPAnimInstance.cpp new file mode 100644 index 0000000..c8f612c --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Private/ReplicatedFaceCPPAnimInstance.cpp @@ -0,0 +1,14 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "ReplicatedFaceCPPAnimInstance.h" + +void UReplicatedFaceCPPAnimInstance::SetMorphTargetCurves(const TMap& NewCurves) +{ + PendingMorphCurves = NewCurves; +} + +void UReplicatedFaceCPPAnimInstance::NativePostEvaluateAnimation() +{ + Super::NativePostEvaluateAnimation(); +} \ No newline at end of file diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Public/AvatarCore_nDisplay.h b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Public/AvatarCore_nDisplay.h new file mode 100644 index 0000000..d265bf7 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Public/AvatarCore_nDisplay.h @@ -0,0 +1,14 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "Modules/ModuleManager.h" + +class FAvatarCore_nDisplayModule : public IModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; +}; diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Public/AvatarCore_nDisplayBPLibrary.h b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Public/AvatarCore_nDisplayBPLibrary.h new file mode 100644 index 0000000..ea114ed --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Public/AvatarCore_nDisplayBPLibrary.h @@ -0,0 +1,59 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once +#include "CoreMinimal.h" +#include "Cluster/DisplayClusterClusterEvent.h" +#include "Animation/PoseSnapshot.h" +#include "Animation/AnimInstance.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "AvatarCore_nDisplayBPLibrary.generated.h" + +/* +* Function library class. +* Each function in it is expected to be static and represents blueprint node that can be called in any blueprint. +* +* When declaring function you can define metadata for the node. Key function specifiers will be BlueprintPure and BlueprintCallable. +* BlueprintPure - means the function does not affect the owning object in any way and thus creates a node without Exec pins. +* BlueprintCallable - makes a function which can be executed in Blueprints - Thus it has Exec pins. +* DisplayName - full name of the node, shown when you mouse over the node and in the blueprint drop down menu. +* Its lets you name the node using characters not allowed in C++ function names. +* CompactNodeTitle - the word(s) that appear on the node. +* Keywords - the list of keywords that helps you to find node when you search for it using Blueprint drop-down menu. +* Good example is "Print String" node which you can find also by using keyword "log". +* Category - the category your node will be under in the Blueprint drop-down menu. +* +* For more info on custom blueprint nodes visit documentation: +* https://wiki.unrealengine.com/Custom_Blueprint_Node_Creation +*/ +UCLASS() +class UAvatarCore_nDisplayBPLibrary : public UBlueprintFunctionLibrary +{ + GENERATED_UCLASS_BODY() + +public: + /** + * Prints the morph target name with the highest value from the provided map. + */ + UFUNCTION(BlueprintCallable, Category = "Animation|nDisplay") + static void PrintHighestMorphTarget(const TMap& MorphTargets); + /** + * Capture the current pose on Master, serialize to bytes, assign a unique EventId, + * and wrap in a cluster-binary event for broadcasting. + */ + UFUNCTION(BlueprintCallable, Category = "Animation|nDisplay") + static FDisplayClusterClusterEventBinary MakeClusterPoseEvent( + UAnimInstance* AnimInstance, + int32 EventID, + UPARAM(DisplayName = "Snapshot Name") FName SnapshotName = FName("ClusterPose") + ); + + /** + * Unpack a received cluster-binary event, deserialize bytes into a pose snapshot, + * and save it into the target AnimInstance under the same snapshot name. + */ + UFUNCTION(BlueprintCallable, Category = "Animation|nDisplay") + static void ApplyClusterPoseEvent( + UAnimInstance* AnimInstance, + const FDisplayClusterClusterEventBinary& EventData + ); +}; diff --git a/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Public/ReplicatedFaceCPPAnimInstance.h b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Public/ReplicatedFaceCPPAnimInstance.h new file mode 100644 index 0000000..ce6c352 --- /dev/null +++ b/Unreal/Plugins/AvatarCore_nDisplay/Source/AvatarCore_nDisplay/Public/ReplicatedFaceCPPAnimInstance.h @@ -0,0 +1,30 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Animation/AnimInstance.h" +#include "ReplicatedFaceCPPAnimInstance.generated.h" + +/** + * + */ +UCLASS() +class AVATARCORE_NDISPLAY_API UReplicatedFaceCPPAnimInstance : public UAnimInstance +{ + GENERATED_BODY() + +public: + // Called by your gRPC callback when new morph data arrives + UFUNCTION(BlueprintCallable, Category = "Morph") + void SetMorphTargetCurves(const TMap& NewCurves); + + // Temporary storage of the latest values until injection + UPROPERTY(BlueprintReadOnly, Transient) + TMap PendingMorphCurves; + +protected: + // AnimInstance hook where we inject our curves + virtual void NativePostEvaluateAnimation() override; + +};