diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 85c6cee..7b9221f 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -258,7 +258,7 @@ CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet' bAuthorizeAutomaticWidgetVariableCreation=False FontDPIPreset=Standard FontDPI=72 -UIScaleCurve=(EditorCurveData=(Keys=((Time=480.000000,Value=0.440000),(Time=576.000000,Value=0.700000),(Time=720.000000,Value=1.000000),(Time=1080.000000,Value=1.000000),(Time=1440.000000,Value=1.000000),(Time=8640.000000,Value=8.000000)),DefaultValue=340282346638528859811704183484516925440.000000,PreInfinityExtrap=RCCE_Constant,PostInfinityExtrap=RCCE_Constant),ExternalCurve=None) +UIScaleCurve=(EditorCurveData=(Keys=((Time=480.000000,Value=0.440000),(Time=576.000000,Value=0.700000),(Time=720.000000,Value=1.000000),(Time=1080.000000,Value=0.801117),(Time=1440.000000,Value=1.000000),(Time=8640.000000,Value=8.000000)),DefaultValue=340282346638528859811704183484516925440.000000,PreInfinityExtrap=RCCE_Constant,PostInfinityExtrap=RCCE_Constant),ExternalCurve=None) [/Script/Engine.Engine] +ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/FunnyGirl") @@ -289,3 +289,4 @@ bSupportsVulkan=True bSupportsVulkanSM5=False bBuildForES31=False PackageName=com.AIGames.[PROJECT] + diff --git a/Content/Assets/Icon/T_Settings.uasset b/Content/Assets/Icon/T_Settings.uasset index 1acf243..5edba70 100644 --- a/Content/Assets/Icon/T_Settings.uasset +++ b/Content/Assets/Icon/T_Settings.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f4c25e24a753c2d77e4fdd5f7516a6f5e4d6957e98218fbe2630e7eac14d9eb -size 1268335 +oid sha256:786c142f585648aefa54b97c071c4eb8cd120d2d87085792684404f1de606dd1 +size 1266058 diff --git a/Content/Game/Blueprints/Girl/Marina/BP_Marina.uasset b/Content/Game/Blueprints/Girl/Marina/BP_Marina.uasset index 34ecda8..45578e2 100644 --- a/Content/Game/Blueprints/Girl/Marina/BP_Marina.uasset +++ b/Content/Game/Blueprints/Girl/Marina/BP_Marina.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f64097f90d5441d10ff9a8cb6ab2a706179fde4121fa8e70c911568267ca6a38 -size 137237 +oid sha256:8ab54038d75013d2d49846f05d3446637cb25951d54e2d6ed4a652e541c43d4d +size 124943 diff --git a/Content/Game/Blueprints/Girl/Rita/BP_Rita.uasset b/Content/Game/Blueprints/Girl/Rita/BP_Rita.uasset index 24fbda9..a9b201b 100644 --- a/Content/Game/Blueprints/Girl/Rita/BP_Rita.uasset +++ b/Content/Game/Blueprints/Girl/Rita/BP_Rita.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ab5147b471e789635609cc0df800d0c7b390423f1d89ee182b83edd30204a7d -size 130536 +oid sha256:b3ffabbc8c4f61bb3a483ccdc8cb4f40c22b0ae86797485bfcd678355c2a0881 +size 114918 diff --git a/Content/Game/Blueprints/LLM/Providers/LLM_DeepSeek.uasset b/Content/Game/Blueprints/LLM/Providers/LLM_DeepSeek.uasset index 11479f6..b8ad1cc 100644 --- a/Content/Game/Blueprints/LLM/Providers/LLM_DeepSeek.uasset +++ b/Content/Game/Blueprints/LLM/Providers/LLM_DeepSeek.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fa79f0f507a69cde44304c36553b0cadc806a06f4dbf8ae7316739433eb9f52 +oid sha256:fd6d94af7a4a5a39ac970f7d8ccc123479f07989490f679ffa646cca9c54aaaf size 1612 diff --git a/Content/Game/Blueprints/Narrative/DirectorPromt/DP_NarrativeAnalizator.uasset b/Content/Game/Blueprints/Narrative/DirectorPromt/DP_NarrativeAnalizator.uasset index 5227c33..e1bd456 100644 --- a/Content/Game/Blueprints/Narrative/DirectorPromt/DP_NarrativeAnalizator.uasset +++ b/Content/Game/Blueprints/Narrative/DirectorPromt/DP_NarrativeAnalizator.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d40290e474fd90ebcff87fc31fc439898cdc7281d6fbecea57f479f237a50f88 -size 5902 +oid sha256:4fec4eb1fc5415b272ecddb649ce075844756431ae4d30d7f991e3c2f81235ee +size 7531 diff --git a/Content/Game/Blueprints/Narrative/DirectorTool/BT_SavePlayerFacts.uasset b/Content/Game/Blueprints/Narrative/DirectorTool/BT_SavePlayerFacts.uasset index 4528041..9b69fdf 100644 --- a/Content/Game/Blueprints/Narrative/DirectorTool/BT_SavePlayerFacts.uasset +++ b/Content/Game/Blueprints/Narrative/DirectorTool/BT_SavePlayerFacts.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3247a2cdbca0978d17eb6233b9e040caba8d0e3d9bc00e5e3c31e10513369ac -size 25589 +oid sha256:28719c1767badc5403754d6c923b7b4a4168679d4261c52e41811de78a161427 +size 25517 diff --git a/Content/Game/Blueprints/UI/WBP_Button.uasset b/Content/Game/Blueprints/UI/WBP_Button.uasset index c711f0f..a7963b5 100644 --- a/Content/Game/Blueprints/UI/WBP_Button.uasset +++ b/Content/Game/Blueprints/UI/WBP_Button.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b3bd008dbd9392b693f3893b03b40ce281169bb91c738ef43523f646e2f8abf -size 87296 +oid sha256:1f59cb44c891a354e0c6f3790b3a4d17287a0a1de6a8fac5bf9ea0767c25733f +size 84776 diff --git a/Content/Vroid/Marina/ABP_Post_Marina.uasset b/Content/Vroid/Marina/ABP_Post_Marina.uasset deleted file mode 100644 index 680d28a..0000000 --- a/Content/Vroid/Marina/ABP_Post_Marina.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:35bcac5ac560a251e060e8368e9b4ecd7143b24a08256e2007fb6b4c73bf160a -size 111685 diff --git a/Content/Vroid/Marina/A_face_Marina.uasset b/Content/Vroid/Marina/A_face_Marina.uasset deleted file mode 100644 index 27ce88d..0000000 --- a/Content/Vroid/Marina/A_face_Marina.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e8de04c368f6537ed972cf94d271561b125cef24a46cb60c055f73a9d589c71e -size 126361 diff --git a/Content/Vroid/Marina/IK_Marina_Mannequin.uasset b/Content/Vroid/Marina/IK_Marina_Mannequin.uasset deleted file mode 100644 index 5f82aeb..0000000 --- a/Content/Vroid/Marina/IK_Marina_Mannequin.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d3af00245dbd50ae64a03547d27fa01d018b929bb44972c4997c0fd64d6c43d4 -size 111040 diff --git a/Content/Vroid/Marina/IK_Marina_MannequinBone.uasset b/Content/Vroid/Marina/IK_Marina_MannequinBone.uasset deleted file mode 100644 index 46e35b0..0000000 --- a/Content/Vroid/Marina/IK_Marina_MannequinBone.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c91ba3d9b6e94a6030759e6f3cb44d32f58da3ae85051a576459e96c491653cd -size 103791 diff --git a/Content/Vroid/Marina/IK_Marina_VrmHumanoid.uasset b/Content/Vroid/Marina/IK_Marina_VrmHumanoid.uasset deleted file mode 100644 index 9800808..0000000 --- a/Content/Vroid/Marina/IK_Marina_VrmHumanoid.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e82642587a6d4adf1c9c54f39038561c7c7fbd62617769b79ed4c8887460a577 -size 104075 diff --git a/Content/Vroid/Marina/IK_UEFN_Marina_Mannequin.uasset b/Content/Vroid/Marina/IK_UEFN_Marina_Mannequin.uasset deleted file mode 100644 index d219654..0000000 --- a/Content/Vroid/Marina/IK_UEFN_Marina_Mannequin.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9f93a6ecb1e11b615507093e05b3fe196fb977c8efe5263a087d60b23a05db76 -size 109386 diff --git a/Content/Vroid/Marina/IK_VRM4U_UE5Mannequin.uasset b/Content/Vroid/Marina/IK_VRM4U_UE5Mannequin.uasset deleted file mode 100644 index 25cfa9a..0000000 --- a/Content/Vroid/Marina/IK_VRM4U_UE5Mannequin.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cdff6ce816132bed43ed868370211452dd4fad11a5e5bacb0223440a573c1156 -size 92718 diff --git a/Content/Vroid/Marina/MI_N00_000_00_Body_00_SKIN__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_00_Body_00_SKIN__Instance_.uasset deleted file mode 100644 index ede66b0..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_Body_00_SKIN__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e599a971c969bf3d2681486fe00f09900c9adf51d84ff9c1e4e910eaae3d4822 -size 33536 diff --git a/Content/Vroid/Marina/MI_N00_000_00_Body_00_SKIN__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_00_Body_00_SKIN__Instance__outline.uasset deleted file mode 100644 index 99a6dc9..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_Body_00_SKIN__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:90af861a1db176b855b8c382b174d975c3f2ae618e11d55084c7a8de1cc8e981 -size 28591 diff --git a/Content/Vroid/Marina/MI_N00_000_00_EyeHighlight_00_EYE__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_00_EyeHighlight_00_EYE__Instance_.uasset deleted file mode 100644 index 84506ba..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_EyeHighlight_00_EYE__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:51182f0064f5da26558020c6a86768e8899d907e9123cc08603151e2d545ea57 -size 29941 diff --git a/Content/Vroid/Marina/MI_N00_000_00_EyeHighlight_00_EYE__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_00_EyeHighlight_00_EYE__Instance__outline.uasset deleted file mode 100644 index 6af2008..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_EyeHighlight_00_EYE__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4ec79881e9ef7772c1a311929dd6af94eabeaab6ee0f2ac056894985452530b9 -size 28178 diff --git a/Content/Vroid/Marina/MI_N00_000_00_EyeIris_00_EYE__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_00_EyeIris_00_EYE__Instance_.uasset deleted file mode 100644 index 962d576..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_EyeIris_00_EYE__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:947c82e49a11e6cb8e37786b9af5eacf6aaf13340b0879977c55dbc1d32f0c99 -size 29360 diff --git a/Content/Vroid/Marina/MI_N00_000_00_EyeIris_00_EYE__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_00_EyeIris_00_EYE__Instance__outline.uasset deleted file mode 100644 index 4204963..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_EyeIris_00_EYE__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c01c2d4a515440ec36eda8d75863b025bd7d8ed79defea6c28948ea8041d736d -size 28148 diff --git a/Content/Vroid/Marina/MI_N00_000_00_EyeWhite_00_EYE__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_00_EyeWhite_00_EYE__Instance_.uasset deleted file mode 100644 index 83849f9..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_EyeWhite_00_EYE__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:808d02800a7743301093461e8555bd05adc4b27141270f7cd26e2e1d00619f49 -size 30133 diff --git a/Content/Vroid/Marina/MI_N00_000_00_EyeWhite_00_EYE__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_00_EyeWhite_00_EYE__Instance__outline.uasset deleted file mode 100644 index e7fe97f..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_EyeWhite_00_EYE__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f55037f81bd02930992780e622eb6e32223e0715689ae414bf7a4eacbdb6bd89 -size 28154 diff --git a/Content/Vroid/Marina/MI_N00_000_00_FaceBrow_00_FACE__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_00_FaceBrow_00_FACE__Instance_.uasset deleted file mode 100644 index cc89323..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_FaceBrow_00_FACE__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e4807fdc7440804898e221773c956111f6ee3a4541aeee30cda8564e5c5c4cc -size 30745 diff --git a/Content/Vroid/Marina/MI_N00_000_00_FaceBrow_00_FACE__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_00_FaceBrow_00_FACE__Instance__outline.uasset deleted file mode 100644 index b4cf7d5..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_FaceBrow_00_FACE__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4931d69f00b41b4739386c4499b38d664e9fccb1a79d3aec4ab70637fd2673d9 -size 28301 diff --git a/Content/Vroid/Marina/MI_N00_000_00_FaceEyelash_00_FACE__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_00_FaceEyelash_00_FACE__Instance_.uasset deleted file mode 100644 index fb550dd..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_FaceEyelash_00_FACE__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c41012edb907d9e7998a49e2f076f54bbae22905196f0d0ff93eeec5f32cd8e7 -size 29307 diff --git a/Content/Vroid/Marina/MI_N00_000_00_FaceEyelash_00_FACE__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_00_FaceEyelash_00_FACE__Instance__outline.uasset deleted file mode 100644 index 346c9fa..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_FaceEyelash_00_FACE__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0dc10cb4328771f40e826935ad53a26a215a023405e06b5752f2ffa048cbeff1 -size 28319 diff --git a/Content/Vroid/Marina/MI_N00_000_00_FaceEyeline_00_FACE__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_00_FaceEyeline_00_FACE__Instance_.uasset deleted file mode 100644 index 16d195a..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_FaceEyeline_00_FACE__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3f3403893a5abe9d1cc7a46ffc80fe99dc2b6bfbc683161194ebe28afe92f800 -size 29206 diff --git a/Content/Vroid/Marina/MI_N00_000_00_FaceEyeline_00_FACE__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_00_FaceEyeline_00_FACE__Instance__outline.uasset deleted file mode 100644 index 0115c56..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_FaceEyeline_00_FACE__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b99c3923fcc05514492b30fc018caefe1903dbd0e8f2b66545299a2d5c4cf916 -size 28319 diff --git a/Content/Vroid/Marina/MI_N00_000_00_FaceMouth_00_FACE__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_00_FaceMouth_00_FACE__Instance_.uasset deleted file mode 100644 index e9b212c..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_FaceMouth_00_FACE__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b0a06612f520491b848dcc612d64420326de9c07b96b2212ae64d88be6886269 -size 30442 diff --git a/Content/Vroid/Marina/MI_N00_000_00_FaceMouth_00_FACE__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_00_FaceMouth_00_FACE__Instance__outline.uasset deleted file mode 100644 index 3fa4f36..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_FaceMouth_00_FACE__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:451fd241a085d261862803af9f7febed2d0006c87cb3f34908f7b61334eb005f -size 28166 diff --git a/Content/Vroid/Marina/MI_N00_000_00_Face_00_SKIN__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_00_Face_00_SKIN__Instance_.uasset deleted file mode 100644 index 95d3ef1..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_Face_00_SKIN__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e6f176cfe4b77e550b82cf4c0c0867413329364a28814bbd73e4894009711c27 -size 30717 diff --git a/Content/Vroid/Marina/MI_N00_000_00_Face_00_SKIN__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_00_Face_00_SKIN__Instance__outline.uasset deleted file mode 100644 index ae244c5..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_Face_00_SKIN__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0c356a3f4a668e0f522464a3490ec018301a0eb8fdd5f760ff0dfc25e0eebbcb -size 28525 diff --git a/Content/Vroid/Marina/MI_N00_000_00_HairBack_00_HAIR__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_00_HairBack_00_HAIR__Instance_.uasset deleted file mode 100644 index 5ae8801..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_HairBack_00_HAIR__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:48c281ee5f16e189a964651d31c3b5a6b9ff94a31a02c31298f4150da2159457 -size 29018 diff --git a/Content/Vroid/Marina/MI_N00_000_00_HairBack_00_HAIR__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_00_HairBack_00_HAIR__Instance__outline.uasset deleted file mode 100644 index c6e7009..0000000 --- a/Content/Vroid/Marina/MI_N00_000_00_HairBack_00_HAIR__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a4d4eebb1b88e7e591e61c4601d41ba0b62fcd1b9dd24896da7bef3f4402e034 -size 27563 diff --git a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_01__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_01__Instance_.uasset deleted file mode 100644 index 3d94546..0000000 --- a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_01__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d3d189b36b28dd95de281db0a5d65ed132ab3cf5eeff18b5591df796c8d31553 -size 30359 diff --git a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_01__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_01__Instance__outline.uasset deleted file mode 100644 index 315a62a..0000000 --- a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_01__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca27c59ccff2a5314c5268f0a2b0de63cba156d813e343776f3ea472739cd6e7 -size 27789 diff --git a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_02__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_02__Instance_.uasset deleted file mode 100644 index 6887ddd..0000000 --- a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_02__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:568b40762e0f3e460ee298b4617d4624ff17715d5d8dc66416e8f8050449e840 -size 30369 diff --git a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_02__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_02__Instance__outline.uasset deleted file mode 100644 index 74a8c1f..0000000 --- a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_02__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:54f9b43f7ddef9b0936d5d0c464e082df44dd6f67f1707a77934c2b853da3aa1 -size 27791 diff --git a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_03__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_03__Instance_.uasset deleted file mode 100644 index 00bddec..0000000 --- a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_03__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dffacc716eee25d9e96b97c5ba251fc4487ff7fc145aed8661f85270ca0c6e90 -size 29284 diff --git a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_03__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_03__Instance__outline.uasset deleted file mode 100644 index 9f1d407..0000000 --- a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_03__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e455d034d6a3f80c678b3a6159318d2ffd4ec3a6dd904df6509ee5812f9655ff -size 27972 diff --git a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_04__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_04__Instance_.uasset deleted file mode 100644 index 7ec8d4e..0000000 --- a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_04__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6c7906728a5a9c42b882cd86a4cfd74b5411e76b3be234c2a4037e083ce88a9e -size 30015 diff --git a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_04__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_04__Instance__outline.uasset deleted file mode 100644 index 367ebdd..0000000 --- a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_04__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a852a6139debd3d91648f8a319c0c2f4b0ffa4a534670cbc9a69041293131c37 -size 27791 diff --git a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_05__Instance_.uasset b/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_05__Instance_.uasset deleted file mode 100644 index 1008619..0000000 --- a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_05__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ea1a18dd39d074c8e0195f7d7c27b4f52a6af2550a7cd686eb22dbad9883eff -size 29879 diff --git a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_05__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_05__Instance__outline.uasset deleted file mode 100644 index aa4ed41..0000000 --- a/Content/Vroid/Marina/MI_N00_000_Hair_00_HAIR_05__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dddbb44a3768c35b5a7b46e5fa7ba030efee84f9989ee9d33fe30a1d668ed628 -size 27972 diff --git a/Content/Vroid/Marina/MI_N00_002_04_Tops_01_CLOTH__Instance_.uasset b/Content/Vroid/Marina/MI_N00_002_04_Tops_01_CLOTH__Instance_.uasset deleted file mode 100644 index 63a73f6..0000000 --- a/Content/Vroid/Marina/MI_N00_002_04_Tops_01_CLOTH__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:739c6c64a120aaf69cc5b0b9831ad2d241492e08da6e4f187621b7d1e7a45814 -size 34797 diff --git a/Content/Vroid/Marina/MI_N00_002_04_Tops_01_CLOTH__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_002_04_Tops_01_CLOTH__Instance__outline.uasset deleted file mode 100644 index ce493cd..0000000 --- a/Content/Vroid/Marina/MI_N00_002_04_Tops_01_CLOTH__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cd7d50ba14c2823c14dd9223468391a82556c401ceb676d0c6c2463b81094a36 -size 28849 diff --git a/Content/Vroid/Marina/MI_N00_009_01_Shoes_01_CLOTH__Instance_.uasset b/Content/Vroid/Marina/MI_N00_009_01_Shoes_01_CLOTH__Instance_.uasset deleted file mode 100644 index 09cae63..0000000 --- a/Content/Vroid/Marina/MI_N00_009_01_Shoes_01_CLOTH__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2161fcd525d6f0a2686bfa8e992ed73bd6d3ba3007ff0a9083a6f4e4d06f6d5f -size 36149 diff --git a/Content/Vroid/Marina/MI_N00_009_01_Shoes_01_CLOTH__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_009_01_Shoes_01_CLOTH__Instance__outline.uasset deleted file mode 100644 index 549184f..0000000 --- a/Content/Vroid/Marina/MI_N00_009_01_Shoes_01_CLOTH__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c7a55410c09865ad9cf27df13c1888ba39910d9a4af2fa310e21d9082923cbd7 -size 28497 diff --git a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_01__Instance_.uasset b/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_01__Instance_.uasset deleted file mode 100644 index 4d6e266..0000000 --- a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_01__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fae35b07484c9035fd671c7e69a708bf6833393acedacd19da8ef3eae8fea61e -size 30555 diff --git a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_01__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_01__Instance__outline.uasset deleted file mode 100644 index 350175e..0000000 --- a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_01__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:85bb49a4d80d932a6f6000450a34ba7917380a6d6863edf61975b64cf9b4e577 -size 28407 diff --git a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_02__Instance_.uasset b/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_02__Instance_.uasset deleted file mode 100644 index bbd1021..0000000 --- a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_02__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:656b45a21e57c324b62abbb7b18323aba7fb7a373a7dd8d086ad3a3795fec5b5 -size 29755 diff --git a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_02__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_02__Instance__outline.uasset deleted file mode 100644 index cc04230..0000000 --- a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_02__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4da7023e4b4500069e5b5d5588aaf56eeedd57d015db67665ea4f6b1bebfd435 -size 28419 diff --git a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_03__Instance_.uasset b/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_03__Instance_.uasset deleted file mode 100644 index c82c2d6..0000000 --- a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_03__Instance_.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c58859a40281a7521c8a394b9d852aa9a94c4ae502a5bba24469ee3d8a21b37 -size 29364 diff --git a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_03__Instance__outline.uasset b/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_03__Instance__outline.uasset deleted file mode 100644 index 477af43..0000000 --- a/Content/Vroid/Marina/MI_N00_010_01_Onepiece_00_CLOTH_03__Instance__outline.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:06d5986863dea7bc8569e5a536f971d67a256bb9fea2d82b4e9a07b8fcd369f7 -size 28330 diff --git a/Content/Vroid/Marina/POSE_face_Marina.uasset b/Content/Vroid/Marina/POSE_face_Marina.uasset deleted file mode 100644 index 49e1458..0000000 --- a/Content/Vroid/Marina/POSE_face_Marina.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:edf1278621fe748ad2fd68293035012564c40819a3ecf4ed06d5bad14dfdf92a -size 81186 diff --git a/Content/Vroid/Marina/POSE_retarget_Marina.uasset b/Content/Vroid/Marina/POSE_retarget_Marina.uasset deleted file mode 100644 index 340eb39..0000000 --- a/Content/Vroid/Marina/POSE_retarget_Marina.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:87278c1cb5bb6623365b92b0004368cad33dd37504ccca793378c6835fcd8d43 -size 146019 diff --git a/Content/Vroid/Marina/RTG_Marina.uasset b/Content/Vroid/Marina/RTG_Marina.uasset deleted file mode 100644 index 669e3c7..0000000 --- a/Content/Vroid/Marina/RTG_Marina.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32096f39ed647da3f838d9015862144e324f411761ee09296cfefd2a8f647e04 -size 32842 diff --git a/Content/Vroid/Marina/SKEL_Marina.uasset b/Content/Vroid/Marina/SKEL_Marina.uasset deleted file mode 100644 index 11021fc..0000000 --- a/Content/Vroid/Marina/SKEL_Marina.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:79a66eabca6f63ef336119d5e23d13c9e3c5430c8c3565fec5aa67d48cca8a4c -size 65632 diff --git a/Content/Vroid/Marina/SK_Marina.uasset b/Content/Vroid/Marina/SK_Marina.uasset deleted file mode 100644 index b172c9d..0000000 --- a/Content/Vroid/Marina/SK_Marina.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5ab8e4c60519f9ef20c0aa0723f50e5e5ecdf0fb647f477412be0d309c8d1557 -size 6175001 diff --git a/Content/Vroid/Marina/SP_Marina.uasset b/Content/Vroid/Marina/SP_Marina.uasset deleted file mode 100644 index 546def9..0000000 --- a/Content/Vroid/Marina/SP_Marina.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6de0e5012b652c2a4f0e4c9356d1eaaca751fcba527e2f33f493bf602b4dbaa8 -size 1075 diff --git a/Content/Vroid/Marina/T_MatcapWarp.uasset b/Content/Vroid/Marina/T_MatcapWarp.uasset deleted file mode 100644 index df20007..0000000 --- a/Content/Vroid/Marina/T_MatcapWarp.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c9a183d192946567f1e3cfa4b008158f957d55bd9560b18dbc14cfb841495bd1 -size 4780 diff --git a/Content/Vroid/Marina/T_N00_000_00_Face_00_out.uasset b/Content/Vroid/Marina/T_N00_000_00_Face_00_out.uasset deleted file mode 100644 index ed89bc8..0000000 --- a/Content/Vroid/Marina/T_N00_000_00_Face_00_out.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ee568c02ff9b863189c7bf839002ce4d150d26fae8a008f0ecb721d512b9444c -size 17045 diff --git a/Content/Vroid/Marina/T_N00_000_00_HairBack_00_nml_N.uasset b/Content/Vroid/Marina/T_N00_000_00_HairBack_00_nml_N.uasset deleted file mode 100644 index 76a8370..0000000 --- a/Content/Vroid/Marina/T_N00_000_00_HairBack_00_nml_N.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca18d9baf409b238264fe4450d5460e288f1d07b8a60f6ccc5754e02b9c6a38f -size 72730 diff --git a/Content/Vroid/Marina/T_N00_000_Hair_00_nml_01_N.uasset b/Content/Vroid/Marina/T_N00_000_Hair_00_nml_01_N.uasset deleted file mode 100644 index e7b353b..0000000 --- a/Content/Vroid/Marina/T_N00_000_Hair_00_nml_01_N.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6c3d0997bc715cfa48e0e9d85e3437e585fda2c232d356a0257d9c35ac2e7a3d -size 73435 diff --git a/Content/Vroid/Marina/T_N00_000_Hair_00_nml_02_N.uasset b/Content/Vroid/Marina/T_N00_000_Hair_00_nml_02_N.uasset deleted file mode 100644 index 52079cc..0000000 --- a/Content/Vroid/Marina/T_N00_000_Hair_00_nml_02_N.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:be17c417b13b77d5b8b52388e19b3dfd5434b212f0528351e7a19f23a95bd10c -size 73435 diff --git a/Content/Vroid/Marina/T_N00_000_Hair_00_nml_03_N.uasset b/Content/Vroid/Marina/T_N00_000_Hair_00_nml_03_N.uasset deleted file mode 100644 index 824bdfb..0000000 --- a/Content/Vroid/Marina/T_N00_000_Hair_00_nml_03_N.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f7ac226bb87aee6d6b7d26097232320b922af59e423116c6a31261ff51321467 -size 73435 diff --git a/Content/Vroid/Marina/T_N00_000_Hair_00_nml_04_N.uasset b/Content/Vroid/Marina/T_N00_000_Hair_00_nml_04_N.uasset deleted file mode 100644 index 6adce18..0000000 --- a/Content/Vroid/Marina/T_N00_000_Hair_00_nml_04_N.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e6c97a0429e9ffe9944acdc157de478bc28f423848e58e3c69c4df5615d805ef -size 73435 diff --git a/Content/Vroid/Marina/T_N00_000_Hair_00_nml_05_N.uasset b/Content/Vroid/Marina/T_N00_000_Hair_00_nml_05_N.uasset deleted file mode 100644 index deda37d..0000000 --- a/Content/Vroid/Marina/T_N00_000_Hair_00_nml_05_N.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:68a48170cb1735d2df52455292ea48ca29478e3771640baf9efaeb9f277e84c6 -size 73435 diff --git a/Content/Vroid/Marina/T_Shader_NoneBlack.uasset b/Content/Vroid/Marina/T_Shader_NoneBlack.uasset deleted file mode 100644 index d249c00..0000000 --- a/Content/Vroid/Marina/T_Shader_NoneBlack.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:316ea396dcd8d9c11b2e3870c8b8210be3d225dc506ad7455ad17a9f1db63a41 -size 4810 diff --git a/Content/Vroid/Marina/T_Shader_NoneNormal_N.uasset b/Content/Vroid/Marina/T_Shader_NoneNormal_N.uasset deleted file mode 100644 index 4bfb095..0000000 --- a/Content/Vroid/Marina/T_Shader_NoneNormal_N.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5cd707ad62a6143cfa4ca9af26e9078f5eb8188e46ad11b5c32c0a33c4d94cf9 -size 4929 diff --git a/Content/Vroid/Marina/T_Thumbnail.uasset b/Content/Vroid/Marina/T_Thumbnail.uasset deleted file mode 100644 index 5afa124..0000000 --- a/Content/Vroid/Marina/T_Thumbnail.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1be60e2d0cafe0ebd7bee456d3c8a953d7f14d7d76f5ec9e2bee641675c2427a -size 839307 diff --git a/Content/Vroid/Marina/T__01.uasset b/Content/Vroid/Marina/T__01.uasset deleted file mode 100644 index a1fd5a9..0000000 --- a/Content/Vroid/Marina/T__01.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d29d8014a5d0c4fe6ce2da9fec5c53680c6dfa79c3dd6b75a15ed4e6a0e72f4f -size 40182 diff --git a/Content/Vroid/Marina/T__02.uasset b/Content/Vroid/Marina/T__02.uasset deleted file mode 100644 index 380b7c0..0000000 --- a/Content/Vroid/Marina/T__02.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:485640168b7d415fe41a5c7f6d228c253bcd7b4f48187fbbe2b2e14e1bde91c0 -size 56398 diff --git a/Content/Vroid/Marina/T__03.uasset b/Content/Vroid/Marina/T__03.uasset deleted file mode 100644 index 8e8f0d2..0000000 --- a/Content/Vroid/Marina/T__03.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73946018d6d582022f390cfa0490fc72b7987ac83bb239c8bd8c7539ff8251b0 -size 44043 diff --git a/Content/Vroid/Marina/T__04.uasset b/Content/Vroid/Marina/T__04.uasset deleted file mode 100644 index b8f4bf9..0000000 --- a/Content/Vroid/Marina/T__04.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:faeb690e12accaf75955f91b8ac2dd5fffc7fa703e48c9c8b71bb6ae42f33658 -size 111643 diff --git a/Content/Vroid/Marina/T__05_N.uasset b/Content/Vroid/Marina/T__05_N.uasset deleted file mode 100644 index 2c081e8..0000000 --- a/Content/Vroid/Marina/T__05_N.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a7dfa01f4f92935463c844337a56a3b9b941a6e9e99d98509c91d72dd6750108 -size 7181 diff --git a/Content/Vroid/Marina/T__06.uasset b/Content/Vroid/Marina/T__06.uasset deleted file mode 100644 index 6ac7c3f..0000000 --- a/Content/Vroid/Marina/T__06.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5f4ce504c675d11006322bd4af7f687e2dc25d6714ff269651a828f23d2d86c3 -size 97406 diff --git a/Content/Vroid/Marina/T__07.uasset b/Content/Vroid/Marina/T__07.uasset deleted file mode 100644 index d0096ee..0000000 --- a/Content/Vroid/Marina/T__07.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e2b3274148da10e41569156f1b5584d1a97b00fb518ac83ddc9130aa842ba5e7 -size 25225 diff --git a/Content/Vroid/Marina/T__08.uasset b/Content/Vroid/Marina/T__08.uasset deleted file mode 100644 index 2ed9c16..0000000 --- a/Content/Vroid/Marina/T__08.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c5e2f94dc9b0df8ace72cd1385bdb5086fcf7dc20bd05616a65b0f98dbd38ec9 -size 27841 diff --git a/Content/Vroid/Marina/T__09.uasset b/Content/Vroid/Marina/T__09.uasset deleted file mode 100644 index 83a4fe0..0000000 --- a/Content/Vroid/Marina/T__09.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9204fb005702851a0fe8d68eddf7da83853eeed8cb50b9ad524c7c9538563a26 -size 13509 diff --git a/Content/Vroid/Marina/T__10.uasset b/Content/Vroid/Marina/T__10.uasset deleted file mode 100644 index ebe0621..0000000 --- a/Content/Vroid/Marina/T__10.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8dd204069bf11825dc953db1ec4a27c92ae623ab51aa5b077bd205f5857466d8 -size 905916 diff --git a/Content/Vroid/Marina/T__11_N.uasset b/Content/Vroid/Marina/T__11_N.uasset deleted file mode 100644 index c009bde..0000000 --- a/Content/Vroid/Marina/T__11_N.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:656df2ee2c98afd65f640aa573ab43aecdb95b21cb64c4136d5e9fea7110b1a0 -size 2632682 diff --git a/Content/Vroid/Marina/T__12.uasset b/Content/Vroid/Marina/T__12.uasset deleted file mode 100644 index cf7e40c..0000000 --- a/Content/Vroid/Marina/T__12.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c65d670cf798221c659d3bb47ae10ef1e70cae7a90e9dbbc51c9af88a5ed396f -size 107601 diff --git a/Content/Vroid/Marina/T__13.uasset b/Content/Vroid/Marina/T__13.uasset deleted file mode 100644 index 4d0b0b7..0000000 --- a/Content/Vroid/Marina/T__13.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2acdec6b49dc109d495a22de9fe7c244a95c55f3f598aea8c4ea4888cd916c37 -size 68007 diff --git a/Content/Vroid/Marina/T__14.uasset b/Content/Vroid/Marina/T__14.uasset deleted file mode 100644 index 87f7278..0000000 --- a/Content/Vroid/Marina/T__14.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2c32a5db3c023e5c0c78dc7e8592aaecf34e840c4df63752a86153a5251045e6 -size 290423 diff --git a/Content/Vroid/Marina/T__15.uasset b/Content/Vroid/Marina/T__15.uasset deleted file mode 100644 index e89d818..0000000 --- a/Content/Vroid/Marina/T__15.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e295d07350a2c7009a5a9abc656c6f6836ce8e2c6aea32e7a72f498db677f813 -size 328323 diff --git a/Content/Vroid/Marina/T__16.uasset b/Content/Vroid/Marina/T__16.uasset deleted file mode 100644 index adc18dc..0000000 --- a/Content/Vroid/Marina/T__16.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e0c7ed811236ce8f5907a284c2cc1d78f18b348f2dac9ae954d5cc754a125be7 -size 3214519 diff --git a/Content/Vroid/Marina/T__17.uasset b/Content/Vroid/Marina/T__17.uasset deleted file mode 100644 index a8f84cb..0000000 --- a/Content/Vroid/Marina/T__17.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b8278df07570daa683b5660cb2d70a897186da3f2c0d113cff68d8429b23f314 -size 169237 diff --git a/Content/Vroid/Marina/T__18.uasset b/Content/Vroid/Marina/T__18.uasset deleted file mode 100644 index e8ef8ea..0000000 --- a/Content/Vroid/Marina/T__18.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4519ee5373e355b9dcbeac9e9e9f7bff06e0646ceaa5690d60b6313ca1d168ca -size 116884 diff --git a/Content/Vroid/Marina/T__19.uasset b/Content/Vroid/Marina/T__19.uasset deleted file mode 100644 index 21661aa..0000000 --- a/Content/Vroid/Marina/T__19.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:84e8e84a79f47296240fa538bb38ebdd8736bb581e33cf29b5eb258dfbd623e1 -size 38467 diff --git a/Content/Vroid/Marina/T__20.uasset b/Content/Vroid/Marina/T__20.uasset deleted file mode 100644 index 54e6b24..0000000 --- a/Content/Vroid/Marina/T__20.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a1e57d590836f3d3eef3f7062d752192653d2e043dd9ea9d0c5cfb488c7bf10 -size 116299 diff --git a/Content/Vroid/Marina/T__21.uasset b/Content/Vroid/Marina/T__21.uasset deleted file mode 100644 index 769cc4c..0000000 --- a/Content/Vroid/Marina/T__21.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8ef8ffa0fc9f984ee959dde5f82f157770584216b8d9fa4348467a1c370d8e01 -size 38467 diff --git a/Content/Vroid/Marina/T__22.uasset b/Content/Vroid/Marina/T__22.uasset deleted file mode 100644 index 9b393eb..0000000 --- a/Content/Vroid/Marina/T__22.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2f54abd00895565efa8546125a711a45680f0f879ef8436a98b08226fb44695e -size 297225 diff --git a/Content/Vroid/Marina/T__23.uasset b/Content/Vroid/Marina/T__23.uasset deleted file mode 100644 index 12bfdb1..0000000 --- a/Content/Vroid/Marina/T__23.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6c8442e12a3065da0dcb4d31db07723ed7bd213a40c10092752249f86e835e09 -size 5716 diff --git a/Content/Vroid/Marina/T__24.uasset b/Content/Vroid/Marina/T__24.uasset deleted file mode 100644 index 254875a..0000000 --- a/Content/Vroid/Marina/T__24.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ffde9b6d583e9ec4fdf17a0a7805d14879585cc6e107eb5da7f5d5dd9d6cc73b -size 116299 diff --git a/Content/Vroid/Marina/T__25.uasset b/Content/Vroid/Marina/T__25.uasset deleted file mode 100644 index 5a09e69..0000000 --- a/Content/Vroid/Marina/T__25.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c04d5d6203670ec846eed35a3b32c8e69fe6739f05aa86458a9bf91bd5f030a6 -size 38467 diff --git a/Content/Vroid/Marina/T__26.uasset b/Content/Vroid/Marina/T__26.uasset deleted file mode 100644 index f41d1b6..0000000 --- a/Content/Vroid/Marina/T__26.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6047f1deeefbfcac98c1c944dcbabf223db6950016f6c2f950c72bb7a0e8228f -size 161956 diff --git a/Content/Vroid/Marina/T__27.uasset b/Content/Vroid/Marina/T__27.uasset deleted file mode 100644 index df2f0dc..0000000 --- a/Content/Vroid/Marina/T__27.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1ef47b0ac49d263df6dbe42795fc3ccfebf3661669e71575c01632f5fc81a4c8 -size 5716 diff --git a/Content/Vroid/Marina/VA_Marina_VrmAssetList.uasset b/Content/Vroid/Marina/VA_Marina_VrmAssetList.uasset deleted file mode 100644 index 6226682..0000000 --- a/Content/Vroid/Marina/VA_Marina_VrmAssetList.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19e0a6b681d0bad69f340724ec00992fc1a95d2493b2404a1b7ba16a21bc0a86 -size 34536 diff --git a/Content/Vroid/Marina/VL_Marina_VrmLicense.uasset b/Content/Vroid/Marina/VL_Marina_VrmLicense.uasset deleted file mode 100644 index dfa547a..0000000 --- a/Content/Vroid/Marina/VL_Marina_VrmLicense.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bbfecf00f0067fb9c1cc1d492344ea53d78d3534610e3fa209f324da1e8d78d2 -size 10483 diff --git a/Content/Vroid/Marina/VM_Marina_VrmMeta.uasset b/Content/Vroid/Marina/VM_Marina_VrmMeta.uasset deleted file mode 100644 index 9d0ee36..0000000 --- a/Content/Vroid/Marina/VM_Marina_VrmMeta.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7c30c59cdd3b324949519222a245b5227233239319218a3fa1abd6d235229f3d -size 28869 diff --git a/Plugins/QwenTTSStreaming/Source/QwenTTSStreaming/Private/QwenTTSStreamingComponent.cpp b/Plugins/QwenTTSStreaming/Source/QwenTTSStreaming/Private/QwenTTSStreamingComponent.cpp index 6894eca..8088ae2 100644 --- a/Plugins/QwenTTSStreaming/Source/QwenTTSStreaming/Private/QwenTTSStreamingComponent.cpp +++ b/Plugins/QwenTTSStreaming/Source/QwenTTSStreaming/Private/QwenTTSStreamingComponent.cpp @@ -364,12 +364,12 @@ void UQwenTTSStreamingComponent::HandleAudioBase64(int32 Index, const FString& A DecodedChunk.NumChannels, DecodedChunk.PCM.Num()); - if (Settings && Settings->bAutoPlayOnFirstChunk && !bPlaybackStarted) + if (Settings && Settings->bAutoPlayOnFirstChunk && (!bPlaybackStarted || !IsPlaying())) { SetSound(ProceduralSoundWave); Play(); bPlaybackStarted = true; - UE_LOG(LogQwenTTSStreaming, Log, TEXT("Qwen TTS playback started on first chunk. Index=%d"), Index); + UE_LOG(LogQwenTTSStreaming, Log, TEXT("Qwen TTS playback started/resumed on chunk. Index=%d"), Index); } FQwenTTSStreamChunk Chunk; @@ -378,6 +378,7 @@ void UQwenTTSStreamingComponent::HandleAudioBase64(int32 Index, const FString& A Chunk.SampleRate = DecodedChunk.SampleRate; Chunk.NumChannels = DecodedChunk.NumChannels; Chunk.PCMBytes = DecodedChunk.PCM.Num(); + Chunk.PCMData = DecodedChunk.PCM; OnAudioChunk.Broadcast(Chunk); } diff --git a/Plugins/QwenTTSStreaming/Source/QwenTTSStreaming/Public/QwenTTSStreamingTypes.h b/Plugins/QwenTTSStreaming/Source/QwenTTSStreaming/Public/QwenTTSStreamingTypes.h index 273d0f8..9a345d8 100644 --- a/Plugins/QwenTTSStreaming/Source/QwenTTSStreaming/Public/QwenTTSStreamingTypes.h +++ b/Plugins/QwenTTSStreaming/Source/QwenTTSStreaming/Public/QwenTTSStreamingTypes.h @@ -24,6 +24,9 @@ struct QWENTTSSTREAMING_API FQwenTTSStreamChunk UPROPERTY(BlueprintReadOnly, Category = "Qwen TTS") int32 PCMBytes = 0; + + UPROPERTY(BlueprintReadOnly, Category = "Qwen TTS") + TArray PCMData; }; DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FQwenTTSStreamChunkDelegate, const FQwenTTSStreamChunk&, Chunk); diff --git a/Source/FunnyGirl/FunnyGirl.Build.cs b/Source/FunnyGirl/FunnyGirl.Build.cs index b12be64..4ba9055 100644 --- a/Source/FunnyGirl/FunnyGirl.Build.cs +++ b/Source/FunnyGirl/FunnyGirl.Build.cs @@ -8,7 +8,7 @@ public class FunnyGirl : ModuleRules { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; - PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "HTTP", "Json", "JsonUtilities", "AssetRegistry", "MediaAssets", "UMG", "IKRig" }); + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "HTTP", "Json", "JsonUtilities", "AssetRegistry", "MediaAssets", "UMG", "IKRig", "QwenTTSStreaming" }); PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); diff --git a/Source/FunnyGirl/Private/Morph/LipSyncComponent.cpp b/Source/FunnyGirl/Private/Morph/LipSyncComponent.cpp index b5a716e..52183e9 100644 --- a/Source/FunnyGirl/Private/Morph/LipSyncComponent.cpp +++ b/Source/FunnyGirl/Private/Morph/LipSyncComponent.cpp @@ -6,9 +6,109 @@ #include "Components/AudioComponent.h" #include "Components/SceneComponent.h" #include "GameFramework/Actor.h" +#include "QwenTTSStreamingComponent.h" #include "Sound/SoundBase.h" #include "Sound/SoundWave.h" +namespace +{ +void BuildStreamingVisemeWeights( + const TArray& Samples, + int32 StartSample, + int32 WindowSampleCount, + float StepSeconds, + float Gate, + float Gain, + float Gamma, + float SilenceThreshold, + float PlosiveHoldTime, + float ShapeTime, + float& InOutPlosiveHoldRemaining, + float& InOutPreviousRms, + TMap& OutWeights) +{ + OutWeights.Empty(); + + float SumSquares = 0.0f; + float SumAbs = 0.0f; + float SumDiffAbs = 0.0f; + int32 ZeroCrossings = 0; + float PreviousSample = Samples[StartSample]; + for (int32 SampleIndex = 0; SampleIndex < WindowSampleCount; ++SampleIndex) + { + const float Sample = Samples[StartSample + SampleIndex]; + SumSquares += Sample * Sample; + SumAbs += FMath::Abs(Sample); + if (SampleIndex > 0) + { + SumDiffAbs += FMath::Abs(Sample - PreviousSample); + if ((Sample >= 0.0f) != (PreviousSample >= 0.0f)) + { + ++ZeroCrossings; + } + } + PreviousSample = Sample; + } + + const float Rms = FMath::Sqrt(SumSquares / static_cast(WindowSampleCount)); + const float MeanAbs = SumAbs / static_cast(WindowSampleCount); + const float Brightness = SumAbs > KINDA_SMALL_NUMBER ? FMath::Clamp(SumDiffAbs / (SumAbs * 2.0f), 0.0f, 1.0f) : 0.0f; + const float Zcr = static_cast(ZeroCrossings) / static_cast(WindowSampleCount); + + float MouthWeight = 0.0f; + if (Rms > Gate) + { + const float Normalized = FMath::Clamp((Rms - Gate) * Gain, 0.0f, 1.0f); + MouthWeight = FMath::Pow(Normalized, FMath::Max(Gamma, 0.1f)); + } + + const float Onset = Rms - InOutPreviousRms; + if (Rms > Gate * 1.6f && Onset > Gate * 1.8f && Brightness < 0.42f) + { + InOutPlosiveHoldRemaining = PlosiveHoldTime; + } + InOutPreviousRms = Rms; + + if (MouthWeight <= SilenceThreshold) + { + InOutPlosiveHoldRemaining = FMath::Max(0.0f, InOutPlosiveHoldRemaining - StepSeconds); + return; + } + + if (InOutPlosiveHoldRemaining > 0.0f) + { + InOutPlosiveHoldRemaining = FMath::Max(0.0f, InOutPlosiveHoldRemaining - StepSeconds); + OutWeights.Add(TEXT("MBP"), FMath::Clamp(MouthWeight * 1.15f, 0.0f, 1.0f)); + OutWeights.Add(TEXT("A"), MouthWeight * 0.18f); + } + else if (Zcr > 0.105f || Brightness > 0.62f) + { + OutWeights.Add(TEXT("SS"), MouthWeight * FMath::Clamp(0.75f + Brightness * 0.35f, 0.0f, 1.0f)); + OutWeights.Add(TEXT("I"), MouthWeight * 0.35f); + } + else if (Brightness > 0.42f) + { + const float WideBlend = FMath::Clamp((Brightness - 0.42f) / 0.2f, 0.0f, 1.0f); + OutWeights.Add(TEXT("I"), MouthWeight * (0.45f + WideBlend * 0.45f)); + OutWeights.Add(TEXT("E"), MouthWeight * (0.35f + (1.0f - WideBlend) * 0.25f)); + } + else if (Brightness < 0.24f && MeanAbs > Gate * 1.35f) + { + const bool bUseU = FMath::Fmod(ShapeTime, 0.38f) > 0.19f; + OutWeights.Add(bUseU ? TEXT("U") : TEXT("O"), MouthWeight * 0.78f); + OutWeights.Add(TEXT("A"), MouthWeight * 0.28f); + } + else + { + OutWeights.Add(TEXT("A"), MouthWeight); + if (Brightness > 0.30f) + { + OutWeights.Add(TEXT("E"), MouthWeight * 0.25f); + } + } +} +} + ULipSyncComponent::ULipSyncComponent() { PrimaryComponentTick.bCanEverTick = true; @@ -35,6 +135,28 @@ void ULipSyncComponent::BeginPlay() { MorphController = ResolveMorphController(); } + + if (bAutoBindTTSStreamingComponent) + { + if (!TTSStreamingComponent) + { + if (AActor* Owner = GetOwner()) + { + TTSStreamingComponent = Owner->FindComponentByClass(); + } + } + + if (TTSStreamingComponent) + { + BindToTTSStreamingComponent(TTSStreamingComponent); + } + } +} + +void ULipSyncComponent::EndPlay(const EEndPlayReason::Type EndPlayReason) +{ + UnbindFromTTSStreamingComponent(); + Super::EndPlay(EndPlayReason); } void ULipSyncComponent::SetVisemeWeight(FName VisemeName, float Weight) @@ -127,38 +249,139 @@ bool ULipSyncComponent::PlayAudioDrivenLipSyncWithComponent(UAudioComponent* Aud return true; } -bool ULipSyncComponent::FollowExternalAudioComponent(UAudioComponent* AudioComponent, const FText& Transcript) +bool ULipSyncComponent::BindToTTSStreamingComponent(UQwenTTSStreamingComponent* InTTSStreamingComponent) { - if (!AudioComponent) + if (!InTTSStreamingComponent) { return false; } + if (TTSStreamingComponent != InTTSStreamingComponent || bBoundToTTSStreamingComponent) + { + UnbindFromTTSStreamingComponent(); + } + + TTSStreamingComponent = InTTSStreamingComponent; + TTSStreamingComponent->OnStreamStarted.AddUniqueDynamic(this, &ULipSyncComponent::HandleTTSStreamStarted); + TTSStreamingComponent->OnAudioChunk.AddUniqueDynamic(this, &ULipSyncComponent::HandleTTSAudioChunk); + TTSStreamingComponent->OnStreamFinished.AddUniqueDynamic(this, &ULipSyncComponent::HandleTTSStreamFinished); + bBoundToTTSStreamingComponent = true; + + AudioDrivenComponent = TTSStreamingComponent; + if (TTSStreamingComponent->IsStreaming() || TTSStreamingComponent->IsPlayingVoiceAudio()) + { + StartStreamingAudioAnalyzer(TTSStreamingComponent); + } + + return true; +} + +void ULipSyncComponent::UnbindFromTTSStreamingComponent() +{ + if (!TTSStreamingComponent || !bBoundToTTSStreamingComponent) + { + bBoundToTTSStreamingComponent = false; + return; + } + + TTSStreamingComponent->OnStreamStarted.RemoveDynamic(this, &ULipSyncComponent::HandleTTSStreamStarted); + TTSStreamingComponent->OnAudioChunk.RemoveDynamic(this, &ULipSyncComponent::HandleTTSAudioChunk); + TTSStreamingComponent->OnStreamFinished.RemoveDynamic(this, &ULipSyncComponent::HandleTTSStreamFinished); + bBoundToTTSStreamingComponent = false; +} + +bool ULipSyncComponent::StartStreamingAudioAnalyzer(UAudioComponent* AudioComponent) +{ AudioDrivenComponent = AudioComponent; - AudioDrivenTranscript = Transcript; - AudioDrivenMode = ELipSyncAudioDrivenMode::TranscriptVisemes; + AudioDrivenMode = ELipSyncAudioDrivenMode::StreamingAudioAnalyzer; AudioDrivenPlaybackTime = 0.0f; AudioDrivenDuration = 0.0f; LastEnvelopeValue = 0.0f; LastNonSilentMouthWeight = 0.0f; SilenceHoldRemaining = 0.0f; + StreamingAnalyzerPlosiveHoldRemaining = 0.0f; + StreamingAnalyzerPreviousRms = 0.0f; + StreamingAnalyzerShapePhase = 0.0f; bReceivedEnvelopeValue = false; bAudioDrivenControlsPlayback = false; - bWaitingForExternalAudioPlayback = !AudioComponent->IsPlaying(); + bWaitingForExternalAudioPlayback = AudioComponent && !AudioComponent->IsPlaying(); ExternalAudioPlaybackWaitTime = 0.0f; - - AudioComponent->EnvelopeFollowerAttackTime = 8; - AudioComponent->EnvelopeFollowerReleaseTime = 90; - AudioComponent->OnAudioFinished.AddUniqueDynamic(this, &ULipSyncComponent::HandleAudioDrivenFinished); - AudioComponent->OnAudioPlaybackPercent.AddUniqueDynamic(this, &ULipSyncComponent::HandleAudioDrivenPlaybackPercent); - AudioComponent->OnAudioSingleEnvelopeValue.AddUniqueDynamic(this, &ULipSyncComponent::HandleAudioDrivenEnvelopeValue); - - RebuildGeneratedTranscriptVisemes(); ClearVisemes(); bAudioDrivenLipSyncActive = true; return true; } +void ULipSyncComponent::PushAudioSamplesPCM16Bytes(const TArray& PCMBytes, int32 SampleRate, int32 NumChannels) +{ + if (PCMBytes.Num() < 2 || SampleRate <= 0 || NumChannels <= 0) + { + return; + } + + if (StreamingAnalyzerSampleRate != SampleRate) + { + ResetStreamingAnalyzerTimeline(); + StreamingAnalyzerSampleRate = SampleRate; + } + + const int32 BytesPerFrame = NumChannels * static_cast(sizeof(int16)); + const int32 FrameCount = PCMBytes.Num() / BytesPerFrame; + TArray MonoSamples; + MonoSamples.Reserve(FrameCount); + + for (int32 FrameIndex = 0; FrameIndex < FrameCount; ++FrameIndex) + { + float MixedSample = 0.0f; + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ++ChannelIndex) + { + const int32 ByteIndex = FrameIndex * BytesPerFrame + ChannelIndex * 2; + const int16 Sample = static_cast(static_cast(PCMBytes[ByteIndex]) | (static_cast(PCMBytes[ByteIndex + 1]) << 8)); + MixedSample += static_cast(Sample) / 32768.0f; + } + MonoSamples.Add(FMath::Clamp(MixedSample / static_cast(NumChannels), -1.0f, 1.0f)); + } + + AppendStreamingAnalyzerMarkers(MonoSamples, SampleRate); + if (!bAudioDrivenLipSyncActive && AudioDrivenComponent && AudioDrivenComponent->IsPlaying()) + { + StartStreamingAudioAnalyzer(AudioDrivenComponent.Get()); + } +} + +void ULipSyncComponent::PushAudioSamplesFloat(const TArray& Samples, int32 SampleRate, int32 NumChannels) +{ + if (Samples.Num() == 0 || SampleRate <= 0 || NumChannels <= 0) + { + return; + } + + if (StreamingAnalyzerSampleRate != SampleRate) + { + ResetStreamingAnalyzerTimeline(); + StreamingAnalyzerSampleRate = SampleRate; + } + + const int32 FrameCount = Samples.Num() / NumChannels; + TArray MonoSamples; + MonoSamples.Reserve(FrameCount); + + for (int32 FrameIndex = 0; FrameIndex < FrameCount; ++FrameIndex) + { + float MixedSample = 0.0f; + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ++ChannelIndex) + { + MixedSample += Samples[FrameIndex * NumChannels + ChannelIndex]; + } + MonoSamples.Add(FMath::Clamp(MixedSample / static_cast(NumChannels), -1.0f, 1.0f)); + } + + AppendStreamingAnalyzerMarkers(MonoSamples, SampleRate); + if (!bAudioDrivenLipSyncActive && AudioDrivenComponent && AudioDrivenComponent->IsPlaying()) + { + StartStreamingAudioAnalyzer(AudioDrivenComponent.Get()); + } +} + void ULipSyncComponent::StopAudioDrivenLipSync() { bAudioDrivenLipSyncActive = false; @@ -170,6 +393,7 @@ void ULipSyncComponent::StopAudioDrivenLipSync() bWaitingForExternalAudioPlayback = false; ExternalAudioPlaybackWaitTime = 0.0f; + ResetStreamingAnalyzerTimeline(); ClearVisemes(); } @@ -283,6 +507,12 @@ void ULipSyncComponent::UpdateAudioDrivenLipSync(float DeltaTime) return; } + if (AudioDrivenMode == ELipSyncAudioDrivenMode::StreamingAudioAnalyzer) + { + UpdateStreamingAudioAnalyzer(DeltaTime); + return; + } + if (!AudioDrivenComponent || !AudioDrivenComponent->IsPlaying()) { if (AudioDrivenComponent && !bAudioDrivenControlsPlayback && bWaitingForExternalAudioPlayback) @@ -317,6 +547,135 @@ void ULipSyncComponent::UpdateAudioDrivenLipSync(float DeltaTime) SetAudioDrivenTargetVisemes(GetAudioDrivenMouthWeight(DeltaTime)); } +void ULipSyncComponent::UpdateStreamingAudioAnalyzer(float DeltaTime) +{ + if (AudioDrivenComponent && !AudioDrivenComponent->IsPlaying()) + { + const bool bUsingTTSStreaming = TTSStreamingComponent && AudioDrivenComponent == TTSStreamingComponent; + if (bUsingTTSStreaming && (TTSStreamingComponent->IsStreaming() || StreamingAnalyzerMarkerIndex < StreamingAnalyzerMarkers.Num())) + { + bWaitingForExternalAudioPlayback = true; + ExternalAudioPlaybackWaitTime += DeltaTime; + if (TTSStreamingComponent->IsStreaming() || ExternalAudioPlaybackWaitTime < 1.0f) + { + TargetVisemeWeights.Empty(); + return; + } + + bWaitingForExternalAudioPlayback = false; + ExternalAudioPlaybackWaitTime = 0.0f; + } + + if (bWaitingForExternalAudioPlayback) + { + ExternalAudioPlaybackWaitTime += DeltaTime; + if (ExternalAudioPlaybackWaitTime < 10.0f) + { + return; + } + } + + HandleAudioDrivenFinished(); + return; + } + + bWaitingForExternalAudioPlayback = false; + ExternalAudioPlaybackWaitTime = 0.0f; + if (!bStreamingAnalyzerPlaybackActive) + { + AudioDrivenPlaybackTime = 0.0f; + StreamingAnalyzerMarkerIndex = 0; + bStreamingAnalyzerPlaybackActive = true; + } + + AudioDrivenPlaybackTime += DeltaTime; + ApplyStreamingAnalyzerMarkerAtTime(AudioDrivenPlaybackTime); +} + +void ULipSyncComponent::AppendStreamingAnalyzerMarkers(const TArray& MonoSamples, int32 SampleRate) +{ + if (MonoSamples.Num() == 0 || SampleRate <= 0) + { + return; + } + + const int32 WindowSampleCount = FMath::Clamp( + FMath::RoundToInt(StreamingAnalyzerWindowSeconds * static_cast(SampleRate)), + 128, + FMath::Max(128, MonoSamples.Num())); + + if (MonoSamples.Num() < WindowSampleCount) + { + StreamingAnalyzerQueuedDuration += static_cast(MonoSamples.Num()) / static_cast(SampleRate); + return; + } + + const int32 StepSampleCount = FMath::Max(1, FMath::RoundToInt(static_cast(SampleRate) * StreamingAnalyzerWindowSeconds * 0.5f)); + const float StepSeconds = static_cast(StepSampleCount) / static_cast(SampleRate); + const float Gate = FMath::Max(StreamingAnalyzerNoiseGate, 0.0f); + for (int32 StartSample = 0; StartSample + WindowSampleCount <= MonoSamples.Num(); StartSample += StepSampleCount) + { + FLipSyncStreamingMarker Marker; + Marker.Time = StreamingAnalyzerQueuedDuration + (static_cast(StartSample) / static_cast(SampleRate)); + + BuildStreamingVisemeWeights( + MonoSamples, + StartSample, + WindowSampleCount, + StepSeconds, + Gate, + StreamingAnalyzerGain, + StreamingAnalyzerMouthGamma, + SilenceThreshold, + StreamingAnalyzerPlosiveHoldTime, + Marker.Time, + StreamingAnalyzerPlosiveHoldRemaining, + StreamingAnalyzerPreviousRms, + Marker.VisemeWeights); + + StreamingAnalyzerMarkers.Add(MoveTemp(Marker)); + } + + StreamingAnalyzerQueuedDuration += static_cast(MonoSamples.Num()) / static_cast(SampleRate); +} + +void ULipSyncComponent::ResetStreamingAnalyzerTimeline() +{ + StreamingAnalyzerMarkers.Reset(); + StreamingAnalyzerQueuedDuration = 0.0f; + StreamingAnalyzerMarkerIndex = 0; + StreamingAnalyzerPlosiveHoldRemaining = 0.0f; + StreamingAnalyzerPreviousRms = 0.0f; + StreamingAnalyzerShapePhase = 0.0f; + bStreamingAnalyzerPlaybackActive = false; +} + +void ULipSyncComponent::ApplyStreamingAnalyzerMarkerAtTime(float PlaybackTime) +{ + TargetVisemeWeights.Empty(); + + if (StreamingAnalyzerMarkers.Num() == 0) + { + return; + } + + while (StreamingAnalyzerMarkerIndex + 1 < StreamingAnalyzerMarkers.Num() + && StreamingAnalyzerMarkers[StreamingAnalyzerMarkerIndex + 1].Time <= PlaybackTime) + { + ++StreamingAnalyzerMarkerIndex; + } + + TargetVisemeWeights = StreamingAnalyzerMarkers[StreamingAnalyzerMarkerIndex].VisemeWeights; + + const float OldestAllowedTime = PlaybackTime - StreamingAnalyzerBufferSeconds; + if (StreamingAnalyzerMarkerIndex > 32 && StreamingAnalyzerMarkers[StreamingAnalyzerMarkerIndex].Time > OldestAllowedTime) + { + const int32 RemoveCount = FMath::Max(0, StreamingAnalyzerMarkerIndex - 16); + StreamingAnalyzerMarkers.RemoveAt(0, RemoveCount, EAllowShrinking::No); + StreamingAnalyzerMarkerIndex -= RemoveCount; + } +} + float ULipSyncComponent::GetAudioDrivenMouthWeight(float DeltaTime) { float EnvelopeValue = 0.0f; @@ -648,3 +1007,40 @@ void ULipSyncComponent::HandleAudioDrivenEnvelopeValue(const USoundWave* Playing LastEnvelopeValue = FMath::Max(EnvelopeValue, 0.0f); bReceivedEnvelopeValue = true; } + +void ULipSyncComponent::HandleTTSStreamStarted() +{ + AudioDrivenComponent = TTSStreamingComponent; + AudioDrivenMode = ELipSyncAudioDrivenMode::StreamingAudioAnalyzer; + bAudioDrivenLipSyncActive = false; + bWaitingForExternalAudioPlayback = true; + ExternalAudioPlaybackWaitTime = 0.0f; + AudioDrivenPlaybackTime = 0.0f; + ResetStreamingAnalyzerTimeline(); + ClearVisemes(); +} + +void ULipSyncComponent::HandleTTSAudioChunk(const FQwenTTSStreamChunk& Chunk) +{ + if (!TTSStreamingComponent || Chunk.PCMData.Num() == 0) + { + return; + } + + AudioDrivenComponent = TTSStreamingComponent; + PushAudioSamplesPCM16Bytes(Chunk.PCMData, Chunk.SampleRate, Chunk.NumChannels); + if (TTSStreamingComponent->IsPlayingVoiceAudio() && (!bAudioDrivenLipSyncActive || AudioDrivenMode != ELipSyncAudioDrivenMode::StreamingAudioAnalyzer)) + { + StartStreamingAudioAnalyzer(TTSStreamingComponent); + } +} + +void ULipSyncComponent::HandleTTSStreamFinished() +{ + if (!TTSStreamingComponent || TTSStreamingComponent->IsPlayingVoiceAudio()) + { + return; + } + + HandleAudioDrivenFinished(); +} diff --git a/Source/FunnyGirl/Public/Morph/LipSyncComponent.h b/Source/FunnyGirl/Public/Morph/LipSyncComponent.h index 754f858..10f0a9b 100644 --- a/Source/FunnyGirl/Public/Morph/LipSyncComponent.h +++ b/Source/FunnyGirl/Public/Morph/LipSyncComponent.h @@ -4,11 +4,13 @@ #include "CoreMinimal.h" #include "Components/ActorComponent.h" +#include "QwenTTSStreamingTypes.h" #include "LipSyncComponent.generated.h" class ULipSyncMappingDataAsset; class UMorphControllerComponent; class UAudioComponent; +class UQwenTTSStreamingComponent; class USoundBase; class USoundWave; @@ -17,7 +19,14 @@ enum class ELipSyncAudioDrivenMode : uint8 { EnvelopeMouthOpen UMETA(DisplayName = "Envelope Mouth Open"), TranscriptVisemes UMETA(DisplayName = "Transcript Visemes"), - VisemeSequence UMETA(DisplayName = "Viseme Sequence") + VisemeSequence UMETA(DisplayName = "Viseme Sequence"), + StreamingAudioAnalyzer UMETA(DisplayName = "Streaming Audio Analyzer") +}; + +struct FLipSyncStreamingMarker +{ + float Time = 0.0f; + TMap VisemeWeights; }; /** @@ -41,9 +50,6 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync") bool bAutoResolveMorphController = true; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Smoothing", meta = (ClampMin = "0.1", DeprecatedProperty, DeprecationMessage = "Use VisemeAttackSpeed and VisemeReleaseSpeed instead.")) - float InterpolationSpeed = 18.0f; - /** How quickly viseme weights rise toward the target. */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Smoothing", meta = (ClampMin = "0.1")) float VisemeAttackSpeed = 24.0f; @@ -56,50 +62,40 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Smoothing", meta = (ClampMin = "0")) float SilenceHoldTime = 0.045f; - /** Crossfades to the next audio-driven viseme instead of hard switching. 0 disables crossfade. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Smoothing", meta = (ClampMin = "0", ClampMax = "0.45")) - float AudioDrivenVisemeCrossfade = 0.12f; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync", meta = (ClampMin = "0")) float SilenceThreshold = 0.001f; - // --- Audio-driven lip sync --- + /** How much of the generated streaming marker timeline to keep behind current playback. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Streaming Analyzer", meta = (ClampMin = "0.1", ClampMax = "3.0")) + float StreamingAnalyzerBufferSeconds = 1.0f; - /** Default audio asset used by Play Audio Driven Lip Sync when no sound is passed explicitly. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Audio Driven") - TObjectPtr AudioDrivenSound; + /** Analysis window size. 25-40 ms is a good range for speech. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Streaming Analyzer", meta = (ClampMin = "0.01", ClampMax = "0.08")) + float StreamingAnalyzerWindowSeconds = 0.032f; - /** Audio-only mode cannot know phonemes. Envelope mode opens/closes the mouth naturally; sequence mode cycles fake visemes for debugging. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Audio Driven") - ELipSyncAudioDrivenMode AudioDrivenMode = ELipSyncAudioDrivenMode::EnvelopeMouthOpen; + /** Extra gain applied to PCM RMS before mouth weights are generated. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Streaming Analyzer", meta = (ClampMin = "0")) + float StreamingAnalyzerGain = 10.0f; - /** Main viseme used by Envelope Mouth Open mode. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Audio Driven") - FName AudioDrivenEnvelopeViseme = TEXT("A"); + /** Shapes mouth intensity. Lower values make quiet speech open the mouth more. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Streaming Analyzer", meta = (ClampMin = "0.1")) + float StreamingAnalyzerMouthGamma = 0.65f; - /** Optional transcript for Transcript Visemes mode. The component builds an approximate viseme sequence from this text. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Audio Driven", meta = (MultiLine = "true")) - FText AudioDrivenTranscript; + /** Noise gate for PCM RMS. Raise this if the mouth moves during silence. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Streaming Analyzer", meta = (ClampMin = "0", ClampMax = "0.2")) + float StreamingAnalyzerNoiseGate = 0.012f; - /** Viseme sequence used while audio-driven lip sync is playing. The audio envelope controls intensity. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Audio Driven") - TArray AudioDrivenVisemeSequence; + /** How long a detected plosive/closed-lip onset keeps the mouth close viseme. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Streaming Analyzer", meta = (ClampMin = "0", ClampMax = "0.2")) + float StreamingAnalyzerPlosiveHoldTime = 0.055f; - /** How many viseme steps per second to advance while test audio is playing. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Audio Driven", meta = (ClampMin = "0.1")) - float AudioDrivenVisemeRate = 9.0f; + /** Assign your Qwen TTS component here. The lip sync component subscribes to streamed PCM automatically. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Streaming Analyzer", meta = (DisplayName = "TTS Streaming Component")) + TObjectPtr TTSStreamingComponent; - /** Multiplies the audio envelope before it becomes mouth intensity. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Audio Driven", meta = (ClampMin = "0")) - float AudioDrivenEnvelopeGain = 5.0f; - - /** Smooths low audio values into a more visible mouth movement. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Audio Driven", meta = (ClampMin = "0.1")) - float AudioDrivenEnvelopeGamma = 0.65f; - - /** Used when neither cooked envelope data nor realtime envelope callbacks are available. Disable for production if you prefer silence over synthetic movement. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Audio Driven") - bool bUseFallbackPulseWithoutEnvelope = false; + /** If no TTS component is assigned, try to find one on the same actor during BeginPlay. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Lip Sync|Streaming Analyzer") + bool bAutoBindTTSStreamingComponent = true; UFUNCTION(BlueprintCallable, Category = "FunnyGirl|Lip Sync") void SetVisemeWeight(FName VisemeName, float Weight); @@ -115,10 +111,6 @@ public: bool PlayAudioDrivenLipSyncWithComponent(UAudioComponent* AudioComponent, USoundBase* Sound, float StartTime = 0.0f); - /** Follow an audio component that is controlled elsewhere, such as a streaming TTS component. Does not stop, replace, or start audio playback. */ - UFUNCTION(BlueprintCallable, Category = "FunnyGirl|Lip Sync|Audio Driven", meta = (DisplayName = "Follow External Audio Component")) - bool FollowExternalAudioComponent(UAudioComponent* AudioComponent, const FText& Transcript); - UFUNCTION(BlueprintCallable, Category = "FunnyGirl|Lip Sync|Audio Driven", meta = (DisplayName = "Stop Audio Driven Lip Sync")) void StopAudioDrivenLipSync(); @@ -136,8 +128,23 @@ public: virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; + // Legacy/test audio fields are intentionally not editable or Blueprint-visible. + UPROPERTY() + TObjectPtr AudioDrivenSound; + + ELipSyncAudioDrivenMode AudioDrivenMode = ELipSyncAudioDrivenMode::EnvelopeMouthOpen; + FName AudioDrivenEnvelopeViseme = TEXT("A"); + FText AudioDrivenTranscript; + TArray AudioDrivenVisemeSequence; + float AudioDrivenVisemeRate = 9.0f; + float AudioDrivenEnvelopeGain = 5.0f; + float AudioDrivenEnvelopeGamma = 0.65f; + float AudioDrivenVisemeCrossfade = 0.12f; + bool bUseFallbackPulseWithoutEnvelope = false; + protected: virtual void BeginPlay() override; + virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; private: UPROPERTY() @@ -162,10 +169,28 @@ private: TArray GeneratedTranscriptVisemes; TArray GeneratedTranscriptVisemeUnits; + TArray StreamingAnalyzerMarkers; + int32 StreamingAnalyzerSampleRate = 0; + float StreamingAnalyzerPlosiveHoldRemaining = 0.0f; + float StreamingAnalyzerPreviousRms = 0.0f; + float StreamingAnalyzerShapePhase = 0.0f; + float StreamingAnalyzerQueuedDuration = 0.0f; + int32 StreamingAnalyzerMarkerIndex = 0; + bool bStreamingAnalyzerPlaybackActive = false; + bool bBoundToTTSStreamingComponent = false; UMorphControllerComponent* ResolveMorphController() const; UAudioComponent* ResolveAudioDrivenComponent(); + bool BindToTTSStreamingComponent(UQwenTTSStreamingComponent* InTTSStreamingComponent); + void UnbindFromTTSStreamingComponent(); + bool StartStreamingAudioAnalyzer(UAudioComponent* AudioComponent = nullptr); + void PushAudioSamplesPCM16Bytes(const TArray& PCMBytes, int32 SampleRate, int32 NumChannels = 1); + void PushAudioSamplesFloat(const TArray& Samples, int32 SampleRate, int32 NumChannels = 1); void UpdateAudioDrivenLipSync(float DeltaTime); + void UpdateStreamingAudioAnalyzer(float DeltaTime); + void AppendStreamingAnalyzerMarkers(const TArray& MonoSamples, int32 SampleRate); + void ResetStreamingAnalyzerTimeline(); + void ApplyStreamingAnalyzerMarkerAtTime(float PlaybackTime); float GetAudioDrivenMouthWeight(float DeltaTime); void RebuildGeneratedTranscriptVisemes(); const TArray& ResolveActiveAudioDrivenVisemeSequence() const; @@ -181,4 +206,13 @@ private: UFUNCTION() void HandleAudioDrivenEnvelopeValue(const USoundWave* PlayingSoundWave, const float EnvelopeValue); + + UFUNCTION() + void HandleTTSStreamStarted(); + + UFUNCTION() + void HandleTTSAudioChunk(const FQwenTTSStreamChunk& Chunk); + + UFUNCTION() + void HandleTTSStreamFinished(); };