diff --git a/Assets/External/OptiTrack Unity Plugin/OptiTrack/BaseAvatar/Y Bot.Materials/Alpha_Body_MAT.asset b/Assets/External/OptiTrack Unity Plugin/OptiTrack/BaseAvatar/Y Bot.Materials/Alpha_Body_MAT.asset index 101e8953..2458cca4 100644 --- a/Assets/External/OptiTrack Unity Plugin/OptiTrack/BaseAvatar/Y Bot.Materials/Alpha_Body_MAT.asset +++ b/Assets/External/OptiTrack Unity Plugin/OptiTrack/BaseAvatar/Y Bot.Materials/Alpha_Body_MAT.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:430d4309a3db96648e09a074875bfb451e7f7330049cf0ff475d909747c58f4d -size 23404 +oid sha256:651885b63ff3edbdb7a37c3d5800a432c8f908e5b5f65d3be5dad285e721a5e4 +size 45119 diff --git a/Assets/External/OptiTrack Unity Plugin/OptiTrack/BaseAvatar/Y Bot.Materials/Alpha_Joints_MAT.asset b/Assets/External/OptiTrack Unity Plugin/OptiTrack/BaseAvatar/Y Bot.Materials/Alpha_Joints_MAT.asset index cf342f76..c4b8ced3 100644 --- a/Assets/External/OptiTrack Unity Plugin/OptiTrack/BaseAvatar/Y Bot.Materials/Alpha_Joints_MAT.asset +++ b/Assets/External/OptiTrack Unity Plugin/OptiTrack/BaseAvatar/Y Bot.Materials/Alpha_Joints_MAT.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5bfc94bc818fb5242623522679b8bbb94254dcbc897a3e376548d0d22b1fd09c -size 23354 +oid sha256:c8f90cf5cdf0f57311959a425b5e2c96d528a3ee922451b630b44709658a1df1 +size 45121 diff --git a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Editor/OptitrackSkeletonAnimatorEditor.cs b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Editor/OptitrackSkeletonAnimatorEditor.cs index 048ea5ac..4e0c940a 100644 --- a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Editor/OptitrackSkeletonAnimatorEditor.cs +++ b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Editor/OptitrackSkeletonAnimatorEditor.cs @@ -1,14 +1,14 @@ using UnityEditor; using UnityEngine; -[CustomEditor(typeof(OptitrackSkeletonAnimator_Meechu))] +[CustomEditor(typeof(OptitrackSkeletonAnimator_Mingle))] public class OptitrackSkeletonAnimatorEditor : Editor { public override void OnInspectorGUI() { DrawDefaultInspector(); - OptitrackSkeletonAnimator_Meechu skeletonAnimator = (OptitrackSkeletonAnimator_Meechu)target; + OptitrackSkeletonAnimator_Mingle skeletonAnimator = (OptitrackSkeletonAnimator_Mingle)target; GUILayout.Space(10); EditorGUILayout.LabelField("스켈레톤 상태", EditorStyles.boldLabel); diff --git a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Prefabs/BaseAvatar - OptiTrack.prefab b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Prefabs/BaseAvatar - OptiTrack.prefab index 064b64b5..ea9a970a 100644 --- a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Prefabs/BaseAvatar - OptiTrack.prefab +++ b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Prefabs/BaseAvatar - OptiTrack.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2369d3e901ee9989d9e7e7a0b819982b6f7b422d7aa81aa6b1b8d5ab79865054 -size 95715 +oid sha256:b930ca102f90f1bfeeb74d42f887c8494e31420aeec00d0183c2b79a6c0846c1 +size 99764 diff --git a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackRigidBody.cs b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackRigidBody.cs index 9b60ab2f..5221ebe1 100644 --- a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackRigidBody.cs +++ b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackRigidBody.cs @@ -100,8 +100,8 @@ public class OptitrackRigidBody : MonoBehaviour m_isRigidBodyFound = rbState.IsTracked; if (m_isRigidBodyFound) { - transform.position = rbState.Pose.Position; - transform.rotation = rbState.Pose.Orientation; + transform.localPosition = rbState.Pose.Position; + transform.localRotation = rbState.Pose.Orientation; } } else @@ -122,8 +122,8 @@ public class OptitrackRigidBody : MonoBehaviour m_isRigidBodyFound = rbState.IsTracked; if (m_isRigidBodyFound) { - transform.position = rbState.Pose.Position; - transform.rotation = rbState.Pose.Orientation; + transform.localPosition = rbState.Pose.Position; + transform.localRotation = rbState.Pose.Orientation; } } } diff --git a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackSkeletonAnimator_Mingle.cs b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackSkeletonAnimator_Mingle.cs index 41ef7407..3fa264e7 100644 --- a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackSkeletonAnimator_Mingle.cs +++ b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/OptitrackSkeletonAnimator_Mingle.cs @@ -4,6 +4,14 @@ using Unity.Mathematics; using UnityEngine; using System.Collections; +[System.Serializable] +public enum MotionApplicationScope +{ + All, // 전신 적용 + ExcludeFingersOnly, // 손가락만 제외 + ExcludeHandsAndFingers // 손목 + 손가락 제외 +} + public class OptitrackSkeletonAnimator_Mingle : MonoBehaviour { [Header("OptiTrack 설정")] @@ -14,6 +22,10 @@ public class OptitrackSkeletonAnimator_Mingle : MonoBehaviour public string SkeletonAssetName = "Skeleton1"; private Animator TargetAnimator; + [Header("모션 적용 범위")] + [Tooltip("모션 캡처 데이터를 적용할 범위 선택")] + public MotionApplicationScope motionScope = MotionApplicationScope.All; + private OptitrackSkeletonDefinition m_skeletonDef; private Dictionary m_optitrackToHumanBoneMap; @@ -108,45 +120,20 @@ public class OptitrackSkeletonAnimator_Mingle : MonoBehaviour if (m_optitrackToHumanBoneMap.TryGetValue(optitrackBoneName, out HumanBodyBones humanBone)) { + // 모션 스코프에 따른 본 필터링 + if (!ShouldApplyMotionToBone(optitrackBoneName)) + continue; + Transform boneTransform = TargetAnimator.GetBoneTransform(humanBone); if (boneTransform != null) { if (skelState.BonePoses.TryGetValue(bone.Id, out OptitrackPose bonePose)) { + // 위치는 항상 업데이트 (Hip 등 루트 본의 경우) boneTransform.localPosition = bonePose.Position; + + // 회전 업데이트 boneTransform.localRotation = bonePose.Orientation; - - /* - // 엄지 손가락 본에 대한 고정 회전값 적용 - if (optitrackBoneName.Contains("LThumb1")) - { - boneTransform.localRotation = bonePose.Orientation * Quaternion.Euler(-40f, -60f, 20f); - } - else if (optitrackBoneName.Contains("LThumb2")) - { - boneTransform.localRotation = bonePose.Orientation; - } - else if (optitrackBoneName.Contains("LThumb3")) - { - boneTransform.localRotation = bonePose.Orientation * Quaternion.Euler(-60f, 0f, 0f); - } - else if (optitrackBoneName.Contains("RThumb1")) - { - boneTransform.localRotation = bonePose.Orientation * Quaternion.Euler(40f, 60f, 20f); - } - else if (optitrackBoneName.Contains("RThumb2")) - { - boneTransform.localRotation = bonePose.Orientation; - } - else if (optitrackBoneName.Contains("RThumb3")) - { - boneTransform.localRotation = bonePose.Orientation * Quaternion.Euler(-60f, 0f, 0f); - } - else - { - boneTransform.localRotation = bonePose.Orientation; - } - */ } } } @@ -290,4 +277,39 @@ public class OptitrackSkeletonAnimator_Mingle : MonoBehaviour yield return new WaitForSeconds(updateInterval); } } + + private bool IsFingerBone(string boneName) + { + // 손가락 관련 본들 확인 (양손 모두) + return boneName.Contains("Thumb") || + boneName.Contains("Index") || + boneName.Contains("Middle") || + boneName.Contains("Ring") || + boneName.Contains("Pinky"); + } + + private bool IsHandBone(string boneName) + { + // 손 관련 본들 확인 (양손 모두) + return boneName.Contains("LHand") || + boneName.Contains("RHand"); + } + + private bool ShouldApplyMotionToBone(string boneName) + { + switch (motionScope) + { + case MotionApplicationScope.All: + return true; + + case MotionApplicationScope.ExcludeFingersOnly: + return !IsFingerBone(boneName); + + case MotionApplicationScope.ExcludeHandsAndFingers: + return !IsFingerBone(boneName) && !IsHandBone(boneName); + + default: + return true; + } + } } diff --git a/Assets/External/Rokoko.meta b/Assets/External/Rokoko.meta new file mode 100644 index 00000000..e7f180ff --- /dev/null +++ b/Assets/External/Rokoko.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6074c86fbcd256e4bb26cb276832ead6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Art.meta b/Assets/External/Rokoko/Art.meta new file mode 100644 index 00000000..f9acc6da --- /dev/null +++ b/Assets/External/Rokoko/Art.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f3e3c0381a922e48aa26f921f58c891 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Art/Fonts.meta b/Assets/External/Rokoko/Art/Fonts.meta new file mode 100644 index 00000000..c63a8ace --- /dev/null +++ b/Assets/External/Rokoko/Art/Fonts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96350abf3fd28af40b410cc048105913 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Art/Fonts/proximanova-bold-webfont.ttf b/Assets/External/Rokoko/Art/Fonts/proximanova-bold-webfont.ttf new file mode 100644 index 00000000..a7ec518b Binary files /dev/null and b/Assets/External/Rokoko/Art/Fonts/proximanova-bold-webfont.ttf differ diff --git a/Assets/External/Rokoko/Art/Fonts/proximanova-bold-webfont.ttf.meta b/Assets/External/Rokoko/Art/Fonts/proximanova-bold-webfont.ttf.meta new file mode 100644 index 00000000..93e6ca70 --- /dev/null +++ b/Assets/External/Rokoko/Art/Fonts/proximanova-bold-webfont.ttf.meta @@ -0,0 +1,28 @@ +fileFormatVersion: 2 +guid: 2f6f345d4d6f3754cb5e574ab4dafaa6 +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: "\0\0" + fontNames: + - "\0\0" + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Fonts/proximanova-bold-webfont.ttf + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Fonts/proximanova-regular-webfont.ttf b/Assets/External/Rokoko/Art/Fonts/proximanova-regular-webfont.ttf new file mode 100644 index 00000000..202bdd2d Binary files /dev/null and b/Assets/External/Rokoko/Art/Fonts/proximanova-regular-webfont.ttf differ diff --git a/Assets/External/Rokoko/Art/Fonts/proximanova-regular-webfont.ttf.meta b/Assets/External/Rokoko/Art/Fonts/proximanova-regular-webfont.ttf.meta new file mode 100644 index 00000000..6f4a454a --- /dev/null +++ b/Assets/External/Rokoko/Art/Fonts/proximanova-regular-webfont.ttf.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: f0155dcc7dd9dc848a0f10091d13702d +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: "\0\0" + fontNames: + - "\0\0" + fallbackFontReferences: + - {fileID: 12800000, guid: 2f6f345d4d6f3754cb5e574ab4dafaa6, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Fonts/proximanova-regular-webfont.ttf + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons.meta b/Assets/External/Rokoko/Art/Icons.meta new file mode 100644 index 00000000..35054af7 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c575b3954b7a31428687559eba456e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Art/Icons/RokokoIconAtlas.spriteatlas b/Assets/External/Rokoko/Art/Icons/RokokoIconAtlas.spriteatlas new file mode 100644 index 00000000..71ffd9fc --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/RokokoIconAtlas.spriteatlas @@ -0,0 +1,52 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!687078895 &4343727234628468602 +SpriteAtlas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: RokokoIconAtlas + m_EditorData: + serializedVersion: 2 + textureSettings: + serializedVersion: 2 + anisoLevel: 1 + compressionQuality: 50 + maxTextureSize: 2048 + textureCompression: 0 + filterMode: 1 + generateMipMaps: 0 + readable: 0 + crunchedCompression: 0 + sRGB: 1 + platformSettings: + - serializedVersion: 3 + m_BuildTarget: DefaultTexturePlatform + m_MaxTextureSize: 2048 + m_ResizeAlgorithm: 0 + m_TextureFormat: -1 + m_TextureCompression: 1 + m_CompressionQuality: 50 + m_CrunchedCompression: 1 + m_AllowsAlphaSplitting: 0 + m_Overridden: 0 + m_AndroidETC2FallbackOverride: 0 + m_ForceMaximumCompressionQuality_BC6H_BC7: 0 + packingSettings: + serializedVersion: 2 + padding: 4 + blockOffset: 1 + allowAlphaSplitting: 0 + enableRotation: 0 + enableTightPacking: 0 + variantMultiplier: 1 + packables: + - {fileID: 102900000, guid: 6c575b3954b7a31428687559eba456e9, type: 3} + totalSpriteSurfaceArea: 0 + bindAsDefault: 1 + m_MasterAtlas: {fileID: 0} + m_PackedSprites: [] + m_PackedSpriteNamesToIndex: [] + m_Tag: RokokoIconAtlas + m_IsVariant: 0 diff --git a/Assets/External/Rokoko/Art/Icons/RokokoIconAtlas.spriteatlas.meta b/Assets/External/Rokoko/Art/Icons/RokokoIconAtlas.spriteatlas.meta new file mode 100644 index 00000000..39f527d5 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/RokokoIconAtlas.spriteatlas.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: c4c98c4b2f785964793210729bc0df2a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/RokokoIconAtlas.spriteatlas + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-bg-border-radius-1px.png b/Assets/External/Rokoko/Art/Icons/rokoko-bg-border-radius-1px.png new file mode 100644 index 00000000..325f168d --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-bg-border-radius-1px.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e8560c6d31da1b0ec03c02b45209102b99217d3e36c8910e139aadd1c4c7e1a +size 199 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-bg-border-radius-1px.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-bg-border-radius-1px.png.meta new file mode 100644 index 00000000..935da4e1 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-bg-border-radius-1px.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 523426f29c740a54a9b199958c36590b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 6, y: 6, z: 6, w: 6} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-bg-border-radius-1px.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-direction-indicator-256.png b/Assets/External/Rokoko/Art/Icons/rokoko-direction-indicator-256.png new file mode 100644 index 00000000..02e51a2b --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-direction-indicator-256.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d336a0de400d6a4820f4a6397c1bcf19647fe8c6cd9a02c8f13e6884341efb1 +size 2492 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-direction-indicator-256.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-direction-indicator-256.png.meta new file mode 100644 index 00000000..a4a6b38f --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-direction-indicator-256.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 08c6561abd3b8194a8624dee9434e5bc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 16 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 256 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 256 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-direction-indicator-256.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-broadcast-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-broadcast-32.png new file mode 100644 index 00000000..fada06e6 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-broadcast-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30d8de7ab7bb2931ae45880fb2b756756ddb14da432bfea23ef2a4a5f3aa3187 +size 3436 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-broadcast-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-broadcast-32.png.meta new file mode 100644 index 00000000..23afc4be --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-broadcast-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 32ea982362dd9dc4ba2005b739d18e72 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-broadcast-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-input-gloves-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-input-gloves-32.png new file mode 100644 index 00000000..c67c36c6 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-input-gloves-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c492d8021151950099abace6142559bfc870bbd317aefb5a44124637c95c118 +size 578 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-input-gloves-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-input-gloves-32.png.meta new file mode 100644 index 00000000..34a676b0 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-input-gloves-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 0f4595a450884a440bbe6abbbed6ee1b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-input-gloves-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-profile-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-profile-32.png new file mode 100644 index 00000000..09907aa6 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-profile-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75af3931591ba6ed0908ce0f02b1273a990f85fd093a00e39a63240ffd60ee9e +size 715 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-profile-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-profile-32.png.meta new file mode 100644 index 00000000..1c0fd66f --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-profile-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 3816b5268ba20094bbcec7291dcb4ea1 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-profile-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-prop-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-prop-32.png new file mode 100644 index 00000000..5beb2ea9 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-prop-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e070ec492b35f2746ed97d02b2af2641fd6f0f9a82d8012a31a72b31b6bc075e +size 3991 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-prop-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-prop-32.png.meta new file mode 100644 index 00000000..12c8553c --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-prop-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 11261587382ef3d4ba3784b1f97294ce +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-prop-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-record-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-record-32.png new file mode 100644 index 00000000..7ef21b57 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-record-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae2602d81c3a54081526c749f6e5bdf7dacd919a8a1da2c77ebab4708c4eda1d +size 667 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-record-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-record-32.png.meta new file mode 100644 index 00000000..8342fa5d --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-record-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: f1807d94f1a8b7e43ac0f6f24f73e8df +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-record-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-restart-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-restart-32.png new file mode 100644 index 00000000..3a9b8475 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-restart-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b518b52b461a402b8a019f65a85cc047ae6bda6139ace67ff4a92873bdd712e3 +size 669 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-restart-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-restart-32.png.meta new file mode 100644 index 00000000..7b7c7430 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-restart-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: cd9504a8179c4644d8aea04f16200efa +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-restart-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-face-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-face-32.png new file mode 100644 index 00000000..598a20ac --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-face-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d9ca7b3ebda81df5c15ec4742a33c2a410adfdf01af6bedd26bafcb4c1f5ded +size 763 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-face-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-face-32.png.meta new file mode 100644 index 00000000..85a83488 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-face-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 1d5c2843614d4a84981b045f31b14072 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-row-face-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-suit-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-suit-32.png new file mode 100644 index 00000000..02cc860c --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-suit-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ad3b1cfc103e7b6e0d660b0d45de447fb926520a8c58e7a21d260091af0c3a7 +size 757 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-suit-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-suit-32.png.meta new file mode 100644 index 00000000..055e7b12 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-row-suit-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: ba8e6073760b14d41b8dcc5a9eaf1c21 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-row-suit-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-stop-white-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-stop-white-32.png new file mode 100644 index 00000000..f95bef38 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-stop-white-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b77cbe16f57a75afe361f03d5d75050e1355676c1c846e3b1b421abe7e0bb399 +size 187 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-stop-white-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-stop-white-32.png.meta new file mode 100644 index 00000000..801bc354 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-stop-white-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 9b913558b089c6d4088c17d9cc583b28 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-stop-white-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-straightpose-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-straightpose-32.png new file mode 100644 index 00000000..474e0e0d --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-straightpose-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5e59e64511c4e7f07b1374b2db88b6d50f30643026bb3cb795641f971bd1675 +size 1240 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-straightpose-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-straightpose-32.png.meta new file mode 100644 index 00000000..120e4935 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-straightpose-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 3ac26960e4ad8b846a7f29b4d3db4eae +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-straightpose-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-unicast-32.png b/Assets/External/Rokoko/Art/Icons/rokoko-icon-unicast-32.png new file mode 100644 index 00000000..56bdbee9 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-unicast-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52b54ec608d3dd570cf391cd698f33e6244a7f54bdc83faff59c4e431a1cf758 +size 3115 diff --git a/Assets/External/Rokoko/Art/Icons/rokoko-icon-unicast-32.png.meta b/Assets/External/Rokoko/Art/Icons/rokoko-icon-unicast-32.png.meta new file mode 100644 index 00000000..cee53674 --- /dev/null +++ b/Assets/External/Rokoko/Art/Icons/rokoko-icon-unicast-32.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 3cacab5c68cb3a94cbe8e23fe0d460d4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Icons/rokoko-icon-unicast-32.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Materials.meta b/Assets/External/Rokoko/Art/Materials.meta new file mode 100644 index 00000000..39aaca06 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5eba2627ac93b09498e806b1ca1f6ee4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_FaceHead_Material.mat b/Assets/External/Rokoko/Art/Materials/Rokoko_FaceHead_Material.mat new file mode 100644 index 00000000..81d270f0 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_FaceHead_Material.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rokoko_FaceHead_Material + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0, g: 0.5812235, b: 0.71599996, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_FaceHead_Material.mat.meta b/Assets/External/Rokoko/Art/Materials/Rokoko_FaceHead_Material.mat.meta new file mode 100644 index 00000000..7e343d94 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_FaceHead_Material.mat.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: 055df0cb0b68a9745962a657f2ef977b +timeCreated: 1564996349 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Materials/Rokoko_FaceHead_Material.mat + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_Floor_Material.mat b/Assets/External/Rokoko/Art/Materials/Rokoko_Floor_Material.mat new file mode 100644 index 00000000..8c0e67e3 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_Floor_Material.mat @@ -0,0 +1,89 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rokoko_Floor_Material + m_Shader: {fileID: 4800000, guid: fc0c201ebbc6ff844a8111b15ce5737a, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTexture: + m_Texture: {fileID: 2800000, guid: 673b25e62d3e3a4488ffd4d2c9636e84, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _FadeDistance: 9 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Radius: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SubTiles: 1 + - _Tiles: 3 + - _UVSec: 0 + - _ZWrite: 1 + - __dirty: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _GridColor: {r: 1, g: 1, b: 1, a: 0} + - _MainColor: {r: 0.11764706, g: 0.10980392, b: 0.11372549, a: 0.42745098} + - _Tint: {r: 0, g: 0, b: 0, a: 0} diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_Floor_Material.mat.meta b/Assets/External/Rokoko/Art/Materials/Rokoko_Floor_Material.mat.meta new file mode 100644 index 00000000..2abc7f5d --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_Floor_Material.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: de5442149a5364a45a89b4aed5318922 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Materials/Rokoko_Floor_Material.mat + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_GroundArrow_Material.mat b/Assets/External/Rokoko/Art/Materials/Rokoko_GroundArrow_Material.mat new file mode 100644 index 00000000..78ed0289 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_GroundArrow_Material.mat @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rokoko_GroundArrow_Material + m_Shader: {fileID: 10800, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - : + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 08c6561abd3b8194a8624dee9434e5bc, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - : 0 + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - : {r: 0, g: 1.929164e-33, b: 0, a: 1.9291523e-33} + - _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_GroundArrow_Material.mat.meta b/Assets/External/Rokoko/Art/Materials/Rokoko_GroundArrow_Material.mat.meta new file mode 100644 index 00000000..7854eac5 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_GroundArrow_Material.mat.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: 5b70380947dd58c43899aabae4e5d5af +timeCreated: 1492703436 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Materials/Rokoko_GroundArrow_Material.mat + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_GroundMarker_Material.mat b/Assets/External/Rokoko/Art/Materials/Rokoko_GroundMarker_Material.mat new file mode 100644 index 00000000..d85da567 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_GroundMarker_Material.mat @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rokoko_GroundMarker_Material + m_Shader: {fileID: 10800, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - : + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 10912, guid: 0000000000000000f000000000000000, type: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - : 0 + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - : {r: 0, g: 1.9445366e-33, b: 0, a: 1.9445248e-33} + - _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_GroundMarker_Material.mat.meta b/Assets/External/Rokoko/Art/Materials/Rokoko_GroundMarker_Material.mat.meta new file mode 100644 index 00000000..538ca24a --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_GroundMarker_Material.mat.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: 51a66222b072d794fa8dede8e56e2f60 +timeCreated: 1492703436 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Materials/Rokoko_GroundMarker_Material.mat + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_Invisible_Material.mat b/Assets/External/Rokoko/Art/Materials/Rokoko_Invisible_Material.mat new file mode 100644 index 00000000..4abd8888 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_Invisible_Material.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rokoko_Invisible_Material + m_Shader: {fileID: 30, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHAPREMULTIPLY_ON + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 3 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 0 + - __dirty: 1 + m_Colors: + - _Color: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_Invisible_Material.mat.meta b/Assets/External/Rokoko/Art/Materials/Rokoko_Invisible_Material.mat.meta new file mode 100644 index 00000000..a1b3362c --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_Invisible_Material.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 77c3b338e3957c147a347451541a2339 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Materials/Rokoko_Invisible_Material.mat + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonJoint_Material.mat b/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonJoint_Material.mat new file mode 100644 index 00000000..0968eeb4 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonJoint_Material.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rokoko_NewtonJoint_Material + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: a8551caaa94b44a43af0ec50bb5819ba, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.16911763, g: 0.16911763, b: 0.16911763, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonJoint_Material.mat.meta b/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonJoint_Material.mat.meta new file mode 100644 index 00000000..06c9cadb --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonJoint_Material.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 9a1455f894960f847b59c41f17fb77d7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Materials/Rokoko_NewtonJoint_Material.mat + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonMain_Material.mat b/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonMain_Material.mat new file mode 100644 index 00000000..f91d85f6 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonMain_Material.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rokoko_NewtonMain_Material + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 0265e9ba7f5e59445b11cb82a48f7214, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.6792453, g: 0.6792453, b: 0.6792453, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonMain_Material.mat.meta b/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonMain_Material.mat.meta new file mode 100644 index 00000000..cbdbbc86 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_NewtonMain_Material.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 423b90d678fb1c8408b9143d62e31c74 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Materials/Rokoko_NewtonMain_Material.mat + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_Prop_Material.mat b/Assets/External/Rokoko/Art/Materials/Rokoko_Prop_Material.mat new file mode 100644 index 00000000..7f1e9dae --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_Prop_Material.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rokoko_Prop_Material + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.2794118, g: 0.2794118, b: 0.2794118, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/External/Rokoko/Art/Materials/Rokoko_Prop_Material.mat.meta b/Assets/External/Rokoko/Art/Materials/Rokoko_Prop_Material.mat.meta new file mode 100644 index 00000000..9848e9a8 --- /dev/null +++ b/Assets/External/Rokoko/Art/Materials/Rokoko_Prop_Material.mat.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: efb193505e790244d941eded8ab70459 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Materials/Rokoko_Prop_Material.mat + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Meshes.meta b/Assets/External/Rokoko/Art/Meshes.meta new file mode 100644 index 00000000..dec8fe34 --- /dev/null +++ b/Assets/External/Rokoko/Art/Meshes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf60f35f54457e54ca439dc910bc5701 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Art/Meshes/Newton.meta b/Assets/External/Rokoko/Art/Meshes/Newton.meta new file mode 100644 index 00000000..c01bc762 --- /dev/null +++ b/Assets/External/Rokoko/Art/Meshes/Newton.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e7cb8f76f6ac4f34e81a3ad808e8ab63 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Art/Meshes/Newton/Rokoko_Newton.FBX b/Assets/External/Rokoko/Art/Meshes/Newton/Rokoko_Newton.FBX new file mode 100644 index 00000000..b20578ab --- /dev/null +++ b/Assets/External/Rokoko/Art/Meshes/Newton/Rokoko_Newton.FBX @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0208a211187c0f53b9c4f837e0ba6667bf6c523a6d711e45709dd7a22e08cfad +size 2618336 diff --git a/Assets/External/Rokoko/Art/Meshes/Newton/Rokoko_Newton.FBX.meta b/Assets/External/Rokoko/Art/Meshes/Newton/Rokoko_Newton.FBX.meta new file mode 100644 index 00000000..b5aac393 --- /dev/null +++ b/Assets/External/Rokoko/Art/Meshes/Newton/Rokoko_Newton.FBX.meta @@ -0,0 +1,1743 @@ +fileFormatVersion: 2 +guid: af1509907cf0821439505d380e183bd9 +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: Base + 100002: Camera001 + 100004: COM_Head + 100006: COM_LeftArm + 100008: COM_LeftFoot + 100010: COM_LeftForeArm + 100012: COM_LeftHand + 100014: COM_LeftShin + 100016: COM_LeftThigh + 100018: COM_Pelvis + 100020: COM_RightArm + 100022: COM_RightFoot + 100024: COM_RightForeArm + 100026: COM_RightHand + 100028: COM_RightShin + 100030: COM_RightThigh + 100032: COM_Thorax + 100034: Head + 100036: HeadTip + 100038: HeadVertex + 100040: Hips + 100042: IMU_0x00 + 100044: IMU_0x01 + 100046: IMU_0x02 + 100048: IMU_0x03 + 100050: IMU_0x20 + 100052: IMU_0x21 + 100054: IMU_0x22 + 100056: IMU_0x23 + 100058: IMU_0x24 + 100060: IMU_0x40 + 100062: IMU_0x60 + 100064: IMU_0x61 + 100066: IMU_0x62 + 100068: IMU_0x63 + 100070: IMU_0x64 + 100072: IMU_0x80 + 100074: IMU_0x81 + 100076: IMU_0x82 + 100078: IMU_0x83 + 100080: LA + 100082: Left1stMetatarsalHead + 100084: Left2ndToeTip + 100086: Left5thMetatarsalHead + 100088: LeftAcromion + 100090: LeftAnteroSuperiorIliacSpine + 100092: LeftArm + 100094: LeftCalcaneous + 100096: LeftFibulaHead + 100098: LeftFifthMetacarpalHead + 100100: LeftFinger1Distal + 100102: LeftFinger1Metacarpal + 100104: LeftFinger1Proximal + 100106: LeftFinger1Tip + 100108: LeftFinger2Distal + 100110: LeftFinger2Medial + 100112: LeftFinger2Metacarpal + 100114: LeftFinger2Proximal + 100116: LeftFinger2Tip + 100118: LeftFinger3Distal + 100120: LeftFinger3Medial + 100122: LeftFinger3Metacarpal + 100124: LeftFinger3Proximal + 100126: LeftFinger3Tip + 100128: LeftFinger4Distal + 100130: LeftFinger4Medial + 100132: LeftFinger4Metacarpal + 100134: LeftFinger4Proximal + 100136: LeftFinger4Tip + 100138: LeftFinger5Distal + 100140: LeftFinger5Medial + 100142: LeftFinger5Metacarpal + 100144: LeftFinger5Proximal + 100146: LeftFinger5Tip + 100148: LeftFoot + 100150: LeftForeArm + 100152: LeftGreaterTrochanter + 100154: LeftHand + 100156: LeftHEEL + 100158: LeftLateralFemoralEpicondyle + 100160: LeftLateralHumeralEpicondyle + 100162: LeftLateralMalleolus + 100164: LeftMedialFemoralEpicondyle + 100166: LeftMedialHumeralEpicondyle + 100168: LeftOlecranion + 100170: LeftRadialStyloid + 100172: LeftSecondMetacarpalHead + 100174: LeftShin + 100176: LeftShoulder + 100178: LeftSphyrion + 100180: LeftThigh + 100182: LeftThirdFingerTip + 100184: LeftTibialeHead + 100186: LeftToe + 100188: LeftToeTip + 100190: LeftUlnarStyloid + 100192: MidpointPosteroSuperiorIliacSpines + 100194: Neck + 100196: newton + 100198: newtonalpha_mass + 100200: Occiput + 100202: Point001 + 100204: Point002 + 100206: RA + 100208: Right1stMetatarsalHead + 100210: Right2ndToeTip + 100212: Right5thMetatarsalHead + 100214: RightAcromion + 100216: RightAnteroSuperiorIliacSpine + 100218: RightArm + 100220: RightCalcaneous + 100222: RightFibulaHead + 100224: RightFifthMetacarpalHead + 100226: RightFinger1Distal + 100228: RightFinger1Metacarpal + 100230: RightFinger1Proximal + 100232: RightFinger1Tip + 100234: RightFinger2Distal + 100236: RightFinger2Medial + 100238: RightFinger2Metacarpal + 100240: RightFinger2Proximal + 100242: RightFinger2Tip + 100244: RightFinger3Distal + 100246: RightFinger3Medial + 100248: RightFinger3Metacarpal + 100250: RightFinger3Proximal + 100252: RightFinger3Tip + 100254: RightFinger4Distal + 100256: RightFinger4Medial + 100258: RightFinger4Metacarpal + 100260: RightFinger4Proximal + 100262: RightFinger4Tip + 100264: RightFinger5Distal + 100266: RightFinger5Medial + 100268: RightFinger5Metacarpal + 100270: RightFinger5Proximal + 100272: RightFinger5Tip + 100274: RightFoot + 100276: RightForeArm + 100278: RightGreaterTrochanter + 100280: RightHand + 100282: RightHEEL + 100284: RightLateralFemoralEpicondyle + 100286: RightLateralHumeralEpicondyle + 100288: RightLateralMalleolus + 100290: RightMedialFemoralEpicondyle + 100292: RightMedialHumeralEpicondyle + 100294: RightOlecranion + 100296: RightRadialStyloid + 100298: RightSecondMetacarpalHead + 100300: RightShin + 100302: RightShoulder + 100304: RightSphyrion + 100306: RightThigh + 100308: RightThirdFingerTip + 100310: RightTibialeHead + 100312: RightToe + 100314: RightToeTip + 100316: RightUlnarStyloid + 100318: //RootNode + 100320: Sellion + 100322: SeventhCervicale + 100324: SITBONE + 100326: SkinData_newton + 100328: Spine1 + 100330: Spine2 + 100332: Spine3 + 100334: Spine4 + 100336: Suprasternale + 100338: Symphision + 400000: Base + 400002: Camera001 + 400004: COM_Head + 400006: COM_LeftArm + 400008: COM_LeftFoot + 400010: COM_LeftForeArm + 400012: COM_LeftHand + 400014: COM_LeftShin + 400016: COM_LeftThigh + 400018: COM_Pelvis + 400020: COM_RightArm + 400022: COM_RightFoot + 400024: COM_RightForeArm + 400026: COM_RightHand + 400028: COM_RightShin + 400030: COM_RightThigh + 400032: COM_Thorax + 400034: Head + 400036: HeadTip + 400038: HeadVertex + 400040: Hips + 400042: IMU_0x00 + 400044: IMU_0x01 + 400046: IMU_0x02 + 400048: IMU_0x03 + 400050: IMU_0x20 + 400052: IMU_0x21 + 400054: IMU_0x22 + 400056: IMU_0x23 + 400058: IMU_0x24 + 400060: IMU_0x40 + 400062: IMU_0x60 + 400064: IMU_0x61 + 400066: IMU_0x62 + 400068: IMU_0x63 + 400070: IMU_0x64 + 400072: IMU_0x80 + 400074: IMU_0x81 + 400076: IMU_0x82 + 400078: IMU_0x83 + 400080: LA + 400082: Left1stMetatarsalHead + 400084: Left2ndToeTip + 400086: Left5thMetatarsalHead + 400088: LeftAcromion + 400090: LeftAnteroSuperiorIliacSpine + 400092: LeftArm + 400094: LeftCalcaneous + 400096: LeftFibulaHead + 400098: LeftFifthMetacarpalHead + 400100: LeftFinger1Distal + 400102: LeftFinger1Metacarpal + 400104: LeftFinger1Proximal + 400106: LeftFinger1Tip + 400108: LeftFinger2Distal + 400110: LeftFinger2Medial + 400112: LeftFinger2Metacarpal + 400114: LeftFinger2Proximal + 400116: LeftFinger2Tip + 400118: LeftFinger3Distal + 400120: LeftFinger3Medial + 400122: LeftFinger3Metacarpal + 400124: LeftFinger3Proximal + 400126: LeftFinger3Tip + 400128: LeftFinger4Distal + 400130: LeftFinger4Medial + 400132: LeftFinger4Metacarpal + 400134: LeftFinger4Proximal + 400136: LeftFinger4Tip + 400138: LeftFinger5Distal + 400140: LeftFinger5Medial + 400142: LeftFinger5Metacarpal + 400144: LeftFinger5Proximal + 400146: LeftFinger5Tip + 400148: LeftFoot + 400150: LeftForeArm + 400152: LeftGreaterTrochanter + 400154: LeftHand + 400156: LeftHEEL + 400158: LeftLateralFemoralEpicondyle + 400160: LeftLateralHumeralEpicondyle + 400162: LeftLateralMalleolus + 400164: LeftMedialFemoralEpicondyle + 400166: LeftMedialHumeralEpicondyle + 400168: LeftOlecranion + 400170: LeftRadialStyloid + 400172: LeftSecondMetacarpalHead + 400174: LeftShin + 400176: LeftShoulder + 400178: LeftSphyrion + 400180: LeftThigh + 400182: LeftThirdFingerTip + 400184: LeftTibialeHead + 400186: LeftToe + 400188: LeftToeTip + 400190: LeftUlnarStyloid + 400192: MidpointPosteroSuperiorIliacSpines + 400194: Neck + 400196: newton + 400198: newtonalpha_mass + 400200: Occiput + 400202: Point001 + 400204: Point002 + 400206: RA + 400208: Right1stMetatarsalHead + 400210: Right2ndToeTip + 400212: Right5thMetatarsalHead + 400214: RightAcromion + 400216: RightAnteroSuperiorIliacSpine + 400218: RightArm + 400220: RightCalcaneous + 400222: RightFibulaHead + 400224: RightFifthMetacarpalHead + 400226: RightFinger1Distal + 400228: RightFinger1Metacarpal + 400230: RightFinger1Proximal + 400232: RightFinger1Tip + 400234: RightFinger2Distal + 400236: RightFinger2Medial + 400238: RightFinger2Metacarpal + 400240: RightFinger2Proximal + 400242: RightFinger2Tip + 400244: RightFinger3Distal + 400246: RightFinger3Medial + 400248: RightFinger3Metacarpal + 400250: RightFinger3Proximal + 400252: RightFinger3Tip + 400254: RightFinger4Distal + 400256: RightFinger4Medial + 400258: RightFinger4Metacarpal + 400260: RightFinger4Proximal + 400262: RightFinger4Tip + 400264: RightFinger5Distal + 400266: RightFinger5Medial + 400268: RightFinger5Metacarpal + 400270: RightFinger5Proximal + 400272: RightFinger5Tip + 400274: RightFoot + 400276: RightForeArm + 400278: RightGreaterTrochanter + 400280: RightHand + 400282: RightHEEL + 400284: RightLateralFemoralEpicondyle + 400286: RightLateralHumeralEpicondyle + 400288: RightLateralMalleolus + 400290: RightMedialFemoralEpicondyle + 400292: RightMedialHumeralEpicondyle + 400294: RightOlecranion + 400296: RightRadialStyloid + 400298: RightSecondMetacarpalHead + 400300: RightShin + 400302: RightShoulder + 400304: RightSphyrion + 400306: RightThigh + 400308: RightThirdFingerTip + 400310: RightTibialeHead + 400312: RightToe + 400314: RightToeTip + 400316: RightUlnarStyloid + 400318: //RootNode + 400320: Sellion + 400322: SeventhCervicale + 400324: SITBONE + 400326: SkinData_newton + 400328: Spine1 + 400330: Spine2 + 400332: Spine3 + 400334: Spine4 + 400336: Suprasternale + 400338: Symphision + 2100000: Hips + 2100002: RKK_Joint + 2100004: Spine + 2100006: Chest + 2100008: Neck + 2100010: Head + 2100012: RightUpperLeg + 2100014: RightLowerLeg + 2100016: RightFoot + 2100018: RightShoulder + 2100020: RightUpperArm + 2100022: RightLowerArm + 2100024: RightHand + 2100026: LeftUpperLeg + 2100028: LeftLowerLeg + 2100030: LeftFoot + 2100032: LeftShoulder + 2100034: LeftUpperArm + 2100036: LeftLowerArm + 2100038: LeftHand + 2100040: No Name + 2300000: SkinData_newton + 3300000: SkinData_newton + 4300000: newton + 4300002: SkinData_newton + 7400000: Take 001 + 9500000: //RootNode + 13700000: newton + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 0.01 + hasPreviousCalculatedGlobalScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftThigh + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightThigh + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShin + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShin + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine1 + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine2 + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToe + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToe + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger1Metacarpal + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger1Proximal + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger1Distal + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger2Proximal + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger2Medial + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger2Distal + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger3Proximal + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger3Medial + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger3Distal + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger4Proximal + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger4Medial + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger4Distal + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger5Proximal + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger5Medial + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFinger5Distal + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger1Metacarpal + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger1Proximal + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger1Distal + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger2Proximal + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger2Medial + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger2Distal + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger3Proximal + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger3Medial + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger3Distal + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger4Proximal + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger4Medial + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger4Distal + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger5Proximal + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger5Medial + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFinger5Distal + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine3 + humanName: UpperChest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: Rokoko_Newton(Clone) + parentName: + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Camera001 + parentName: Rokoko_Newton(Clone) + position: {x: -0.0033928298, y: 0, z: 0} + rotation: {x: 0.00000006657903, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Base + parentName: Rokoko_Newton(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.00000006657903, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: newton + parentName: Base + position: {x: -0.00000031143426, y: 1.0248078, z: -0.00000015258789} + rotation: {x: 0.00000017881393, y: -0.0000007907536, z: 1.4139776e-13, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Hips + parentName: Base + position: {x: -0, y: 0.9399695, z: 0.039482567} + rotation: {x: -0.0000002225253, y: -4.7116753e-14, z: 0.000000043711413, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftAnteroSuperiorIliacSpine + parentName: Hips + position: {x: -0.11200134, y: 0.07642166, z: 0.0383786} + rotation: {x: 0.06961594, y: 0.70367146, z: 0.069615565, w: 0.70367163} + scale: {x: 1, y: 1, z: 1} + - name: COM_Pelvis + parentName: Hips + position: {x: -0.0000003218651, y: 0.05875464, z: -0.041636884} + rotation: {x: 0.06961594, y: 0.70367146, z: 0.069615565, w: 0.70367163} + scale: {x: 0.14199997, y: 0.14199997, z: 0.14199996} + - name: RightAnteroSuperiorIliacSpine + parentName: Hips + position: {x: 0.11200065, y: 0.07642166, z: 0.03837868} + rotation: {x: 0.06961594, y: 0.70367146, z: 0.069615565, w: 0.70367163} + scale: {x: 1, y: 1, z: 1} + - name: SITBONE + parentName: Hips + position: {x: -0.0000004196167, y: -0.05357254, z: -0.017100388} + rotation: {x: 0.06961594, y: 0.70367146, z: 0.069615565, w: 0.70367163} + scale: {x: 0.09400003, y: 0.09400003, z: 0.094} + - name: Symphision + parentName: Hips + position: {x: -0.00000045776366, y: -0.004967117, z: 0.06800291} + rotation: {x: 0.06961594, y: 0.70367146, z: 0.069615565, w: 0.70367163} + scale: {x: 0.09400003, y: 0.09400003, z: 0.094} + - name: MidpointPosteroSuperiorIliacSpines + parentName: Hips + position: {x: -0.00000030517577, y: 0.0982505, z: -0.08885374} + rotation: {x: 0.06961594, y: 0.70367146, z: 0.069615565, w: 0.70367163} + scale: {x: 0.09400003, y: 0.09400003, z: 0.094} + - name: IMU_0x00 + parentName: Hips + position: {x: -0.1423971, y: 0.07453018, z: -0.06668468} + rotation: {x: 0.0060633793, y: 0.514276, z: -0.15004764, w: 0.844375} + scale: {x: 1, y: 1, z: 1} + - name: IMU_0x80 + parentName: Hips + position: {x: 0.1423971, y: 0.07453018, z: -0.06668468} + rotation: {x: 0.0060632997, y: -0.51427597, z: 0.15004756, w: 0.844375} + scale: {x: 1, y: 1, z: 1} + - name: Spine1 + parentName: Hips + position: {x: -0.00000031123975, y: 0.084838405, z: -0.039482705} + rotation: {x: 9.2843864e-14, y: -0.00000047683713, z: 1, w: -0.00000007549791} + scale: {x: 1, y: 1, z: 1} + - name: Spine2 + parentName: Spine1 + position: {x: -0.000000011917327, y: -0.07549995, z: -0.000000042915342} + rotation: {x: -0, y: -0, z: 4.42714e-20, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Spine3 + parentName: Spine2 + position: {x: -0.000000010881431, y: -0.07550003, z: -0.0000000495345} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: IMU_0x60 + parentName: Spine3 + position: {x: -0.105044916, y: -0.078868486, z: -0.08805051} + rotation: {x: 0.14042684, y: 0.21850036, z: -0.04735148, w: 0.9645184} + scale: {x: 0.99999994, y: 0.99999976, z: 1.0000001} + - name: IMU_0x20 + parentName: Spine3 + position: {x: 0.105044276, y: -0.078868486, z: -0.08805051} + rotation: {x: 0.14042687, y: -0.21850032, z: 0.047351435, w: 0.9645184} + scale: {x: 0.99999994, y: 0.99999994, z: 1} + - name: COM_Thorax + parentName: Spine3 + position: {x: -0.0010021355, y: -0.14566872, z: -0.00000045776366} + rotation: {x: -5.133922e-24, y: -0.000000041921655, z: -1.2246469e-16, w: 1} + scale: {x: 0.333, y: 0.333, z: 0.333} + - name: Spine4 + parentName: Spine3 + position: {x: -0.00000033050776, y: -0.12748733, z: -0.00000007602211} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: SeventhCervicale + parentName: Spine4 + position: {x: -0.000000057220447, y: -0.2292694, z: -0.07214441} + rotation: {x: 0.7071072, y: -0.00000065909836, z: -0.70710635, w: -0.00000065909916} + scale: {x: 1, y: 1, z: 1} + - name: Suprasternale + parentName: Spine4 + position: {x: 0.000000019073504, y: -0.16413909, z: 0.05110153} + rotation: {x: 0.7071072, y: -0.00000065909836, z: -0.70710635, w: -0.00000065909916} + scale: {x: 1, y: 1, z: 1} + - name: Neck + parentName: Spine4 + position: {x: -0.00000004156294, y: -0.20150344, z: -0.00000040883606} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Head + parentName: Neck + position: {x: -0.00000011498934, y: -0.11100937, z: 0.000000033953548} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: HeadTip + parentName: Head + position: {x: -0.000000025448134, y: -0.16853577, z: -0.00000010733907} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: HeadVertex + parentName: Head + position: {x: -0.00000018350711, y: -0.16770478, z: 0.00000007252012} + rotation: {x: 0.7071069, y: -0.00000047078476, z: -0.7071067, w: -0.00000047078487} + scale: {x: 1, y: 1, z: 1} + - name: Occiput + parentName: Head + position: {x: 3.6379787e-14, y: 0.009298248, z: -0.07312792} + rotation: {x: 0.7071069, y: -0.00000047078476, z: -0.7071067, w: -0.00000047078487} + scale: {x: 1, y: 1, z: 1} + - name: Sellion + parentName: Head + position: {x: -0, y: -0.0638295, z: 0.104983106} + rotation: {x: 0.7071069, y: -0.00000047078476, z: -0.7071067, w: -0.00000047078487} + scale: {x: 1, y: 1, z: 1} + - name: COM_Head + parentName: Head + position: {x: -0.000000059604606, y: -0.039730653, z: -0.00609375} + rotation: {x: 0.7071069, y: -0.000000494324, z: -0.7071067, w: -0.0000004943241} + scale: {x: 0.06699997, y: 0.06699997, z: 0.06699997} + - name: IMU_0x40 + parentName: Head + position: {x: -0, y: -0.036019135, z: -0.07326601} + rotation: {x: 0.22826454, y: -1.0629396e-10, z: -4.5336743e-10, w: 0.97359914} + scale: {x: 1, y: 0.9999999, z: 1} + - name: RightShoulder + parentName: Spine4 + position: {x: -0.070000015, y: -0.123680726, z: 0.019037798} + rotation: {x: 0.00000053245435, y: -0.00000008007794, z: -0.7071075, w: 0.7071062} + scale: {x: 1.0000005, y: 1.0000005, z: 1} + - name: RightAcromion + parentName: RightShoulder + position: {x: 0.034446564, y: -0.13607804, z: -0.046092108} + rotation: {x: 0.5000005, y: 0.4999995, z: -0.5000001, w: 0.4999999} + scale: {x: 1, y: 0.99999976, z: 0.99999976} + - name: IMU_0x61 + parentName: RightShoulder + position: {x: 0.07022568, y: -0.069560505, z: -0.09810438} + rotation: {x: -0.15355799, y: -0.33637244, z: -0.07551738, w: 0.92605114} + scale: {x: 1, y: 0.9999997, z: 1.0000002} + - name: RightArm + parentName: RightShoulder + position: {x: -0, y: -0.13607779, z: 0.000000114440915} + rotation: {x: 0.0000011046799, y: -0.70710677, z: 0.000000027808795, w: 0.7071069} + scale: {x: 1.0000001, y: 0.9999997, z: 0.9999998} + - name: COM_RightArm + parentName: RightArm + position: {x: 0.005013599, y: -0.11799377, z: 0.0069920346} + rotation: {x: -0.00000023841898, y: 1, z: -0.00000047683733, w: -0.00000079894824} + scale: {x: 0.023999987, y: 0.023999989, z: 0.023999985} + - name: RightLateralHumeralEpicondyle + parentName: RightArm + position: {x: -0.000000022649765, y: -0.25799227, z: -0.04100189} + rotation: {x: -0.0000002384192, y: 1, z: -0.00000059604673, w: -0.0000010652643} + scale: {x: 1, y: 1, z: 1} + - name: RightMedialHumeralEpicondyle + parentName: RightArm + position: {x: 0.00000017523764, y: -0.26400834, z: 0.041002672} + rotation: {x: -0.0000002384192, y: 1, z: -0.00000059604673, w: -0.0000010652643} + scale: {x: 1, y: 1, z: 1} + - name: RA + parentName: RightArm + position: {x: -0.02501334, y: 0.054010265, z: -0.0030080986} + rotation: {x: -0.0000002384192, y: 1, z: -0.00000059604673, w: -0.0000010652643} + scale: {x: 0.27099997, y: 0.2710001, z: 0.27099997} + - name: IMU_0x62 + parentName: RightArm + position: {x: -0.02751419, y: -0.14396355, z: -0.02966462} + rotation: {x: 0.056332603, y: -0.059736725, z: 0.07541033, w: 0.9937663} + scale: {x: 1.0000002, y: 0.99999976, z: 1.0000001} + - name: RightForeArm + parentName: RightArm + position: {x: 0.00000011563301, y: -0.27102154, z: 0.0000004863739} + rotation: {x: -0.000000042146834, y: -0, z: 0.000000042146834, w: 1} + scale: {x: 1.0000004, y: 1, z: 1.0000004} + - name: RightUlnarStyloid + parentName: RightForeArm + position: {x: -0.032998085, y: -0.28396896, z: 0.00000015258789} + rotation: {x: 0.00000033093082, y: 0.70710564, z: -0.00000033093082, w: 0.7071079} + scale: {x: 0.99999994, y: 1, z: 0.9999999} + - name: RightRadialStyloid + parentName: RightForeArm + position: {x: 0.032997478, y: -0.2839692, z: 0} + rotation: {x: 0.00000033093082, y: 0.70710564, z: -0.00000033093082, w: 0.7071079} + scale: {x: 0.99999994, y: 1, z: 0.9999999} + - name: RightOlecranion + parentName: RightForeArm + position: {x: -0.021989126, y: 0.014030075, z: -0.008009033} + rotation: {x: 0.00000033093082, y: 0.70710564, z: -0.00000033093082, w: 0.7071079} + scale: {x: 0.99999994, y: 1, z: 0.9999999} + - name: COM_RightForeArm + parentName: RightForeArm + position: {x: 0.0039903256, y: -0.11798955, z: 0.0030001067} + rotation: {x: 0.00000072694775, y: 0.70710576, z: 0.00000016200597, w: 0.70710784} + scale: {x: 0.017000016, y: 0.017000018, z: 0.01700002} + - name: IMU_0x63 + parentName: RightForeArm + position: {x: -0.0016897583, y: -0.1777256, z: -0.045803834} + rotation: {x: -0.0011002737, y: -0.3175501, z: 0.13212185, w: 0.93899125} + scale: {x: 1, y: 0.99999994, z: 1.0000001} + - name: RightHand + parentName: RightForeArm + position: {x: -0.00000046014785, y: -0.28299984, z: 0.00000045776366} + rotation: {x: -5.6843412e-14, y: -1.7763532e-15, z: 0.000000042146834, w: 1} + scale: {x: 1.0000005, y: 1, z: 1.0000008} + - name: RightFifthMetacarpalHead + parentName: RightHand + position: {x: -0.045300998, y: -0.07497856, z: 0.007988109} + rotation: {x: 0.0000001785093, y: 0.76604605, z: -0.0000015009489, w: 0.6427857} + scale: {x: 1, y: 1, z: 1} + - name: RightSecondMetacarpalHead + parentName: RightHand + position: {x: 0.0453012, y: -0.085979, z: -0.007987785} + rotation: {x: 0.0000001785093, y: 0.76604605, z: -0.0000015009489, w: 0.6427857} + scale: {x: 1, y: 1, z: 1} + - name: RightThirdFingerTip + parentName: RightHand + position: {x: 0.0009847427, y: -0.18897857, z: -0.00017348288} + rotation: {x: 0.00000028452268, y: 0.76604605, z: -0.000001562881, w: 0.6427857} + scale: {x: 1, y: 1, z: 1} + - name: COM_RightHand + parentName: RightHand + position: {x: 0.0071246526, y: -0.067978546, z: 0.005851822} + rotation: {x: 0.7071075, y: -0.70710605, z: 0.00000015737727, w: 0.00000003093653} + scale: {x: 0.0059999814, y: 0.0059999824, z: 0.0059999814} + - name: IMU_0x64 + parentName: RightHand + position: {x: 0.00928009, y: -0.06782341, z: -0.034534376} + rotation: {x: 0.0000000037252903, y: -0, z: -0, w: 1} + scale: {x: 1.0000002, y: 0.9999998, z: 1.0000001} + - name: RightFinger4Metacarpal + parentName: RightHand + position: {x: -0.005475466, y: -0.02742981, z: 0.0010297012} + rotation: {x: -0.0000008851789, y: -0.0000007711869, z: -0.087154806, w: 0.99619484} + scale: {x: 1.0000002, y: 0.99999994, z: 1.0000004} + - name: RightFinger4Proximal + parentName: RightFinger4Metacarpal + position: {x: -0.0000003528595, y: -0.05032509, z: 0.000000019073486} + rotation: {x: 0.00000054928745, y: 0.0000007417998, z: 0.08715556, w: 0.9961948} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000005} + - name: RightFinger4Medial + parentName: RightFinger4Proximal + position: {x: 0.000000047683713, y: -0.04300003, z: 0.000000095367426} + rotation: {x: 0.00000004214677, y: -1.1368681e-13, z: 0.000000037252487, w: 1} + scale: {x: 1.0000004, y: 1.0000001, z: 1.0000005} + - name: RightFinger4Distal + parentName: RightFinger4Medial + position: {x: -0.000000026226044, y: -0.027731704, z: 0.00000017166137} + rotation: {x: 0.000000042146763, y: -0.00000011920932, z: 0.00000008195643, + w: 1} + scale: {x: 1.0000006, y: 1.0000007, z: 1.0000008} + - name: RightFinger4Tip + parentName: RightFinger4Distal + position: {x: 0.000000028610229, y: -0.026999816, z: -0.00000034332274} + rotation: {x: 0.00000011920929, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: RightFinger5Metacarpal + parentName: RightHand + position: {x: -0.014876098, y: -0.02487854, z: 0.001029644} + rotation: {x: -0.0000011598866, y: -0.00000038011135, z: -0.17364717, w: 0.98480797} + scale: {x: 1.0000004, y: 1.0000005, z: 1.0000005} + - name: RightFinger5Proximal + parentName: RightFinger5Metacarpal + position: {x: -0.00000034332274, y: -0.04746277, z: -0.000000019073486} + rotation: {x: 0.0000008278341, y: 0.00000032156098, z: 0.17364791, w: 0.98480785} + scale: {x: 0.9999993, y: 0.99999976, z: 1} + - name: RightFinger5Medial + parentName: RightFinger5Proximal + position: {x: 0.0000000047683715, y: -0.034999922, z: 0.00000032424927} + rotation: {x: 0.000000042146826, y: -5.6843405e-14, z: 0.0000000447032, w: 1} + scale: {x: 1, y: 0.99999994, z: 1} + - name: RightFinger5Distal + parentName: RightFinger5Medial + position: {x: -0.000000044107438, y: -0.021999815, z: -0.00000018119812} + rotation: {x: 0.00000012644055, y: -1.4273656e-13, z: 0.000000119209275, w: 1} + scale: {x: 1.0000001, y: 1.0000002, z: 1.0000004} + - name: RightFinger5Tip + parentName: RightFinger5Distal + position: {x: -0.00000014781952, y: -0.022409286, z: -0.0000004196167} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 0.99999994, y: 0.99999994, z: 1} + - name: RightFinger3Metacarpal + parentName: RightHand + position: {x: 0.0054473067, y: -0.027674254, z: 0.0010297965} + rotation: {x: -0.00000088508386, y: 6.5725196e-14, z: 0.00000021073382, w: 1} + scale: {x: 1.0000002, y: 1.0000001, z: 1.0000002} + - name: RightFinger3Proximal + parentName: RightFinger3Metacarpal + position: {x: -0.00000027418136, y: -0.05364952, z: 0.000000114440915} + rotation: {x: 0.00000046361512, y: -5.666578e-13, z: 0.0000004636155, w: 1} + scale: {x: 0.99999994, y: 0.99999994, z: 1.0000001} + - name: RightFinger3Medial + parentName: RightFinger3Proximal + position: {x: 0.000000007152557, y: -0.04699989, z: 0.000000019073486} + rotation: {x: 0.00000008429364, y: -1.0302868e-13, z: 0.00000008429378, w: 1} + scale: {x: 0.99999994, y: 0.99999994, z: 1} + - name: RightFinger3Distal + parentName: RightFinger3Medial + position: {x: -0.000000009536743, y: -0.030999908, z: 0.0000001335144} + rotation: {x: 0.000000042146834, y: -5.151434e-14, z: 0.000000042146834, w: 1} + scale: {x: 1.0000002, y: 1.0000004, z: 1.0000004} + - name: RightFinger3Tip + parentName: RightFinger3Distal + position: {x: -0.000000166893, y: -0.029982146, z: -0.00000014305114} + rotation: {x: 0.00000035762798, y: -1.5632386e-14, z: -0.000000043711307, w: 1} + scale: {x: 0.9999998, y: 0.9999998, z: 1} + - name: RightFinger1Metacarpal + parentName: RightHand + position: {x: 0.02784873, y: -0.0207798, z: 0.0010295295} + rotation: {x: -0.12815903, y: 0.36039925, z: -0.3151592, w: -0.8685404} + scale: {x: 1.0000006, y: 1.0000005, z: 1.0000008} + - name: RightFinger1Proximal + parentName: RightFinger1Metacarpal + position: {x: -0, y: -0.039891127, z: 0.00000015258789} + rotation: {x: -0.02143035, y: 0.0000011026856, z: -0.021429535, w: 0.9995406} + scale: {x: 1.0000005, y: 1.000001, z: 1.0000015} + - name: RightFinger1Distal + parentName: RightFinger1Proximal + position: {x: 0.000000085830685, y: -0.030277861, z: -0.00000015258789} + rotation: {x: 0.00000014901158, y: 0.0000000064350147, z: 0.00000027338817, + w: 1} + scale: {x: 1.0000005, y: 1, z: 1.0000005} + - name: RightFinger1Tip + parentName: RightFinger1Distal + position: {x: 0.000000085830685, y: -0.034589767, z: -0.00000047683716} + rotation: {x: 0.000002663161, y: -0.000000111758816, z: 2.9750925e-13, w: 1} + scale: {x: 1.0000005, y: 1.0000002, z: 0.9999998} + - name: RightFinger2Metacarpal + parentName: RightHand + position: {x: 0.016034164, y: -0.026455687, z: 0.0010299683} + rotation: {x: 0.0000009820359, y: 0.0000012553708, z: -0.08715682, w: -0.99619466} + scale: {x: 1.0000007, y: 1.0000004, z: 1.0000007} + - name: RightFinger2Proximal + parentName: RightFinger2Metacarpal + position: {x: -0.0000003814697, y: -0.054138336, z: 0.000000019073486} + rotation: {x: -0.0000006461448, y: -0.0000012847571, z: 0.087156065, w: -0.9961947} + scale: {x: 1.0000005, y: 1.0000002, z: 1.0000006} + - name: RightFinger2Medial + parentName: RightFinger2Proximal + position: {x: -0.000000023841856, y: -0.044999693, z: -0.00000014305114} + rotation: {x: -0, y: -0, z: 0.000000007449749, w: 1} + scale: {x: 1.0000005, y: 1.0000002, z: 1.0000007} + - name: RightFinger2Distal + parentName: RightFinger2Medial + position: {x: -0.0000000047683715, y: -0.027684936, z: 0.00000015258789} + rotation: {x: 0.000000042146826, y: -1.140008e-13, z: 0.000000044703476, w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + - name: RightFinger2Tip + parentName: RightFinger2Distal + position: {x: -0.00000013828277, y: -0.0271315, z: -0.0000003147125} + rotation: {x: 0.00000011984037, y: 0.00000023841856, z: -0.00000009416588, w: 1} + scale: {x: 0.99999994, y: 0.99999994, z: 1} + - name: LeftShoulder + parentName: Spine4 + position: {x: 0.06999998, y: -0.123680726, z: 0.019037932} + rotation: {x: -0.00000019527988, y: 0.00000025709724, z: -0.7071068, w: -0.7071068} + scale: {x: 0.9999997, y: 0.9999997, z: 1} + - name: LeftAcromion + parentName: LeftShoulder + position: {x: -0.03444702, y: -0.136078, z: -0.04609241} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: IMU_0x21 + parentName: LeftShoulder + position: {x: -0.07022568, y: -0.06956057, z: -0.09810452} + rotation: {x: -0.15355802, y: 0.3363725, z: 0.0755174, w: 0.9260511} + scale: {x: 1.0000002, y: 1, z: 0.9999999} + - name: LeftArm + parentName: LeftShoulder + position: {x: -0, y: -0.13607779, z: 0} + rotation: {x: 0.0000006474181, y: 0.7071068, z: 0.00000046860413, w: 0.7071068} + scale: {x: 0.99999994, y: 1, z: 1} + - name: LeftMedialHumeralEpicondyle + parentName: LeftArm + position: {x: -0.00000026583672, y: -0.26400834, z: 0.041002806} + rotation: {x: 0, y: -0, z: -0.000000043711392, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftLateralHumeralEpicondyle + parentName: LeftArm + position: {x: -0.00000016331673, y: -0.25799227, z: -0.041001882} + rotation: {x: 0, y: -0, z: -0.000000043711392, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LA + parentName: LeftArm + position: {x: 0.02501354, y: 0.054010257, z: -0.0030080986} + rotation: {x: 0, y: -0, z: -0.000000043711392, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: COM_LeftArm + parentName: LeftArm + position: {x: -0.005013504, y: -0.117993936, z: 0.0069920346} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 0.024000049, y: 0.023999993, z: 0.023999866} + - name: IMU_0x22 + parentName: LeftArm + position: {x: 0.027514229, y: -0.14396347, z: -0.02966467} + rotation: {x: 0.056332607, y: 0.05973677, z: -0.075410314, w: 0.9937663} + scale: {x: 1, y: 1.0000002, z: 1} + - name: LeftForeArm + parentName: LeftArm + position: {x: -0.00000078201293, y: -0.2710215, z: 0.00000030517577} + rotation: {x: -0.00000023180766, y: -0, z: -0.00000048468866, w: 1} + scale: {x: 1.0000005, y: 1.0000005, z: 1.0000004} + - name: COM_LeftForeArm + parentName: LeftForeArm + position: {x: -0.0039894865, y: -0.1179895, z: 0.0029999542} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 0.01700002, y: 0.016999902, z: 0.017000077} + - name: LeftUlnarStyloid + parentName: LeftForeArm + position: {x: 0.032998968, y: -0.2839689, z: 0} + rotation: {x: 0.000000043711392, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftRadialStyloid + parentName: LeftForeArm + position: {x: -0.03299661, y: -0.28396925, z: 0} + rotation: {x: 0.000000043711392, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftOlecranion + parentName: LeftForeArm + position: {x: 0.021989634, y: 0.014030113, z: -0.008008919} + rotation: {x: 0.000000043711392, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: IMU_0x23 + parentName: LeftForeArm + position: {x: 0.0016905213, y: -0.17772521, z: -0.045804136} + rotation: {x: -0.0011003271, y: 0.31755, z: -0.13212176, w: 0.9389913} + scale: {x: 1, y: 1, z: 0.99999994} + - name: LeftHand + parentName: LeftForeArm + position: {x: 0.00000049471856, y: -0.28299996, z: 0.000000114440915} + rotation: {x: -0.00000021073424, y: -1.1191046e-13, z: 0.000000042146862, w: 1} + scale: {x: 1.0000005, y: 1.0000005, z: 1.0000005} + - name: COM_LeftHand + parentName: LeftHand + position: {x: -0.0071236226, y: -0.06797841, z: 0.0058525084} + rotation: {x: 0.7071064, y: 0.7071072, z: -0.00000080348474, w: -0.0000015567392} + scale: {x: 0.0060000424, y: 0.0060001006, z: 0.0060000406} + - name: LeftThirdFingerTip + parentName: LeftHand + position: {x: -0.0009836518, y: -0.1889785, z: -0.00017331123} + rotation: {x: 0.6427869, y: 0.0000014222223, z: 0.76604503, w: -0.0000007406124} + scale: {x: -0.08, y: -0.07999995, z: -0.07999997} + - name: LeftSecondMetacarpalHead + parentName: LeftHand + position: {x: -0.04530025, y: -0.085979, z: -0.007987385} + rotation: {x: -1.9106855e-15, y: -0.000000043711392, z: -0.000000043711385, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftFifthMetacarpalHead + parentName: LeftHand + position: {x: 0.045301974, y: -0.07497833, z: 0.007988129} + rotation: {x: -1.9106855e-15, y: -0.000000043711392, z: -0.000000043711385, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: IMU_0x24 + parentName: LeftHand + position: {x: -0.009279337, y: -0.06782325, z: -0.034534395} + rotation: {x: 0.00000047683716, y: -0.000000029802326, z: -0.0000000074505664, + w: 1} + scale: {x: 1, y: 0.9999998, z: 0.9999998} + - name: LeftFinger1Metacarpal + parentName: LeftHand + position: {x: -0.027848657, y: -0.020779876, z: 0.0010298156} + rotation: {x: 0.12815799, y: 0.3603993, z: -0.31515694, w: 0.8685413} + scale: {x: 1.0000013, y: 1.0000011, z: 1.0000012} + - name: LeftFinger1Proximal + parentName: LeftFinger1Metacarpal + position: {x: -0.00000015258789, y: -0.039891053, z: 0.000000076293944} + rotation: {x: -0.021426588, y: -0.0000016689295, z: 0.021428023, w: 0.99954075} + scale: {x: 1.0000008, y: 1.0000013, z: 1.0000013} + - name: LeftFinger1Distal + parentName: LeftFinger1Proximal + position: {x: -0.00000014305114, y: -0.030278014, z: -0.000000076293944} + rotation: {x: -0.000000029802315, y: -0.000000007450579, z: 0.0000000907639, + w: 1} + scale: {x: 1.0000004, y: 1.0000002, z: 1.0000004} + - name: LeftFinger1Tip + parentName: LeftFinger1Distal + position: {x: -0.000000085830685, y: -0.03458969, z: -0.00000023841858} + rotation: {x: 0.000003163015, y: 0.00000023841736, z: -0.0000003894151, w: 1} + scale: {x: 0.9999999, y: 0.99999994, z: 1} + - name: LeftFinger2Metacarpal + parentName: LeftHand + position: {x: -0.016034165, y: -0.026455687, z: 0.0010298347} + rotation: {x: -0.00000036909626, y: -0.00000014024367, z: -0.087156534, w: 0.99619466} + scale: {x: 1.0000008, y: 1.0000007, z: 1.0000005} + - name: LeftFinger2Proximal + parentName: LeftFinger2Metacarpal + position: {x: 0.00000028610228, y: -0.054138184, z: -0.0000001335144} + rotation: {x: 0.00000043207615, y: 0.00000014575335, z: 0.087157056, w: 0.9961946} + scale: {x: 1.0000001, y: 1.0000002, z: 1.0000002} + - name: LeftFinger2Medial + parentName: LeftFinger2Proximal + position: {x: -0.000000019073486, y: -0.04499977, z: -0.000000019073486} + rotation: {x: 0.00000031610136, y: 0.000000059604602, z: -0.000000014901259, + w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + - name: LeftFinger2Distal + parentName: LeftFinger2Medial + position: {x: 0.00000015258789, y: -0.027684936, z: 0.000000019073486} + rotation: {x: 0.00000016858742, y: -0.000000059604645, z: 0.00000002980237, + w: 1} + scale: {x: 0.9999997, y: 0.9999997, z: 0.99999964} + - name: LeftFinger2Tip + parentName: LeftFinger2Distal + position: {x: 0.0000003814697, y: -0.027131423, z: -0.0000004673004} + rotation: {x: 0.00000023841818, y: -0.0000016689302, z: -0.00000023841818, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftFinger3Metacarpal + parentName: LeftHand + position: {x: -0.00544731, y: -0.027674254, z: 0.001029663} + rotation: {x: -0.0000003161013, y: -2.0516919e-13, z: 0.00000014751403, w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1.0000001} + - name: LeftFinger3Proximal + parentName: LeftFinger3Metacarpal + position: {x: 0.00000030517577, y: -0.05364952, z: 0.000000019073486} + rotation: {x: 0.0000004214684, y: 2.5224264e-13, z: -0.00000016858748, w: 1} + scale: {x: 1, y: 1.0000004, z: 1} + - name: LeftFinger3Medial + parentName: LeftFinger3Proximal + position: {x: -0.0000000023841857, y: -0.046999816, z: -0.000000333786} + rotation: {x: 0.00000035824823, y: 1.447731e-13, z: 0.00000006322019, w: 1} + scale: {x: 1, y: 1.0000005, z: 1.0000004} + - name: LeftFinger3Distal + parentName: LeftFinger3Medial + position: {x: 0.00000007867813, y: -0.030999908, z: -0.000000009536743} + rotation: {x: -5.6843412e-14, y: -3.5527404e-15, z: -0.00000016858739, w: 1} + scale: {x: 1, y: 1.0000005, z: 1.0000005} + - name: LeftFinger3Tip + parentName: LeftFinger3Distal + position: {x: 0.00000016212464, y: -0.029982222, z: -0.00000015258789} + rotation: {x: 0.00000023841858, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftFinger4Metacarpal + parentName: LeftHand + position: {x: 0.005475464, y: -0.027429733, z: 0.0010298347} + rotation: {x: -0.0000007267241, y: -0.00000036639545, z: 0.087154776, w: 0.9961948} + scale: {x: 1.0000007, y: 1.0000008, z: 1.0000006} + - name: LeftFinger4Proximal + parentName: LeftFinger4Metacarpal + position: {x: 0.0000003147125, y: -0.05032509, z: 0.00000028610228} + rotation: {x: 0.00000085268397, y: 0.00000035537465, z: -0.087153934, w: 0.99619484} + scale: {x: 1.0000002, y: 1.0000005, z: 1.0000005} + - name: LeftFinger4Medial + parentName: LeftFinger4Proximal + position: {x: -0, y: -0.04300003, z: -0.00000012397766} + rotation: {x: -0.000000063220334, y: -0, z: 0.000000022351433, w: 1} + scale: {x: 0.99999976, y: 0.9999997, z: 0.9999998} + - name: LeftFinger4Distal + parentName: LeftFinger4Medial + position: {x: 0.000000028312206, y: -0.027731856, z: 0.00000012397766} + rotation: {x: -0, y: 3.4074045e-14, z: -0.00000008940696, w: 1} + scale: {x: 1.0000005, y: 1.0000005, z: 1.0000005} + - name: LeftFinger4Tip + parentName: LeftFinger4Distal + position: {x: 0.000000076293944, y: -0.026999893, z: -0.00000044822693} + rotation: {x: 0.00000031391647, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftFinger5Metacarpal + parentName: LeftHand + position: {x: 0.014876098, y: -0.02487854, z: 0.0010296821} + rotation: {x: -0.0000011177058, y: -0.0000009709163, z: 0.17364742, w: 0.9848079} + scale: {x: 1.0000008, y: 1.0000011, z: 1.0000006} + - name: LeftFinger5Proximal + parentName: LeftFinger5Metacarpal + position: {x: 0.0000003147125, y: -0.04746292, z: 0.000000019073486} + rotation: {x: 0.0000013875522, y: 0.0000008022859, z: -0.17364651, w: 0.9848081} + scale: {x: 1.0000002, y: 1.0000001, z: 1.0000005} + - name: LeftFinger5Medial + parentName: LeftFinger5Proximal + position: {x: 0.000000085830685, y: -0.035, z: 0.00000018119812} + rotation: {x: 0.00000012644054, y: 0.000000059604574, z: 0.00000016391157, w: 1} + scale: {x: 0.9999996, y: 0.9999999, z: 0.9999997} + - name: LeftFinger5Distal + parentName: LeftFinger5Medial + position: {x: -0.000000076293944, y: -0.021999815, z: -0.00000015258789} + rotation: {x: 0.00000018966094, y: -1.0302866e-13, z: -0.000000059604574, w: 1} + scale: {x: 1.0000001, y: 1, z: 1} + - name: LeftFinger5Tip + parentName: LeftFinger5Distal + position: {x: 0.00000014781952, y: -0.022409286, z: 0.000000019073486} + rotation: {x: -0.00000023841858, y: -0.00000007549788, z: -0.000000075497915, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: RightThigh + parentName: Hips + position: {x: 0.08099951, y: 0, z: -0.0000000023841857} + rotation: {x: 0.00000011098625, y: -0.7071066, z: -0.000000110986186, w: 0.70710695} + scale: {x: 0.9999995, y: 1, z: 0.9999995} + - name: RightMedialFemoralEpicondyle + parentName: RightThigh + position: {x: 0.00000013589859, y: -0.43200004, z: 0.056998137} + rotation: {x: -0.00000013315805, y: 1, z: -8.5517066e-16, w: -0.0000000059623755} + scale: {x: 1, y: 1, z: 1} + - name: RightLateralFemoralEpicondyle + parentName: RightThigh + position: {x: 0.0000001335144, y: -0.43100202, z: -0.056999948} + rotation: {x: -0.00000013315805, y: 1, z: -8.5517066e-16, w: -0.0000000059623755} + scale: {x: 1, y: 1, z: 1} + - name: RightGreaterTrochanter + parentName: RightThigh + position: {x: -0.039743975, y: 0.0060004424, z: -0.10099999} + rotation: {x: -0.00000013315805, y: 1, z: -8.5517066e-16, w: -0.0000000059623755} + scale: {x: 1, y: 1, z: 1} + - name: COM_RightThigh + parentName: RightThigh + position: {x: -0.01814393, y: -0.18200009, z: -0.013999939} + rotation: {x: -0.00000013315808, y: 1, z: 0.00000013315808, w: 0.00000023841856} + scale: {x: 0.122999996, y: 0.12300001, z: 0.12300002} + - name: IMU_0x81 + parentName: RightThigh + position: {x: 0.0103025185, y: -0.20575629, z: -0.09410194} + rotation: {x: -0.040235978, y: 0.06301143, z: 0.04836623, w: 0.99602777} + scale: {x: 1, y: 0.99999994, z: 0.9999999} + - name: RightShin + parentName: RightThigh + position: {x: 0.00000017166137, y: -0.43200007, z: 0.000000047683713} + rotation: {x: -0.00000004371138, y: -0.00000005960465, z: -7.105428e-15, w: 1} + scale: {x: 0.9999997, y: 1, z: 0.9999997} + - name: RightSphyrion + parentName: RightShin + position: {x: 0.021000648, y: -0.43399593, z: 0.032995056} + rotation: {x: -0.00000013315805, y: 1, z: -0.00000039947417, w: 5.31932e-14} + scale: {x: 1, y: 0.4330001, z: 0.43300006} + - name: RightTibialeHead + parentName: RightShin + position: {x: 0.021000508, y: -0.027019156, z: 0.042001035} + rotation: {x: -0.00000013315805, y: 1, z: -0.00000039947417, w: 5.31932e-14} + scale: {x: 1, y: 1, z: 1} + - name: RightLateralMalleolus + parentName: RightShin + position: {x: -0.021000342, y: -0.43300015, z: -0.032994185} + rotation: {x: -0.00000013315805, y: 1, z: -0.00000039947417, w: 5.31932e-14} + scale: {x: 1, y: 0.4330001, z: 0.43300006} + - name: RightFibulaHead + parentName: RightShin + position: {x: 0.000000021457671, y: -0.022992324, z: -0.046980493} + rotation: {x: -0.00000013315805, y: 1, z: -0.00000039947417, w: 5.31932e-14} + scale: {x: 1, y: 1, z: 1} + - name: COM_RightShin + parentName: RightShin + position: {x: -0.021000437, y: -0.17800638, z: -0.0029875564} + rotation: {x: -0.00000013315805, y: 1, z: -0.0000002663161, w: 3.5462135e-14} + scale: {x: 0.047999978, y: 0.047999978, z: 0.04799997} + - name: IMU_0x82 + parentName: RightShin + position: {x: 0.038170014, y: -0.21006322, z: 0} + rotation: {x: -0.0846937, y: -0.7760139, z: -0.038128525, w: 0.62383944} + scale: {x: 0.9999998, y: 1, z: 1.0000001} + - name: RightFoot + parentName: RightShin + position: {x: 0.000000102519984, y: -0.4329999, z: -0.00062554836} + rotation: {x: 0.4999999, y: -0.5000001, z: 0.50000006, w: 0.49999994} + scale: {x: 1.0000008, y: 1.0000004, z: 1.0000001} + - name: RightHEEL + parentName: RightFoot + position: {x: 0.000000095367426, y: 0.050186004, z: 0.07496586} + rotation: {x: -0.00000023841858, y: 0, z: -0, w: 1} + scale: {x: 0.26500005, y: 0.26500005, z: 0.265} + - name: RightCalcaneous + parentName: RightFoot + position: {x: -0.006995945, y: 0.05018601, z: 0.0061829565} + rotation: {x: -0.5702422, y: -0.41811895, z: 0.57024264, w: 0.41811934} + scale: {x: 1, y: 1, z: 1} + - name: COM_RightFoot + parentName: RightFoot + position: {x: -0.005988922, y: -0.032092918, z: 0.047852278} + rotation: {x: -0.49999976, y: -0.49999982, z: 0.50000024, w: 0.5000002} + scale: {x: 0.012000026, y: 0.012000022, z: 0.012000024} + - name: Right1stMetatarsalHead + parentName: RightFoot + position: {x: 0.047011074, y: -0.13292049, z: 0.06391615} + rotation: {x: -0.5702422, y: -0.41811895, z: 0.57024264, w: 0.41811934} + scale: {x: 1, y: 1, z: 1} + - name: Right5thMetatarsalHead + parentName: RightFoot + position: {x: -0.059995916, y: -0.11575983, z: 0.058505476} + rotation: {x: -0.5702422, y: -0.41811895, z: 0.57024264, w: 0.41811934} + scale: {x: 1, y: 1, z: 1} + - name: Right2ndToeTip + parentName: RightFoot + position: {x: 0.0010070801, y: -0.20615087, z: 0.074446306} + rotation: {x: -0.5702422, y: -0.41811895, z: 0.57024264, w: 0.41811934} + scale: {x: 1, y: 1, z: 1} + - name: IMU_0x83 + parentName: RightFoot + position: {x: -0.0000000047683715, y: -0.10620308, z: 0.014033507} + rotation: {x: -0.27362692, y: -0.0007550972, z: -0.081129454, w: 0.95840794} + scale: {x: 0.9999998, y: 1, z: 0.9999999} + - name: RightToe + parentName: RightFoot + position: {x: 0.000000019073486, y: -0.13169399, z: 0.0623944} + rotation: {x: -0.0000000745058, y: -0.000000029802319, z: -0.000000029802319, + w: -1} + scale: {x: 1, y: 0.99999976, z: 0.9999998} + - name: RightToeTip + parentName: RightToe + position: {x: -0.000000009536743, y: -0.074456915, z: 0.012571463} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftThigh + parentName: Hips + position: {x: -0.08099951, y: 0, z: 0} + rotation: {x: 0.000000049169003, y: 0.7071066, z: 0.00000017280342, w: 0.70710695} + scale: {x: 0.9999995, y: 1, z: 0.9999995} + - name: COM_LeftThigh + parentName: LeftThigh + position: {x: 0.018143939, y: -0.18200012, z: -0.014000092} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 0.12299989, y: 0.122999795, z: 0.123000056} + - name: LeftGreaterTrochanter + parentName: LeftThigh + position: {x: 0.039743982, y: 0.006000519, z: -0.10099999} + rotation: {x: 0, y: -0, z: -0.00000008742278, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftLateralFemoralEpicondyle + parentName: LeftThigh + position: {x: -0.00000014305114, y: -0.43100202, z: -0.057000026} + rotation: {x: 0, y: -0, z: -0.00000008742278, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftMedialFemoralEpicondyle + parentName: LeftThigh + position: {x: -0.00000014781952, y: -0.432, z: 0.05699806} + rotation: {x: 0, y: -0, z: -0.00000008742278, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: IMU_0x01 + parentName: LeftThigh + position: {x: -0.010302512, y: -0.20575629, z: -0.09410194} + rotation: {x: -0.040235974, y: -0.06301134, z: -0.04836623, w: 0.99602777} + scale: {x: 1, y: 0.99999994, z: 0.9999999} + - name: LeftShin + parentName: LeftThigh + position: {x: -0.00000017642975, y: -0.4319998, z: 0.0000001335144} + rotation: {x: -0.0000012914405, y: 0.00000014901161, z: 2.7355895e-13, w: 1} + scale: {x: 0.99999964, y: 0.99999994, z: 0.9999997} + - name: LeftFibulaHead + parentName: LeftShin + position: {x: -0.0000000166893, y: -0.02299244, z: -0.046980713} + rotation: {x: 0, y: -0, z: -0.00000008742278, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftTibialeHead + parentName: LeftShin + position: {x: -0.021000514, y: -0.027019538, z: 0.042000804} + rotation: {x: 0, y: -0, z: -0.00000008742278, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftLateralMalleolus + parentName: LeftShin + position: {x: 0.021000447, y: -0.43300045, z: -0.03299548} + rotation: {x: 0, y: -0, z: -0.00000008742278, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: COM_LeftShin + parentName: LeftShin + position: {x: 0.021000495, y: -0.17800659, z: -0.002988243} + rotation: {x: 0.000000059604645, y: -1.4210855e-14, z: -0.00000023841858, w: 1} + scale: {x: 0.04799998, y: 0.048000038, z: 0.04799997} + - name: LeftSphyrion + parentName: LeftShin + position: {x: -0.021000542, y: -0.43399626, z: 0.032993734} + rotation: {x: 0, y: -0, z: -0.00000008742278, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: IMU_0x02 + parentName: LeftShin + position: {x: -0.038170006, y: -0.21006356, z: 0.000000009536743} + rotation: {x: -0.084693715, y: 0.776014, z: 0.03812851, w: 0.6238394} + scale: {x: 0.9999998, y: 1.0000001, z: 1.0000001} + - name: LeftFoot + parentName: LeftShin + position: {x: -0.00000015258789, y: -0.43299976, z: -0.0006256628} + rotation: {x: -0.50000054, y: -0.49999946, z: 0.50000024, w: -0.49999982} + scale: {x: 1.0000008, y: 1.0000002, z: 1.0000002} + - name: Left1stMetatarsalHead + parentName: LeftFoot + position: {x: -0.047009792, y: -0.13292022, z: 0.063916914} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left2ndToeTip + parentName: LeftFoot + position: {x: -0.0010058403, y: -0.20615074, z: 0.0744469} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left5thMetatarsalHead + parentName: LeftFoot + position: {x: 0.059997175, y: -0.115759656, z: 0.058505885} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftCalcaneous + parentName: LeftFoot + position: {x: 0.006997194, y: 0.050186157, z: 0.0061832666} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftHEEL + parentName: LeftFoot + position: {x: 0.0000013446808, y: 0.050186157, z: 0.074966244} + rotation: {x: 0, y: -0.000000043711385, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: COM_LeftFoot + parentName: LeftFoot + position: {x: 0.005990267, y: -0.032092746, z: 0.047852606} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 0.0120001435, y: 0.012000024, z: 0.0120001435} + - name: IMU_0x03 + parentName: LeftFoot + position: {x: -0, y: -0.106202975, z: 0.014033947} + rotation: {x: -0.27362692, y: 0.00075502216, z: 0.08112946, w: 0.95840794} + scale: {x: 0.99999994, y: 1.0000002, z: 0.9999999} + - name: LeftToe + parentName: LeftFoot + position: {x: -0.00000016212464, y: -0.13169397, z: 0.062394362} + rotation: {x: -0.0000002682209, y: -0.00000008940697, z: 0.000000029802322, + w: 1} + scale: {x: 0.9999994, y: 0.9999992, z: 0.99999917} + - name: LeftToeTip + parentName: LeftToe + position: {x: -0.000000019073486, y: -0.07445687, z: 0.012571468} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: SkinData_newton + parentName: Rokoko_Newton(Clone) + position: {x: -0.00000031143426, y: 1.0248078, z: 0.000000014374509} + rotation: {x: 0.00000026027428, y: -0.0000007907536, z: 2.0581281e-13, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: newtonalpha_mass + parentName: Rokoko_Newton(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0.00000006657903, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Point001 + parentName: Rokoko_Newton(Clone) + position: {x: -0.08369885, y: 0.070833474, z: -0.056665372} + rotation: {x: 0.091698945, y: 0.70113575, z: -0.70113575, w: 0.091698945} + scale: {x: 1, y: 1, z: 1} + - name: Point002 + parentName: Rokoko_Newton(Clone) + position: {x: 0.083698496, y: 0.070833206, z: -0.05666556} + rotation: {x: -0.09169912, y: 0.7011357, z: -0.7011357, w: -0.09169912} + scale: {x: 1, y: 1, z: 1} + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 1 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 3 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Meshes/Newton/Rokoko_Newton.FBX + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Meshes/NewtonFace.meta b/Assets/External/Rokoko/Art/Meshes/NewtonFace.meta new file mode 100644 index 00000000..bb82385a --- /dev/null +++ b/Assets/External/Rokoko/Art/Meshes/NewtonFace.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f238c9fb6d8d5ae4699a98b849acc18d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Art/Meshes/NewtonFace/Rokoko_Newtonface.FBX b/Assets/External/Rokoko/Art/Meshes/NewtonFace/Rokoko_Newtonface.FBX new file mode 100644 index 00000000..2ce6a3e6 --- /dev/null +++ b/Assets/External/Rokoko/Art/Meshes/NewtonFace/Rokoko_Newtonface.FBX @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43861923a2da1e20f6b351d8947eb3481289f2ed0f9cc2f9d3e205983c1ec02b +size 3456576 diff --git a/Assets/External/Rokoko/Art/Meshes/NewtonFace/Rokoko_Newtonface.FBX.meta b/Assets/External/Rokoko/Art/Meshes/NewtonFace/Rokoko_Newtonface.FBX.meta new file mode 100644 index 00000000..2069512e --- /dev/null +++ b/Assets/External/Rokoko/Art/Meshes/NewtonFace/Rokoko_Newtonface.FBX.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: ec8a239e263555b4e89a907a0c672c82 +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: Lens + 2100002: sclera + 2100004: Iris + 2100006: Head + 2100008: 'Material #21' + 2100010: Pupil + 2100012: 'Material #22' + 4300000: NewtonFace + 7400000: Take 001 + 9500000: //RootNode + 13700000: //RootNode + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: Take 001 + takeName: Take 001 + firstFrame: 0 + lastFrame: 100 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 0.01 + hasPreviousCalculatedGlobalScale: 1 + tangentSpace: + normalSmoothAngle: 180 + normalImportMode: 1 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Meshes/NewtonFace/Rokoko_Newtonface.FBX + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Shaders.meta b/Assets/External/Rokoko/Art/Shaders.meta new file mode 100644 index 00000000..d33c8c0e --- /dev/null +++ b/Assets/External/Rokoko/Art/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c5c7b7128e5f04d47bcfe25a055381c4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Art/Shaders/Rokoko_RoundTransparentGridFloor_Shader.shader b/Assets/External/Rokoko/Art/Shaders/Rokoko_RoundTransparentGridFloor_Shader.shader new file mode 100644 index 00000000..2cf13287 --- /dev/null +++ b/Assets/External/Rokoko/Art/Shaders/Rokoko_RoundTransparentGridFloor_Shader.shader @@ -0,0 +1,115 @@ +Shader "Rokoko/RoundGridFloor" +{ + Properties + { + [NoScaleOffset]_MainTexture("MainTexture", 2D) = "white" {} + _Tiles("Tiles", Range( 0.2 , 4)) = 0.04 + _SubTiles("SubTiles", Int) = 4 + _Radius("Radius", Float) = 2 + _FadeDistance("FadeDistance", Float) = 2 + _MainColor("MainColor", Color) = (0.5849056,0.5849056,0.5849056,0) + _GridColor("GridColor", Color) = (1,1,1,0) + [HideInInspector] __dirty( "", Int ) = 1 + } + + SubShader + { + Tags{ "RenderType" = "Opaque" "Queue" = "Geometry+0" "IsEmissive" = "true" } + Cull Back + GrabPass{ } + CGPROGRAM + #include "UnityShaderVariables.cginc" + #pragma target 3.0 + #pragma surface surf StandardSpecular keepalpha addshadow fullforwardshadows exclude_path:deferred + struct Input + { + float3 worldPos; + float4 screenPos; + }; + + uniform float4 _MainColor; + uniform float4 _GridColor; + uniform sampler2D _MainTexture; + uniform float _Tiles; + uniform int _SubTiles; + uniform float _FadeDistance; + uniform float _Radius; + uniform sampler2D _GrabTexture; + + + float3 mod2D289( float3 x ) { return x - floor( x * ( 1.0 / 289.0 ) ) * 289.0; } + + float2 mod2D289( float2 x ) { return x - floor( x * ( 1.0 / 289.0 ) ) * 289.0; } + + float3 permute( float3 x ) { return mod2D289( ( ( x * 34.0 ) + 1.0 ) * x ); } + + float snoise( float2 v ) + { + const float4 C = float4( 0.211324865405187, 0.366025403784439, -0.577350269189626, 0.024390243902439 ); + float2 i = floor( v + dot( v, C.yy ) ); + float2 x0 = v - i + dot( i, C.xx ); + float2 i1; + i1 = ( x0.x > x0.y ) ? float2( 1.0, 0.0 ) : float2( 0.0, 1.0 ); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod2D289( i ); + float3 p = permute( permute( i.y + float3( 0.0, i1.y, 1.0 ) ) + i.x + float3( 0.0, i1.x, 1.0 ) ); + float3 m = max( 0.5 - float3( dot( x0, x0 ), dot( x12.xy, x12.xy ), dot( x12.zw, x12.zw ) ), 0.0 ); + m = m * m; + m = m * m; + float3 x = 2.0 * frac( p * C.www ) - 1.0; + float3 h = abs( x ) - 0.5; + float3 ox = floor( x + 0.5 ); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * ( a0 * a0 + h * h ); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot( m, g ); + } + + + inline float4 ASE_ComputeGrabScreenPos( float4 pos ) + { + #if UNITY_UV_STARTS_AT_TOP + float scale = -1.0; + #else + float scale = 1.0; + #endif + float4 o = pos; + o.y = pos.w * 0.5f; + o.y = ( pos.y - o.y ) * _ProjectionParams.x * scale + o.y; + return o; + } + + + void surf( Input i , inout SurfaceOutputStandardSpecular o ) + { + float4 _black = float4(0,0,0,0); + float3 ase_worldPos = i.worldPos; + float4 transform127 = mul(unity_WorldToObject,float4( ase_worldPos , 0.0 )); + float4 appendResult129 = (float4(transform127.x , transform127.z , 0.0 , 0.0)); + float4 lerpResult114 = lerp( _MainColor , _GridColor , max( tex2D( _MainTexture, ( appendResult129 * _Tiles ).xy ).r , tex2D( _MainTexture, ( appendResult129 * _SubTiles * _Tiles ).xy ).r )); + float4 ase_screenPos = float4( i.screenPos.xyz , i.screenPos.w + 0.00000000001 ); + float4 ase_screenPosNorm = ase_screenPos / ase_screenPos.w; + ase_screenPosNorm.z = ( UNITY_NEAR_CLIP_VALUE >= 0 ) ? ase_screenPosNorm.z : ase_screenPosNorm.z * 0.5 + 0.5; + float simplePerlin2D148 = snoise( ( ase_screenPosNorm * 2048.0 ).xy ); + float ScreenRandom152 = ( ( simplePerlin2D148 - 1.0 ) * 0.0008 ); + float3 ase_vertex3Pos = mul( unity_WorldToObject, float4( i.worldPos , 1 ) ); + float3 ase_objectScale = float3( length( unity_ObjectToWorld[ 0 ].xyz ), length( unity_ObjectToWorld[ 1 ].xyz ), length( unity_ObjectToWorld[ 2 ].xyz ) ); + float clampResult126 = clamp( ( (0.0 + (length( ( ase_vertex3Pos * ase_objectScale ) ) - ( _FadeDistance + _Radius )) * (1.0 - 0.0) / (_Radius - ( _FadeDistance + _Radius ))) + ( ScreenRandom152 * 32.0 ) ) , 0.0 , 1.0 ); + float Mask84 = clampResult126; + float4 lerpResult86 = lerp( _black , ( lerpResult114 + ScreenRandom152 ) , Mask84); + o.Albedo = lerpResult86.rgb; + float4 ase_grabScreenPos = ASE_ComputeGrabScreenPos( ase_screenPos ); + float4 screenColor106 = tex2Dproj( _GrabTexture, UNITY_PROJ_COORD( ase_grabScreenPos ) ); + float4 lerpResult107 = lerp( screenColor106 , _black , Mask84); + o.Emission = lerpResult107.rgb; + o.Occlusion = Mask84; + o.Alpha = 1; + } + + ENDCG + } + Fallback "Diffuse" +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Art/Shaders/Rokoko_RoundTransparentGridFloor_Shader.shader.meta b/Assets/External/Rokoko/Art/Shaders/Rokoko_RoundTransparentGridFloor_Shader.shader.meta new file mode 100644 index 00000000..d1a8d5d4 --- /dev/null +++ b/Assets/External/Rokoko/Art/Shaders/Rokoko_RoundTransparentGridFloor_Shader.shader.meta @@ -0,0 +1,16 @@ +fileFormatVersion: 2 +guid: fc0c201ebbc6ff844a8111b15ce5737a +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Shaders/Rokoko_RoundTransparentGridFloor_Shader.shader + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Textures.meta b/Assets/External/Rokoko/Art/Textures.meta new file mode 100644 index 00000000..ed87c07c --- /dev/null +++ b/Assets/External/Rokoko/Art/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd204d920b563eb46ba6ddd864c9c14e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Art/Textures/rokoko-floor-2048.png b/Assets/External/Rokoko/Art/Textures/rokoko-floor-2048.png new file mode 100644 index 00000000..f8a92e9a --- /dev/null +++ b/Assets/External/Rokoko/Art/Textures/rokoko-floor-2048.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2297a3690f6a6cc6db6f57b7eb9c10ccfd8c1e8def411e19b17f2e2b7d53e3c2 +size 24107 diff --git a/Assets/External/Rokoko/Art/Textures/rokoko-floor-2048.png.meta b/Assets/External/Rokoko/Art/Textures/rokoko-floor-2048.png.meta new file mode 100644 index 00000000..4148d0c5 --- /dev/null +++ b/Assets/External/Rokoko/Art/Textures/rokoko-floor-2048.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 673b25e62d3e3a4488ffd4d2c9636e84 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 14 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Textures/rokoko-floor-2048.png + uploadId: 616054 diff --git a/Assets/External/Rokoko/Art/Textures/rokoko-gray-16.jpg b/Assets/External/Rokoko/Art/Textures/rokoko-gray-16.jpg new file mode 100644 index 00000000..75c02b8e --- /dev/null +++ b/Assets/External/Rokoko/Art/Textures/rokoko-gray-16.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3303326f088456275b4626646bbd3ccbb91028e507e31a7d01bf2d593daec784 +size 11157 diff --git a/Assets/External/Rokoko/Art/Textures/rokoko-gray-16.jpg.meta b/Assets/External/Rokoko/Art/Textures/rokoko-gray-16.jpg.meta new file mode 100644 index 00000000..b0140e09 --- /dev/null +++ b/Assets/External/Rokoko/Art/Textures/rokoko-gray-16.jpg.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 0265e9ba7f5e59445b11cb82a48f7214 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Art/Textures/rokoko-gray-16.jpg + uploadId: 616054 diff --git a/Assets/External/Rokoko/EditorScripts.meta b/Assets/External/Rokoko/EditorScripts.meta new file mode 100644 index 00000000..73750484 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 247225ee61910404f8b6667f6ebb5a8c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/EditorScripts/Editor.meta b/Assets/External/Rokoko/EditorScripts/Editor.meta new file mode 100644 index 00000000..ba274ba8 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bcb7fc52d279a04418128409398af3bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/EditorScripts/Editor/ActorEditor.cs b/Assets/External/Rokoko/EditorScripts/Editor/ActorEditor.cs new file mode 100644 index 00000000..a084081e --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/ActorEditor.cs @@ -0,0 +1,242 @@ +#if UNITY_EDITOR + +using Rokoko.Helper; +using Rokoko.Inputs; +using UnityEditor; +using UnityEngine; + +namespace Rokoko.RokokoEditor +{ + [CustomEditor(typeof(Actor))] + [CanEditMultipleObjects] + public class ActorEditor : TweakableEditor + { + private const string TPOSE_GUIDE_PREFAB_PATH = "TPoseGuide_Prefab"; + private const int GroupSpace = 20; + + private SerializedProperty boneMapping; + private SerializedProperty animatorProperty; + private SerializedProperty profileNameProperty; + private SerializedProperty faceProperty; + + private GameObject tPoseGuide; + + protected void OnEnable() + { + boneMapping = serializedObject.FindProperty("boneMapping"); + animatorProperty = serializedObject.FindProperty("animator"); + profileNameProperty = serializedObject.FindProperty("profileName"); + faceProperty = serializedObject.FindProperty("face"); + + Actor actor = (Actor)target; + + if (!Application.isPlaying) + actor.animator = actor.gameObject.GetComponent(); + + if (actor.animator != null && !actor.isValidTpose) + actor.CalculateTPose(); + + EditorApplication.playModeStateChanged += EditorApplication_playModeStateChanged; + } + + private void OnDisable() + { + HideTPoseGuide(); + } + + private void HideTPoseGuide() + { + if (tPoseGuide != null) + { + RokokoHelper.Destroy(tPoseGuide); + tPoseGuide = null; + } + } + + private void EditorApplication_playModeStateChanged(PlayModeStateChange obj) + { + HideTPoseGuide(); + } + + // Stops showing the script field + protected override string[] GetInvisibleInDefaultInspector() + { + return new[] { "m_Script" }; + } + + public override void OnInspectorGUI() + { + Actor actor = (Actor)target; + serializedObject.Update(); + + Undo.RecordObject(actor, "Undo Actor Changes"); + + // TPose + { + GUILayout.BeginVertical("HelpBox"); + + EditorGUILayout.HelpBox("T Pose reference is needed in order translate properly animation from Studio.", MessageType.Info); + + if (actor.animator != null) + { + GUILayout.BeginHorizontal(); + { + GUILayout.Label("T Pose reference"); + + string textValue = (actor.characterTPose.Count == 0) ? "Not set" : $"Referece:{actor.name}"; + GUILayout.TextField(textValue); + + if (actor.characterTPose.Count == 0) + EditorGUILayout.HelpBox("You need to assign a reference T Pose.", MessageType.Error); + } + GUILayout.EndHorizontal(); + + GUILayout.Space(10); + + if (actor.characterTPose.Count > 0) + { + if (!actor.isValidTpose) + { + EditorGUILayout.HelpBox("Refernce T Pose seems wrong.\nRotate the character to match the TPose orientation guide and then \"Assign T Pose\" again.", MessageType.Error); + + GUI.color = Color.white; + } + } + + EditorGUILayout.BeginHorizontal(); + + if (tPoseGuide == null) + { + if (GUILayout.Button("Show T Pose Guide")) + { + tPoseGuide = GameObject.Instantiate(Resources.Load(TPOSE_GUIDE_PREFAB_PATH)); + TPoseGuideGameComponent tposeComponent = tPoseGuide.GetComponent(); + tposeComponent.followTarget = actor.transform; + + float actorHeight = actor.GetActorHeight(); + // Plane is x10 times bigger + // Make contour guide bigger + tposeComponent.transform.localScale = Vector3.one * actorHeight * 0.1f * 1.25f; + tposeComponent.followOffset = new Vector3(0, actorHeight / 2f, -0.5f); + } + } + else + { + if (GUILayout.Button("Hide T Pose Guide")) + { + HideTPoseGuide(); + } + } + + if (GUILayout.Button("Assign T Pose")) + { + actor.CalculateTPose(); + } + + EditorGUILayout.EndHorizontal(); + + if (tPoseGuide != null) + { + EditorGUILayout.HelpBox("Rotate your character according to the help guide plane.\nNote: Position doesn't matter, you only need to match the actor to the silhouette", MessageType.Info); + } + } + else + { + EditorGUILayout.HelpBox("Please select a valid Animator", MessageType.Error); + } + + GUILayout.EndVertical(); + + GUILayout.Space(GroupSpace); + } + + // Profile name + { + GUILayout.BeginVertical("HelpBox"); + + EditorGUILayout.HelpBox("Profile name allows you to override any target from Studio", MessageType.Info); + EditorGUILayout.PropertyField(profileNameProperty); + + GUILayout.EndVertical(); + + GUILayout.Space(GroupSpace); + + } + + // Bone Mapping + { + GUILayout.BeginVertical("HelpBox"); + + EditorGUILayout.HelpBox("Bone mapping is used to convert a Studio Actor to any custom character hierarchy", MessageType.Info); + EditorGUILayout.PropertyField(boneMapping); + if (actor.boneMapping == Actor.BoneMappingEnum.Animator) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(animatorProperty); + if (GUILayout.Button("Self")) + { + actor.animator = actor.GetComponentInChildren(); + } + EditorGUILayout.EndHorizontal(); + + if (actor.animator == null) + { + EditorGUILayout.HelpBox("Please select a valid Animator", MessageType.Error); + } + else if (!actor.animator.isHuman) + { + EditorGUILayout.HelpBox("The avatar you are using is not humanoid.\nPlease go in model inspector, under Rig tab and select AnimationType as Humanoid.", MessageType.Error); + } + } + else + { + if (actor.GetComponent() == null) + { + actor.customBoneMapping = Undo.AddComponent(actor.gameObject, typeof(HumanBoneMapping)) as HumanBoneMapping; + } + else if (actor.customBoneMapping == null) + { + actor.customBoneMapping = actor.GetComponent(); + } + } + + GUILayout.EndVertical(); + + GUILayout.Space(GroupSpace); + } + + // Face + { + EditorGUILayout.LabelField("Actor Face (Optional)", EditorStyles.boldLabel); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(faceProperty); + if (GUILayout.Button("Create")) + { + if (actor.gameObject.GetComponent() is Face face) + { + actor.face = face; + } + else + { + actor.face = Undo.AddComponent(actor.gameObject, typeof(Face)) as Face; + } + + } + if (GUILayout.Button("Self")) + { + actor.face = actor.GetComponentInChildren(); + } + EditorGUILayout.EndHorizontal(); + + GUILayout.Space(10); + } + + serializedObject.ApplyModifiedProperties(); + + // Draw standard fields + base.OnInspectorGUI(); + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/External/Rokoko/EditorScripts/Editor/ActorEditor.cs.meta b/Assets/External/Rokoko/EditorScripts/Editor/ActorEditor.cs.meta new file mode 100644 index 00000000..ee182de7 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/ActorEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 6c145f0e6172c614cb36925c13089d46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/EditorScripts/Editor/ActorEditor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/EditorScripts/Editor/ActorNewtonEditor.cs b/Assets/External/Rokoko/EditorScripts/Editor/ActorNewtonEditor.cs new file mode 100644 index 00000000..a2b21ac7 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/ActorNewtonEditor.cs @@ -0,0 +1,13 @@ +#if UNITY_EDITOR + +using Rokoko.Inputs; +using UnityEditor; + +namespace Rokoko.RokokoEditor +{ + [CustomEditor(typeof(ActorNewton))] + [CanEditMultipleObjects] + public class ActorNewtonEditor : ActorEditor { } +} + +#endif \ No newline at end of file diff --git a/Assets/External/Rokoko/EditorScripts/Editor/ActorNewtonEditor.cs.meta b/Assets/External/Rokoko/EditorScripts/Editor/ActorNewtonEditor.cs.meta new file mode 100644 index 00000000..ad98fad7 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/ActorNewtonEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: d1046da63220b6747b3ff405b5d9b66f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/EditorScripts/Editor/ActorNewtonEditor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/EditorScripts/Editor/BlendShapesMappingEditor.cs b/Assets/External/Rokoko/EditorScripts/Editor/BlendShapesMappingEditor.cs new file mode 100644 index 00000000..6b0d9a49 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/BlendShapesMappingEditor.cs @@ -0,0 +1,100 @@ +#if UNITY_EDITOR + +using Rokoko.Inputs; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using Rokoko.Helper; +using Rokoko.Core; + +namespace Rokoko.RokokoEditor +{ + [CustomEditor(typeof(BlendShapesMapping))] + [CanEditMultipleObjects] + public class BlendShapesMappingEditor : TweakableEditor + { + private BlendShapes[] _BlendshapesArray = null; + public BlendShapes[] BlendshapesArray + { + get + { + if (_BlendshapesArray == null) + { + _BlendshapesArray = new BlendShapes[(int)BlendShapes.size]; + for (int i = 0; i < _BlendshapesArray.Length; i++) + { + _BlendshapesArray[i] = (BlendShapes)i; + } + } + + return _BlendshapesArray; + } + } + + + SerializedProperty blendshapeNames; + + protected void OnEnable() + { + blendshapeNames = serializedObject.FindProperty("blendshapeNames"); + } + + // Stops showing the script field + protected override string[] GetInvisibleInDefaultInspector() + { + return new[] { "m_Script" }; + } + + public override void OnInspectorGUI() + { + BlendShapesMapping blendshapesMapping = (BlendShapesMapping)target; + serializedObject.Update(); + + Undo.RecordObject(blendshapesMapping, "Undo ActorCustomBoneMapping Changes"); + + // Initialize Array + if (blendshapesMapping.blendshapeNames.Count != BlendshapesArray.Length) + { + blendshapesMapping.blendshapeNames = new BlendshapesDictionary(); + for (int i = 0; i < BlendshapesArray.Length; i++) + { + blendshapesMapping.blendshapeNames.Add(BlendshapesArray[i], ""); + } + + // SerializedObject rereferce needs to be updated + return; + } + + GUILayout.Space(10); + + if (GUILayout.Button("Copy from ARKit")) + { + // Copy fields from ARKit + for (int i = 0; i < blendshapesMapping.blendshapeNames.Count; i++) + { + KeyValuePair keyPair = blendshapesMapping.blendshapeNames[i]; + blendshapesMapping.blendshapeNames[keyPair.Key] = keyPair.Key.ToString(); + } + } + + GUILayout.Space(10); + + // Draw a field for each Blendshape + for (int i = 0; i < blendshapesMapping.blendshapeNames.Count; i++) + { + KeyValuePair keyPair = blendshapesMapping.blendshapeNames[i]; + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(keyPair.Key.ToString().ToUpperFirstChar()); + blendshapesMapping.blendshapeNames[keyPair.Key] = EditorGUILayout.TextField(keyPair.Value.ToString()); + EditorGUILayout.EndHorizontal(); + } + + serializedObject.ApplyModifiedProperties(); + + // Draw standard fields + //base.OnInspectorGUI(); + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/External/Rokoko/EditorScripts/Editor/BlendShapesMappingEditor.cs.meta b/Assets/External/Rokoko/EditorScripts/Editor/BlendShapesMappingEditor.cs.meta new file mode 100644 index 00000000..ee43ff8e --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/BlendShapesMappingEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: b14cf39ebf53638488debce90a690ad2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/EditorScripts/Editor/BlendShapesMappingEditor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/EditorScripts/Editor/CharacterEditor.cs b/Assets/External/Rokoko/EditorScripts/Editor/CharacterEditor.cs new file mode 100644 index 00000000..6ef148c5 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/CharacterEditor.cs @@ -0,0 +1,109 @@ +#if UNITY_EDITOR + +using Rokoko.Helper; +using Rokoko.Inputs; +using UnityEditor; +using UnityEngine; + +namespace Rokoko.RokokoEditor +{ + [CustomEditor(typeof(Character))] + [CanEditMultipleObjects] + public class CharacterEditor : TweakableEditor + { + private const int GroupSpace = 20; + + private SerializedProperty animatorProperty; + private SerializedProperty profileNameProperty; + private SerializedProperty faceProperty; + + private GameObject tPoseGuide; + + protected void OnEnable() + { + animatorProperty = serializedObject.FindProperty("animator"); + profileNameProperty = serializedObject.FindProperty("profileName"); + faceProperty = serializedObject.FindProperty("face"); + + Character character = (Character)target; + + if (!Application.isPlaying) + character.animator = character.gameObject.GetComponent(); + + EditorApplication.playModeStateChanged += EditorApplication_playModeStateChanged; + } + + private void OnDisable() + { + } + + private void HideTPoseGuide() + { + } + + private void EditorApplication_playModeStateChanged(PlayModeStateChange obj) + { + } + + // Stops showing the script field + protected override string[] GetInvisibleInDefaultInspector() + { + return new[] { "m_Script" }; + } + + public override void OnInspectorGUI() + { + Character character = (Character)target; + serializedObject.Update(); + + Undo.RecordObject(character, "Undo Character Changes"); + + + // Profile name + { + GUILayout.BeginVertical("HelpBox"); + + EditorGUILayout.HelpBox("Profile name allows you to override any target from Studio", MessageType.Info); + EditorGUILayout.PropertyField(profileNameProperty); + + GUILayout.EndVertical(); + + GUILayout.Space(GroupSpace); + + } + + // Face + { + EditorGUILayout.LabelField("Character Face (Optional)", EditorStyles.boldLabel); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(faceProperty); + if (GUILayout.Button("Create")) + { + if (character.gameObject.GetComponent() is Face face) + { + character.face = face; + } + else + { + character.face = Undo.AddComponent(character.gameObject, typeof(Face)) as Face; + } + + } + if (GUILayout.Button("Self")) + { + character.face = character.GetComponentInChildren(); + } + EditorGUILayout.EndHorizontal(); + + GUILayout.Space(10); + } + + serializedObject.ApplyModifiedProperties(); + + // Draw standard fields + base.OnInspectorGUI(); + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/External/Rokoko/EditorScripts/Editor/CharacterEditor.cs.meta b/Assets/External/Rokoko/EditorScripts/Editor/CharacterEditor.cs.meta new file mode 100644 index 00000000..2508aa07 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/CharacterEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 23947746632310247af5d08e4faf5afd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/EditorScripts/Editor/CharacterEditor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/EditorScripts/Editor/FaceEditor.cs b/Assets/External/Rokoko/EditorScripts/Editor/FaceEditor.cs new file mode 100644 index 00000000..a0a0183b --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/FaceEditor.cs @@ -0,0 +1,111 @@ +#if UNITY_EDITOR + +using Rokoko.Helper; +using Rokoko.Inputs; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using UnityEditor; +using UnityEngine; + +namespace Rokoko.RokokoEditor +{ + [CustomEditor(typeof(Face))] + [CanEditMultipleObjects] + public class FaceEditor : TweakableEditor + { + private static int blendshapesCount; + + SerializedProperty blendshapeMappingProperty; + SerializedProperty blendshapeCustomMapProperty; + SerializedProperty meshRendererProperty; + + protected void OnEnable() + { + blendshapeMappingProperty = serializedObject.FindProperty("blendshapeMapping"); + blendshapeCustomMapProperty = serializedObject.FindProperty("blendshapeCustomMap"); + meshRendererProperty = serializedObject.FindProperty("meshRenderer"); + blendshapesCount = (int)Core.BlendShapes.size; + + Face face = (Face)target; + face.meshRenderer = face.GetComponentInChildren(); + } + + // Stops showing the script field + protected override string[] GetInvisibleInDefaultInspector() + { + return new[] { "m_Script" }; + } + + public override void OnInspectorGUI() + { + Face face = (Face)target; + serializedObject.Update(); + + Undo.RecordObject(face, "Undo Face Changes"); + + EditorGUILayout.HelpBox("Blendshape mapping is used to convert a Studio Face to any custom character blendshapes", MessageType.Info); + EditorGUILayout.PropertyField(blendshapeMappingProperty); + if (face.blendshapeMapping == Face.FaceMappingEnum.ARKit) + { + // Do nothing + } + else + { + EditorGUILayout.PropertyField(blendshapeCustomMapProperty); + if (face.GetComponent() == null) + { + face.blendshapeCustomMap = Undo.AddComponent(face.gameObject, typeof(BlendShapesMapping)) as BlendShapesMapping; + } + } + + GUILayout.Space(10); + + EditorGUILayout.BeginHorizontal(); + { + EditorGUILayout.PropertyField(meshRendererProperty); + if (GUILayout.Button("Find in Hierarchy")) + { + face.meshRenderer = face.GetComponentInChildren(); + } + } + EditorGUILayout.EndHorizontal(); + + + if (face.meshRenderer == null) + { + EditorGUILayout.HelpBox("You need to assign a valid SkinnedMeshRenderer", MessageType.Error); + } + else if (face.meshRenderer.sharedMesh.blendShapeCount == 0) + { + EditorGUILayout.HelpBox("Assigned SkinnedMeshRenderer doesn't have any blendshapes", MessageType.Warning); + } + else if (face.meshRenderer.sharedMesh.blendShapeCount > 0) + { + if (face.meshRenderer.sharedMesh.blendShapeCount < blendshapesCount) + { + StringBuilder message = new StringBuilder(); + message.AppendLine($"Face supports {blendshapesCount} blendshapes, but found {face.meshRenderer.sharedMesh.blendShapeCount} on SkinnedMeshRenderer\n"); + List missingBlendshapes = face.meshRenderer.sharedMesh.GetAllMissingBlendshapes(); + message.AppendLine("Missing blendshapes:"); + for (int i = 0; i < missingBlendshapes.Count; i++) + { + message.AppendLine(missingBlendshapes[i]); + } + EditorGUILayout.HelpBox(message.ToString(), MessageType.Warning); + } + else + { + EditorGUILayout.HelpBox($"Found {face.meshRenderer.sharedMesh.blendShapeCount} blendshapes on SkinnedMeshRenderer", MessageType.Info); + } + } + + serializedObject.ApplyModifiedProperties(); + + // Draw standard fields + base.OnInspectorGUI(); + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/External/Rokoko/EditorScripts/Editor/FaceEditor.cs.meta b/Assets/External/Rokoko/EditorScripts/Editor/FaceEditor.cs.meta new file mode 100644 index 00000000..1ebbeb2a --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/FaceEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: d5dc6a1ce1b3e1e4ca93a58eb7b8423e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/EditorScripts/Editor/FaceEditor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/EditorScripts/Editor/HumanBoneMappingEditor.cs b/Assets/External/Rokoko/EditorScripts/Editor/HumanBoneMappingEditor.cs new file mode 100644 index 00000000..756dbd77 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/HumanBoneMappingEditor.cs @@ -0,0 +1,88 @@ +#if UNITY_EDITOR + +using Rokoko.Inputs; +using UnityEditor; +using UnityEngine; + +namespace Rokoko.RokokoEditor +{ + [CustomEditor(typeof(HumanBoneMapping))] + [CanEditMultipleObjects] + public class HumanBoneMappingEditor : TweakableEditor + { + private HumanBodyBones[] _HumanBodyBonesArray; + + public HumanBodyBones[] HumanBodyBonesArray + { + get + { + if (_HumanBodyBonesArray == null) + { + _HumanBodyBonesArray = new HumanBodyBones[(int)HumanBodyBones.LastBone]; + for (int i = 0; i < _HumanBodyBonesArray.Length; i++) + _HumanBodyBonesArray[i] = (HumanBodyBones)i; + } + return _HumanBodyBonesArray; + } + } + + SerializedProperty customBodyBones; + + protected void OnEnable() + { + customBodyBones = serializedObject.FindProperty("customBodyBones"); + } + + // Stops showing the script field + protected override string[] GetInvisibleInDefaultInspector() + { + return new[] { "m_Script" }; + } + + public override void OnInspectorGUI() + { + HumanBoneMapping boneMapping = (HumanBoneMapping)target; + Undo.RecordObject(boneMapping, "Undo ActorCustomBoneMapping Changes"); + + // Initialize Array + if (boneMapping.customBodyBones.Length != HumanBodyBonesArray.Length) + { + boneMapping.customBodyBones = new Transform[HumanBodyBonesArray.Length]; + + // SerializedObject rereferce needs to be updated + return; + } + + GUILayout.Space(10); + + if (GUILayout.Button("Copy from Animator")) + { + Animator animator = boneMapping.GetComponent(); + if (animator != null) + { + for (int i = 0; i < HumanBodyBonesArray.Length; i++) + { + boneMapping.customBodyBones[i] = animator.GetBoneTransform(HumanBodyBonesArray[i]); + } + } + } + + GUILayout.Space(10); + + // Draw a field for each HumanBodyBone + for (int i = 0; i < HumanBodyBonesArray.Length; i++) + { + SerializedProperty element = customBodyBones.GetArrayElementAtIndex(i); + EditorGUILayout.PropertyField(element, new GUIContent(HumanBodyBonesArray[i].ToString())); + } + + serializedObject.ApplyModifiedProperties(); + + // Draw standard fields + //base.OnInspectorGUI(); + + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/External/Rokoko/EditorScripts/Editor/HumanBoneMappingEditor.cs.meta b/Assets/External/Rokoko/EditorScripts/Editor/HumanBoneMappingEditor.cs.meta new file mode 100644 index 00000000..d945f1e5 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/HumanBoneMappingEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: a0839a667aaa630449048d91f665bff9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/EditorScripts/Editor/HumanBoneMappingEditor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/EditorScripts/Editor/PropColorEditor.cs b/Assets/External/Rokoko/EditorScripts/Editor/PropColorEditor.cs new file mode 100644 index 00000000..e0c4cc44 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/PropColorEditor.cs @@ -0,0 +1,44 @@ +#if UNITY_EDITOR + +using Rokoko.Inputs; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace Rokoko.RokokoEditor +{ + [CustomEditor(typeof(PropColor))] + [CanEditMultipleObjects] + public class PropColorEditor : PropEditor + { + SerializedProperty meshRendererProperty; + + protected override void OnEnable() + { + base.OnEnable(); + meshRendererProperty = serializedObject.FindProperty("meshRenderer"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + PropColor propColor = (PropColor)target; + serializedObject.Update(); + + GUILayout.Space(10); + + EditorGUILayout.LabelField("Update mesh color", EditorStyles.boldLabel); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(meshRendererProperty); + if (GUILayout.Button("Self")) + { + propColor.meshRenderer = propColor.GetComponentInChildren(); + } + EditorGUILayout.EndHorizontal(); + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/External/Rokoko/EditorScripts/Editor/PropColorEditor.cs.meta b/Assets/External/Rokoko/EditorScripts/Editor/PropColorEditor.cs.meta new file mode 100644 index 00000000..6843caa1 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/PropColorEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 0d1dd208261ef5a4992092a3318f5134 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/EditorScripts/Editor/PropColorEditor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/EditorScripts/Editor/PropEditor.cs b/Assets/External/Rokoko/EditorScripts/Editor/PropEditor.cs new file mode 100644 index 00000000..f57b0aa7 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/PropEditor.cs @@ -0,0 +1,43 @@ +#if UNITY_EDITOR + +using Rokoko.Inputs; +using UnityEditor; + +namespace Rokoko.RokokoEditor +{ + [CustomEditor(typeof(Prop))] + [CanEditMultipleObjects] + public class PropEditor : TweakableEditor + { + SerializedProperty propNameProperty; + + protected virtual void OnEnable() + { + propNameProperty = serializedObject.FindProperty("propName"); + } + + // Stops showing the script field + protected override string[] GetInvisibleInDefaultInspector() + { + return new[] { "m_Script" }; + } + + public override void OnInspectorGUI() + { + Prop prop = (Prop)target; + serializedObject.Update(); + + Undo.RecordObject(prop, "Undo Prop Changes"); + + EditorGUILayout.HelpBox("Prop name allows you to override any prop target from studio", MessageType.Info); + EditorGUILayout.PropertyField(propNameProperty); + + serializedObject.ApplyModifiedProperties(); + + // Draw standard fields + base.OnInspectorGUI(); + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/External/Rokoko/EditorScripts/Editor/PropEditor.cs.meta b/Assets/External/Rokoko/EditorScripts/Editor/PropEditor.cs.meta new file mode 100644 index 00000000..da037ea9 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/PropEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 6ffddd999956ac94880e3d3b948a51b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/EditorScripts/Editor/PropEditor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/EditorScripts/Editor/TweakableEditor.cs b/Assets/External/Rokoko/EditorScripts/Editor/TweakableEditor.cs new file mode 100644 index 00000000..e2a82eab --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/TweakableEditor.cs @@ -0,0 +1,44 @@ +#if UNITY_EDITOR + +using UnityEditor; + +/// +/// A simple class to inherit from when only minor tweaks to a component's inspector are required. +/// In such cases, a full custom inspector is normally overkill but, by inheriting from this class, custom tweaks become trivial. +/// +/// To hide items from being drawn, simply override GetInvisibleInDefaultInspector, returning a string[] of fields to hide. +/// To draw/add extra GUI code/anything else you want before the default inspector is drawn, override OnBeforeDefaultInspector. +/// Similarly, override OnAfterDefaultInspector to draw GUI elements after the default inspector is drawn. +/// + +namespace Rokoko.RokokoEditor +{ + public abstract class TweakableEditor : Editor + { + private static readonly string[] _emptyStringArray = new string[0]; + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + OnBeforeDefaultInspector(); + DrawPropertiesExcluding(serializedObject, GetInvisibleInDefaultInspector()); + OnAfterDefaultInspector(); + + serializedObject.ApplyModifiedProperties(); + } + + protected virtual void OnBeforeDefaultInspector() + { } + + protected virtual void OnAfterDefaultInspector() + { } + + protected virtual string[] GetInvisibleInDefaultInspector() + { + return _emptyStringArray; + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/External/Rokoko/EditorScripts/Editor/TweakableEditor.cs.meta b/Assets/External/Rokoko/EditorScripts/Editor/TweakableEditor.cs.meta new file mode 100644 index 00000000..5c70bf07 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/Editor/TweakableEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: c2ecfb1b4e8e7e84f8b2e187eafde67d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/EditorScripts/Editor/TweakableEditor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/EditorScripts/RokokoEditorScripts.asmdef b/Assets/External/Rokoko/EditorScripts/RokokoEditorScripts.asmdef new file mode 100644 index 00000000..9abd5ab8 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/RokokoEditorScripts.asmdef @@ -0,0 +1,18 @@ +{ + "name": "RokokoEditor", + "rootNamespace": "", + "references": [ + "GUID:c0283c4bf59b9ad4aa5b4622e1c041a8" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/External/Rokoko/EditorScripts/RokokoEditorScripts.asmdef.meta b/Assets/External/Rokoko/EditorScripts/RokokoEditorScripts.asmdef.meta new file mode 100644 index 00000000..545c6f28 --- /dev/null +++ b/Assets/External/Rokoko/EditorScripts/RokokoEditorScripts.asmdef.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 855bf3bf522250848be7ed3fd9e6664e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/EditorScripts/RokokoEditorScripts.asmdef + uploadId: 616054 diff --git a/Assets/External/Rokoko/Prefabs.meta b/Assets/External/Rokoko/Prefabs.meta new file mode 100644 index 00000000..09f8be93 --- /dev/null +++ b/Assets/External/Rokoko/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 783138d5a2f60ff4ea5015e2c8cca4bf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Prefabs/Actors.meta b/Assets/External/Rokoko/Prefabs/Actors.meta new file mode 100644 index 00000000..731800bc --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/Actors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3fb9c566e8aee9446858332229f7b0ae +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Prefabs/Actors/Newton.prefab b/Assets/External/Rokoko/Prefabs/Actors/Newton.prefab new file mode 100644 index 00000000..3aaf4ed5 --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/Actors/Newton.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3eb1a4dd47208d99e95710c8e92cd74d7b60a647292db819858da401cdc09d0e +size 175146 diff --git a/Assets/External/Rokoko/Prefabs/Actors/Newton.prefab.meta b/Assets/External/Rokoko/Prefabs/Actors/Newton.prefab.meta new file mode 100644 index 00000000..5a7fe89f --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/Actors/Newton.prefab.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 3e7a0bccb581d8945b546f992a7871f4 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Prefabs/Actors/Newton.prefab + uploadId: 616054 diff --git a/Assets/External/Rokoko/Prefabs/Actors/Newton_CustomSkeleton.prefab b/Assets/External/Rokoko/Prefabs/Actors/Newton_CustomSkeleton.prefab new file mode 100644 index 00000000..2180d83e --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/Actors/Newton_CustomSkeleton.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6c675323ca03cee41cfed18d2157538a721541c8701e6026a5b90a51aa58137 +size 177308 diff --git a/Assets/External/Rokoko/Prefabs/Actors/Newton_CustomSkeleton.prefab.meta b/Assets/External/Rokoko/Prefabs/Actors/Newton_CustomSkeleton.prefab.meta new file mode 100644 index 00000000..a4d8df32 --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/Actors/Newton_CustomSkeleton.prefab.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: fe3b0c434bb22024aaddb5f7564faa14 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Prefabs/Actors/Newton_CustomSkeleton.prefab + uploadId: 616054 diff --git a/Assets/External/Rokoko/Prefabs/Actors/Newton_NoFace.prefab b/Assets/External/Rokoko/Prefabs/Actors/Newton_NoFace.prefab new file mode 100644 index 00000000..f762c98e --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/Actors/Newton_NoFace.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62e6adadabdb802be9410477528551cb0841a1667147364ebd95cf31ef8fb5a6 +size 170036 diff --git a/Assets/External/Rokoko/Prefabs/Actors/Newton_NoFace.prefab.meta b/Assets/External/Rokoko/Prefabs/Actors/Newton_NoFace.prefab.meta new file mode 100644 index 00000000..f9a68b99 --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/Actors/Newton_NoFace.prefab.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 45a3ed8bac3c96c4297dcd116a155351 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Prefabs/Actors/Newton_NoFace.prefab + uploadId: 616054 diff --git a/Assets/External/Rokoko/Prefabs/Actors/Prop.prefab b/Assets/External/Rokoko/Prefabs/Actors/Prop.prefab new file mode 100644 index 00000000..92cc87fb --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/Actors/Prop.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e48c462e8a2a50757f2a6de69fb519765945639fdc0374e765411f2cee7b6f3b +size 2773 diff --git a/Assets/External/Rokoko/Prefabs/Actors/Prop.prefab.meta b/Assets/External/Rokoko/Prefabs/Actors/Prop.prefab.meta new file mode 100644 index 00000000..988d3efa --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/Actors/Prop.prefab.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 1b1f12af1c3d2fa4bb2cd58a1aa78db5 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Prefabs/Actors/Prop.prefab + uploadId: 616054 diff --git a/Assets/External/Rokoko/Prefabs/UI.meta b/Assets/External/Rokoko/Prefabs/UI.meta new file mode 100644 index 00000000..686714ff --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db95f5fd11f463b42ad4514065e74eab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Prefabs/UI/CommandAPI.prefab b/Assets/External/Rokoko/Prefabs/UI/CommandAPI.prefab new file mode 100644 index 00000000..8a11fbe8 --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/UI/CommandAPI.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a364f1309863486d1cae428175cedcd5f7df5c7618fe1406c4bf6baf492d489c +size 66266 diff --git a/Assets/External/Rokoko/Prefabs/UI/CommandAPI.prefab.meta b/Assets/External/Rokoko/Prefabs/UI/CommandAPI.prefab.meta new file mode 100644 index 00000000..596f971e --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/UI/CommandAPI.prefab.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 024fe78707b0a9e4599b8093e621eaa7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Prefabs/UI/CommandAPI.prefab + uploadId: 616054 diff --git a/Assets/External/Rokoko/Prefabs/UI/Hierarchy_UI.prefab b/Assets/External/Rokoko/Prefabs/UI/Hierarchy_UI.prefab new file mode 100644 index 00000000..6892f0b3 --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/UI/Hierarchy_UI.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d204f530ce9057687f80e79bb54d0a53bc31abd2c447a332895c941f4dd7425 +size 18748 diff --git a/Assets/External/Rokoko/Prefabs/UI/Hierarchy_UI.prefab.meta b/Assets/External/Rokoko/Prefabs/UI/Hierarchy_UI.prefab.meta new file mode 100644 index 00000000..b87a610f --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/UI/Hierarchy_UI.prefab.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: bc90cf8ecd1a41c42bd2bc08d5539e38 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Prefabs/UI/Hierarchy_UI.prefab + uploadId: 616054 diff --git a/Assets/External/Rokoko/Prefabs/UI/PlaybackRow.prefab b/Assets/External/Rokoko/Prefabs/UI/PlaybackRow.prefab new file mode 100644 index 00000000..7ad9713a --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/UI/PlaybackRow.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a9299a293a3b94bcfa9555f76801dd3c5cc7f5306c887cbaff6f00e59dc16be +size 27794 diff --git a/Assets/External/Rokoko/Prefabs/UI/PlaybackRow.prefab.meta b/Assets/External/Rokoko/Prefabs/UI/PlaybackRow.prefab.meta new file mode 100644 index 00000000..c4b44b8b --- /dev/null +++ b/Assets/External/Rokoko/Prefabs/UI/PlaybackRow.prefab.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 57ed10a773465374ea968f6babbec922 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Prefabs/UI/PlaybackRow.prefab + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scared_mixamo.fbx b/Assets/External/Rokoko/Scared_mixamo.fbx new file mode 100644 index 00000000..bc7f7e8e --- /dev/null +++ b/Assets/External/Rokoko/Scared_mixamo.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a0a300694ebbc8a792a9728797e8513200d19c3db6cf26a209c0c8c39e0b810 +size 3598368 diff --git a/Assets/External/Rokoko/Scared_mixamo.fbx.meta b/Assets/External/Rokoko/Scared_mixamo.fbx.meta new file mode 100644 index 00000000..b029ca3b --- /dev/null +++ b/Assets/External/Rokoko/Scared_mixamo.fbx.meta @@ -0,0 +1,878 @@ +fileFormatVersion: 2 +guid: 36a951994cc4a8747ba422cbe26f7858 +ModelImporter: + serializedVersion: 21300 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 1 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 1 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: mixamorig:Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine1 + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftToeBase + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightToeBase + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine2 + humanName: UpperChest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: Scared_mixamo(Clone) + parentName: + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Reference + parentName: Scared_mixamo(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Body + parentName: mixamorig:Reference + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:HeadFace + parentName: mixamorig:Reference + position: {x: -0, y: 0.0000000024259583, z: -0.00000022285663} + rotation: {x: 0.00000006657903, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Hips + parentName: mixamorig:Reference + position: {x: -0, y: 0.9037807, z: -2.417918e-15} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftUpLeg + parentName: mixamorig:Hips + position: {x: -0.07787898, y: 0, z: -2.3922876e-23} + rotation: {x: 3.5491237e-34, y: -7.3216153e-28, z: 1, w: -0.000000484746} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftLeg + parentName: mixamorig:LeftUpLeg + position: {x: 0.0000003013351, y: 0.41535452, z: 0.0000003827621} + rotation: {x: 0.00000062279975, y: -4.491322e-10, z: -0.00072115, w: 0.99999976} + scale: {x: 1.0000001, y: 1.0000001, z: 1} + - name: mixamorig:LeftFoot + parentName: mixamorig:LeftLeg + position: {x: -0.000000050229218, y: 0.4163161, z: 0.0000000024661482} + rotation: {x: 0.53471565, y: 0.00038557468, z: 0.0006093385, w: 0.8450318} + scale: {x: 1.0000004, y: 1.0000002, z: 1.0000001} + - name: mixamorig:LeftToeBase + parentName: mixamorig:LeftFoot + position: {x: -0.00000006202875, y: 0.14011212, z: -0.00000020407406} + rotation: {x: 0.21942928, y: -8.731149e-11, z: -0.00000009610085, w: 0.9756285} + scale: {x: 1.0000007, y: 1.0000002, z: 1.0000002} + - name: mixamorig:LeftToe_End + parentName: mixamorig:LeftToeBase + position: {x: 0.000000019683629, y: 0.06999996, z: -0.00000036921563} + rotation: {x: -2.4868996e-13, y: 1.6783135e-14, z: 1.7877745e-14, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightUpLeg + parentName: mixamorig:Hips + position: {x: 0.07787898, y: 0, z: -0.0000000022923363} + rotation: {x: 1.4993052e-34, y: -3.2787031e-28, z: 1, w: -0.00000045728603} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightLeg + parentName: mixamorig:RightUpLeg + position: {x: 0.0000004101159, y: 0.41535464, z: 0.0000003781775} + rotation: {x: 0.0000003705356, y: 2.6748592e-10, z: 0.0007218899, w: 0.99999976} + scale: {x: 1.0000002, y: 1.0000002, z: 1} + - name: mixamorig:RightFoot + parentName: mixamorig:RightLeg + position: {x: -0.000000026337704, y: 0.4163161, z: 0.0000000031358873} + rotation: {x: 0.53471524, y: -0.00038588233, z: -0.0006098256, w: 0.84503204} + scale: {x: 1.0000002, y: 0.9999999, z: 0.9999999} + - name: mixamorig:RightToeBase + parentName: mixamorig:RightFoot + position: {x: 0.000000012894521, y: 0.14011227, z: -0.00000044927603} + rotation: {x: 0.21942711, y: 5.820766e-11, z: 0.00000063944026, w: 0.9756289} + scale: {x: 1.0000005, y: 1.0000001, z: 1} + - name: mixamorig:RightToe_End + parentName: mixamorig:RightToeBase + position: {x: -5.6772476e-10, y: 0.07000017, z: -0.00000071996186} + rotation: {x: -2.9842792e-13, y: 5.780977e-14, z: -1.9057566e-15, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Spine + parentName: mixamorig:Hips + position: {x: 0.000000011990522, y: 0.12667805, z: 0} + rotation: {x: -0, y: 3.190771e-30, z: -2.3962281e-23, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Spine1 + parentName: mixamorig:Spine + position: {x: 0.0000000025234501, y: 0.124173276, z: 0} + rotation: {x: -0, y: 3.190771e-30, z: -2.3962281e-23, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Spine2 + parentName: mixamorig:Spine1 + position: {x: -0.0000000034319207, y: 0.11996293, z: -0.0000000037252903} + rotation: {x: -0, y: 3.190749e-30, z: -2.3962123e-23, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftShoulder + parentName: mixamorig:Spine2 + position: {x: -0.06768812, y: 0.09955788, z: 0} + rotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftArm + parentName: mixamorig:LeftShoulder + position: {x: -6.0888794e-15, y: 0.12941296, z: -0.00000023841858} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftForeArm + parentName: mixamorig:LeftArm + position: {x: 0.0000007394701, y: 0.25094384, z: 0.000000119209275} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHand + parentName: mixamorig:LeftForeArm + position: {x: -0.000000080093756, y: 0.2763268, z: 0.000000119209275} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandIndex1 + parentName: mixamorig:LeftHand + position: {x: 0.024832107, y: 0.07828188, z: 0.0009986162} + rotation: {x: -0, y: -0, z: -0.000000834465, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandIndex2 + parentName: mixamorig:LeftHandIndex1 + position: {x: 0.0000000042470276, y: 0.04441101, z: -0.00000023841858} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandIndex3 + parentName: mixamorig:LeftHandIndex2 + position: {x: -0.00000016009629, y: 0.027322719, z: -0.00000023841858} + rotation: {x: -0.000011265278, y: -9.40048e-12, z: 0.0000071525574, w: 1} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001} + - name: mixamorig:LeftHandIndex4 + parentName: mixamorig:LeftHandIndex3 + position: {x: 0.0000000062997145, y: 0.027131414, z: 0.00000030851314} + rotation: {x: 2.6858509e-12, y: 7.1054257e-15, z: -1.5134557e-12, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandMiddle1 + parentName: mixamorig:LeftHand + position: {x: 0.0052840635, y: 0.07888889, z: 0.0009987354} + rotation: {x: -0.0000031590462, y: -0, z: -0.0000007748604, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandMiddle2 + parentName: mixamorig:LeftHandMiddle1 + position: {x: -0.0000000023273459, y: 0.04559241, z: -0.00000027574094} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandMiddle3 + parentName: mixamorig:LeftHandMiddle2 + position: {x: -0.000000076869725, y: 0.030071655, z: -0.00000019778497} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandMiddle4 + parentName: mixamorig:LeftHandMiddle3 + position: {x: -0.00000016560472, y: 0.02998215, z: 0.000000025897414} + rotation: {x: -0.49998322, y: 0.50001675, z: -0.5000136, w: 0.4999864} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandPinky1 + parentName: mixamorig:LeftHand + position: {x: -0.030413289, y: 0.0680446, z: 0.0009989738} + rotation: {x: 0.0000022053719, y: -0, z: -0.0000004172325, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandPinky2 + parentName: mixamorig:LeftHandPinky1 + position: {x: 0.00000000282894, y: 0.034458637, z: -0.0000003092732} + rotation: {x: -0.0000056624413, y: 0.0000000595986, z: -0.0000016689302, w: 1} + scale: {x: 1.0000001, y: 1, z: 1} + - name: mixamorig:LeftHandPinky3 + parentName: mixamorig:LeftHandPinky2 + position: {x: 0.0000000040571386, y: 0.021659479, z: -0.00000009060199} + rotation: {x: 0.0000034570692, y: -0.000000059614536, z: 0.0000049471855, w: 1} + scale: {x: 1.0000002, y: 1.0000001, z: 1.0000001} + - name: mixamorig:LeftHandPinky4 + parentName: mixamorig:LeftHandPinky3 + position: {x: 0.0000000041422252, y: 0.022409271, z: -0.000000037010757} + rotation: {x: -1.0658139e-14, y: -3.5527133e-15, z: 6.927791e-13, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandRing1 + parentName: mixamorig:LeftHand + position: {x: -0.013966348, y: 0.07569122, z: 0.0009993315} + rotation: {x: 0.000000029802319, y: -0.000000029802319, z: -0.0000006407499, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandRing2 + parentName: mixamorig:LeftHandRing1 + position: {x: -0.0000000024119942, y: 0.04258539, z: -0.00000035762787} + rotation: {x: -0.00000008940698, y: 0.000000029802262, z: 0.000000014901104, + w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandRing3 + parentName: mixamorig:LeftHandRing2 + position: {x: -0.00000003142688, y: 0.02746447, z: -0.0000001192093} + rotation: {x: -0.00000834465, y: -5.2136073e-12, z: -0.00000014901164, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandRing4 + parentName: mixamorig:LeftHandRing3 + position: {x: -0.000000006313589, y: 0.026999911, z: -0.000000030448845} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftHandThumb1 + parentName: mixamorig:LeftHand + position: {x: 0.036862448, y: 0.016169965, z: 0.0009441376} + rotation: {x: 0.003476113, y: 0.000053077936, z: -0.4732895, w: 0.8809001} + scale: {x: 1, y: 1.0000001, z: 1.0000001} + - name: mixamorig:LeftHandThumb2 + parentName: mixamorig:LeftHandThumb1 + position: {x: -0.010516237, y: 0.036976773, z: -0.00000021772424} + rotation: {x: 0.0000023285395, y: -0.0000008211428, z: 0.17508073, w: 0.9845541} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000002} + - name: mixamorig:LeftHandThumb3 + parentName: mixamorig:LeftHandThumb2 + position: {x: 0.000000015558387, y: 0.02915626, z: -0.00000022997925} + rotation: {x: -0.000000029802322, y: -0.000000029802129, z: 0.0000000149010555, + w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1.0000002} + - name: mixamorig:LeftHandThumb4 + parentName: mixamorig:LeftHandThumb3 + position: {x: 0.000000070909564, y: 0.034589745, z: -0.00000020938404} + rotation: {x: -1.627143e-12, y: 2.9132255e-13, z: 6.181722e-13, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightShoulder + parentName: mixamorig:Spine2 + position: {x: 0.06768826, y: 0.09955788, z: 0} + rotation: {x: 0.50000036, y: 0.49999973, z: -0.50000024, w: 0.4999998} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightArm + parentName: mixamorig:RightShoulder + position: {x: 0.0000000068783694, y: 0.12941314, z: 0.00000002578629} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightForeArm + parentName: mixamorig:RightArm + position: {x: 0.00000010367964, y: 0.25094423, z: -0.000000005029048} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHand + parentName: mixamorig:RightForeArm + position: {x: 0.00000091794897, y: 0.27632713, z: -0.00000030149582} + rotation: {x: -0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandIndex1 + parentName: mixamorig:RightHand + position: {x: -0.024831852, y: 0.07828305, z: 0.000998709} + rotation: {x: -0.0000005066395, y: -0, z: 0.0000007599592, w: 1} + scale: {x: 0.9999999, y: 1, z: 0.9999999} + - name: mixamorig:RightHandIndex2 + parentName: mixamorig:RightHandIndex1 + position: {x: -0.00000001111125, y: 0.04441161, z: -0.00000059573154} + rotation: {x: -0.000000014901161, y: 1.8873791e-14, z: -0.000000014901161, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandIndex3 + parentName: mixamorig:RightHandIndex2 + position: {x: -0.000000012268687, y: 0.027323138, z: -0.00000035731298} + rotation: {x: -0.0000056624413, y: 6.2938543e-12, z: -0.00000397861, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandIndex4 + parentName: mixamorig:RightHandIndex3 + position: {x: 0.0000000018306582, y: 0.027131611, z: -0.00000034546693} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandMiddle1 + parentName: mixamorig:RightHand + position: {x: -0.005283898, y: 0.078889884, z: 0.0009987073} + rotation: {x: -0.00000055134296, y: -0.000000029802322, z: 0.00000059604645, + w: 1} + scale: {x: 0.9999999, y: 1, z: 0.9999999} + - name: mixamorig:RightHandMiddle2 + parentName: mixamorig:RightHandMiddle1 + position: {x: -0.00000000370721, y: 0.04559344, z: -0.00000030703194} + rotation: {x: -0.000000029802262, y: 5.32907e-15, z: 0.000000029802246, w: 1} + scale: {x: 1, y: 1, z: 1.0000001} + - name: mixamorig:RightHandMiddle3 + parentName: mixamorig:RightHandMiddle2 + position: {x: 0.000000009176926, y: 0.030072333, z: -0.00000030523952} + rotation: {x: -0, y: -0, z: 1.5881834e-22, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandMiddle4 + parentName: mixamorig:RightHandMiddle3 + position: {x: 0.00000016974272, y: 0.029982252, z: 0.000000056589112} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandPinky1 + parentName: mixamorig:RightHand + position: {x: 0.03041353, y: 0.068045184, z: 0.0009987167} + rotation: {x: 0.000005990267, y: -0.000000029802322, z: 0.00000074505806, w: 1} + scale: {x: 0.9999999, y: 1, z: 0.9999999} + - name: mixamorig:RightHandPinky2 + parentName: mixamorig:RightHandPinky1 + position: {x: 0.0000000060457386, y: 0.034459334, z: -0.00000028000215} + rotation: {x: -0.000010088086, y: -7.3896445e-12, z: -0.0000024884937, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandPinky3 + parentName: mixamorig:RightHandPinky2 + position: {x: 0.0000000082569835, y: 0.021660123, z: -0.00000046924174} + rotation: {x: -0.0000066161156, y: -2.0090596e-12, z: -0.000002324581, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandPinky4 + parentName: mixamorig:RightHandPinky3 + position: {x: 3.306879e-11, y: 0.022409303, z: -0.000000021943743} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandRing1 + parentName: mixamorig:RightHand + position: {x: 0.013966673, y: 0.07569204, z: 0.000998471} + rotation: {x: 0.0000012218952, y: -0.000000029802322, z: 0.0000002682209, w: 1} + scale: {x: 0.9999999, y: 1, z: 0.9999999} + - name: mixamorig:RightHandRing2 + parentName: mixamorig:RightHandRing1 + position: {x: -3.6257858e-10, y: 0.04258623, z: -0.00000079344716} + rotation: {x: -0, y: -0, z: 7.993606e-15, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandRing3 + parentName: mixamorig:RightHandRing2 + position: {x: 0.00000005486614, y: 0.027464794, z: -0.00000036051335} + rotation: {x: -0.0000073611736, y: 1.9753088e-12, z: 1.9895197e-13, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandRing4 + parentName: mixamorig:RightHandRing3 + position: {x: -0.0000000050864424, y: 0.02699997, z: -0.000000031501802} + rotation: {x: -1.3571364e-12, y: -7.1054265e-15, z: -6.394883e-14, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:RightHandThumb1 + parentName: mixamorig:RightHand + position: {x: -0.036861885, y: 0.015437997, z: 0.00094370253} + rotation: {x: 0.0034954543, y: -0.000067561865, z: 0.4756712, w: 0.87961626} + scale: {x: 0.9999999, y: 1, z: 0.9999999} + - name: mixamorig:RightHandThumb2 + parentName: mixamorig:RightHandThumb1 + position: {x: 0.010904432, y: 0.037607055, z: -0.0000007831257} + rotation: {x: -0.0000021781307, y: 0.0000012647943, z: -0.17773637, w: 0.9840782} + scale: {x: 1.0000002, y: 1.0000004, z: 1.0000002} + - name: mixamorig:RightHandThumb3 + parentName: mixamorig:RightHandThumb2 + position: {x: -4.4113374e-10, y: 0.02915672, z: -0.00000044944045} + rotation: {x: -0.00000011920907, y: -0.000000059604467, z: -1.7543496e-13, w: 1} + scale: {x: 1.0000001, y: 1, z: 1.0000001} + - name: mixamorig:RightHandThumb4 + parentName: mixamorig:RightHandThumb3 + position: {x: -0.00000021005964, y: 0.034589972, z: -0.000000030675526} + rotation: {x: -0, y: -0, z: -5.929231e-21, w: 1} + scale: {x: 1.0000002, y: 1.0000002, z: 1.0000002} + - name: mixamorig:Neck + parentName: mixamorig:Spine2 + position: {x: 0.00000013200449, y: 0.17428434, z: -0.00000010058284} + rotation: {x: -0, y: 3.1907927e-30, z: -2.3962439e-23, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Head + parentName: mixamorig:Neck + position: {x: -0.0000000013002822, y: 0.106102824, z: -0.0000000037252903} + rotation: {x: -0, y: -8.811665e-29, z: 6.6174484e-22, w: 1} + scale: {x: 0.95139265, y: 0.95139265, z: 0.95139265} + - name: mixamorig:HeadTop_End + parentName: mixamorig:Head + position: {x: -1.5009823e-15, y: 0.16043971, z: -0.00000002074769} + rotation: {x: -0.00000006465881, y: 0.0000000646588, z: 4.1807628e-15, w: 1} + scale: {x: 1, y: 1, z: 1} + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 1 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scared_mixamo.fbx + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scenes.meta b/Assets/External/Rokoko/Scenes.meta new file mode 100644 index 00000000..35b67425 --- /dev/null +++ b/Assets/External/Rokoko/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c60823a4bc8e94644b7be6544524e375 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene.unity b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene.unity new file mode 100644 index 00000000..0af7fde0 --- /dev/null +++ b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94dd47217ec2b1abe4058c949b7b04bf4460296a663cf6fed6e2db12f7dbc949 +size 48531 diff --git a/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene.unity.meta b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene.unity.meta new file mode 100644 index 00000000..0a63a77f --- /dev/null +++ b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene.unity.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 39c928cd83eadf94dbb0246812856c50 +timeCreated: 1495451914 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scenes/RokokoPluginExampleScene.unity + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActors.unity b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActors.unity new file mode 100644 index 00000000..a89c6782 --- /dev/null +++ b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActors.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21dba9a642781f9bdc2b44841473c98180b88b19ec18bd1d993740d9d60a8ea7 +size 122341 diff --git a/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActors.unity.meta b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActors.unity.meta new file mode 100644 index 00000000..54bca35e --- /dev/null +++ b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActors.unity.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 9bbf3850d36255447872fa09883079f7 +timeCreated: 1495451914 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActors.unity + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActorsSettings.lighting b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActorsSettings.lighting new file mode 100644 index 00000000..3cfc742f --- /dev/null +++ b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActorsSettings.lighting @@ -0,0 +1,64 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: RokokoPluginExampleScene_CustomActorsSettings + serializedVersion: 4 + m_GIWorkflowMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 0.06 + m_UsingShadowmask: 0 + m_BakeBackend: 0 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 256 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentMIS: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_PVRTiledBaking: 0 diff --git a/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActorsSettings.lighting.meta b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActorsSettings.lighting.meta new file mode 100644 index 00000000..cc696b81 --- /dev/null +++ b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActorsSettings.lighting.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: eb9b09d13157371409b54a1cd26c7a89 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomActorsSettings.lighting + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomCharacter.unity b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomCharacter.unity new file mode 100644 index 00000000..b761c54c --- /dev/null +++ b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomCharacter.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f81d612d6c59f8d172aa60d7e4eb7778696d817f1d9758a64bbc8451d533fde3 +size 126157 diff --git a/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomCharacter.unity.meta b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomCharacter.unity.meta new file mode 100644 index 00000000..75d4b67e --- /dev/null +++ b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomCharacter.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: b96d8b765d6e2094fa4c28de7d0d9154 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_CustomCharacter.unity + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_DriftCorrection.unity b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_DriftCorrection.unity new file mode 100644 index 00000000..3cd73f50 --- /dev/null +++ b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_DriftCorrection.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e42c6d8800ecd03aba3f5f414be311eea1cedbfda120ae7c6c4a46893a8e4324 +size 122341 diff --git a/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_DriftCorrection.unity.meta b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_DriftCorrection.unity.meta new file mode 100644 index 00000000..fe17fa32 --- /dev/null +++ b/Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_DriftCorrection.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: febc4bc1f8bdf9048ace337c41422d1b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scenes/RokokoPluginExampleScene_DriftCorrection.unity + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts.meta b/Assets/External/Rokoko/Scripts.meta new file mode 100644 index 00000000..305566fd --- /dev/null +++ b/Assets/External/Rokoko/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8eafea70406ce3b4aa2eeec06db40b2a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Core.meta b/Assets/External/Rokoko/Scripts/Core.meta new file mode 100644 index 00000000..332934b7 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7417c9a13b2bd14ab1fea1d7ffa8e0a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Core/ARKitBlendshapes.cs b/Assets/External/Rokoko/Scripts/Core/ARKitBlendshapes.cs new file mode 100644 index 00000000..2777229f --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/ARKitBlendshapes.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Rokoko.Core +{ + [System.Serializable] + public enum BlendShapes + { + eyeBlinkLeft = 0, + eyeLookDownLeft = 1, + eyeLookInLeft = 2, + eyeLookOutLeft = 3, + eyeLookUpLeft = 4, + eyeSquintLeft = 5, + eyeWideLeft = 6, + eyeBlinkRight = 7, + eyeLookDownRight = 8, + eyeLookInRight = 9, + eyeLookOutRight = 10, + eyeLookUpRight = 11, + eyeSquintRight = 12, + eyeWideRight = 13, + jawForward = 14, + jawLeft = 15, + jawRight = 16, + jawOpen = 17, + mouthClose = 18, + mouthFunnel = 19, + mouthPucker = 20, + mouthLeft = 21, + mouthRight = 22, + mouthSmileLeft = 23, + mouthSmileRight = 24, + mouthFrownLeft = 25, + mouthFrownRight = 26, + mouthDimpleLeft = 27, + mouthDimpleRight = 28, + mouthStretchLeft = 29, + mouthStretchRight = 30, + mouthRollLower = 31, + mouthRollUpper = 32, + mouthShrugLower = 33, + mouthShrugUpper = 34, + mouthPressLeft = 35, + mouthPressRight = 36, + mouthLowerDownLeft = 37, + mouthLowerDownRight = 38, + mouthUpperUpLeft = 39, + mouthUpperUpRight = 40, + browDownLeft = 41, + browDownRight = 42, + browInnerUp = 43, + browOuterUpLeft = 44, + browOuterUpRight = 45, + cheekPuff = 46, + cheekSquintLeft = 47, + cheekSquintRight = 48, + noseSneerLeft = 49, + noseSneerRight = 50, + tongueOut = 51, + size = 52 + } +} diff --git a/Assets/External/Rokoko/Scripts/Core/ARKitBlendshapes.cs.meta b/Assets/External/Rokoko/Scripts/Core/ARKitBlendshapes.cs.meta new file mode 100644 index 00000000..f98258bb --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/ARKitBlendshapes.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 9f43a84310e40244c970e95e1d934b1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/ARKitBlendshapes.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI.meta new file mode 100644 index 00000000..57b07e35 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 721c3fac4cc3fbe4188ec6ec27cb4708 +folderAsset: yes +timeCreated: 1564996317 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/CalibrateRequestData.cs b/Assets/External/Rokoko/Scripts/Core/CommandAPI/CalibrateRequestData.cs new file mode 100644 index 00000000..139e05cd --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/CalibrateRequestData.cs @@ -0,0 +1,63 @@ +using UnityEngine; + +namespace Rokoko.CommandAPI +{ + public enum BalancedNewtonPose + { + // tpose + TPose = 0, + + // straight-arms-down + StraightArmsDown = 1, + + // straight-arms-forward + StraightArmsForward = 2, + } + + public class CalibrateRequestData + { + [SerializeField] private string device_id; // the live input device hubName that the command should target + + /// + /// Count down in seconds before calibration is executed. -1 will use default setting. + /// + [SerializeField] private int countdown_delay = -1; // countdown in seconds + + /// + /// Skip Smartsuit Pro calibration. + /// + [SerializeField] private bool skip_suit = false; // should we skip suit from a processing (calibration) + + /// + /// Skip Smartgloves calibration. + /// + [SerializeField] private bool skip_gloves = false; // should we skip gloves from a processing (calibration) + + /// + /// + /// + [SerializeField] private bool use_custom_pose = false; + + // useCustomPose is not Set, pose will be changed calibration + [SerializeField] private BalancedNewtonPose pose = BalancedNewtonPose.StraightArmsDown; + + // public members + + public string DeviceId { get => device_id; set => device_id = value; } + public int CountDownDelay { get => countdown_delay; set => countdown_delay = value; } + public bool SkipSuit { get => skip_suit; set => skip_suit = value; } + public bool SkipGloves { get => skip_gloves; set => skip_gloves = value; } + public bool UseCustomPose { get => use_custom_pose; set => use_custom_pose = value; } + public BalancedNewtonPose Pose { get => pose; set => pose = value; } + + public override string ToString() + { + return DeviceId; + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/CalibrateRequestData.cs.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI/CalibrateRequestData.cs.meta new file mode 100644 index 00000000..eb217218 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/CalibrateRequestData.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: c24db3c2889d1834e8281156d81a2e47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/CommandAPI/CalibrateRequestData.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/InfoRequestData.cs b/Assets/External/Rokoko/Scripts/Core/CommandAPI/InfoRequestData.cs new file mode 100644 index 00000000..a972ec8d --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/InfoRequestData.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +namespace Rokoko.CommandAPI +{ + public class InfoRequestData + { + [SerializeField] private bool devices_info = true; // return a list of scene input devices names + [SerializeField] private bool clips_info = true; // return a list of scene clip names + [SerializeField] private bool actors_info = false; // return a list of scene actor names + [SerializeField] private bool characters_info = false; // return a list of scene character names + + // public members + + public bool DoDevicesInfo { get => devices_info; set => devices_info = value; } + public bool DoClipsInfo { get => clips_info; set => clips_info = value; } + public bool DoActorsInfo { get => actors_info; set => actors_info = value; } + public bool DoCharactersInfo { get => characters_info; set => characters_info = value; } + + + public override string ToString() + { + return $"{DoDevicesInfo}, {DoClipsInfo}, {DoActorsInfo}, {DoCharactersInfo}"; + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/InfoRequestData.cs.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI/InfoRequestData.cs.meta new file mode 100644 index 00000000..797dfa76 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/InfoRequestData.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 3f377ed4cb6af8a4fbbc2574919a49b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/CommandAPI/InfoRequestData.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/LivestreamRequestData.cs b/Assets/External/Rokoko/Scripts/Core/CommandAPI/LivestreamRequestData.cs new file mode 100644 index 00000000..5834985f --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/LivestreamRequestData.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace Rokoko.CommandAPI +{ + public class LivestreamRequestData + { + [SerializeField] private bool enabled = true; // control a state of a custom live stream target + + // public members + + public bool Enabled { get => enabled; set => enabled = value; } + + public override string ToString() + { + return $"{Enabled}"; + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/LivestreamRequestData.cs.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI/LivestreamRequestData.cs.meta new file mode 100644 index 00000000..010adf20 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/LivestreamRequestData.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 6f7120b96083d6b428b292676b191d01 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/CommandAPI/LivestreamRequestData.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/PlaybackRequestData.cs b/Assets/External/Rokoko/Scripts/Core/CommandAPI/PlaybackRequestData.cs new file mode 100644 index 00000000..be5fc965 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/PlaybackRequestData.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using System; + +namespace Rokoko.CommandAPI +{ + [Flags] + public enum CommandAPIPlaybackChange : int + { + None = 0, + IsPlaying = 1, + CurrentTime = 2, + GoToFirstFrame = 4, + GoToLastFrame = 8, + PlaybackSpeed = 16, + }; + + + public class PlaybackRequestData + { + [SerializeField] private bool is_playing = false; // defines the timeline play / pause state + [SerializeField] private double current_time = 0.0; // defines a current time on a timeline + [SerializeField] private float playback_speed = 1.0f;// defines a playback speed multiplier + [SerializeField] private CommandAPIPlaybackChange change_flag; + + // public members + + public bool IsPlaying { get => is_playing; set => is_playing = value; } + public double CurrentTime { get => current_time; set => current_time = value; } + public float PlaybackSpeed { get => playback_speed; set => playback_speed = value; } + public CommandAPIPlaybackChange ChangeFlag { get => change_flag; set => change_flag = value; } + + + public override string ToString() + { + return $"{IsPlaying}, {CurrentTime}, {PlaybackSpeed}, {ChangeFlag}"; + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/PlaybackRequestData.cs.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI/PlaybackRequestData.cs.meta new file mode 100644 index 00000000..3b2d31f1 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/PlaybackRequestData.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: c917bc2391c5c7b4a99a645b00f893d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/CommandAPI/PlaybackRequestData.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/RecordingRequestData.cs b/Assets/External/Rokoko/Scripts/Core/CommandAPI/RecordingRequestData.cs new file mode 100644 index 00000000..a2cc051d --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/RecordingRequestData.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +namespace Rokoko.CommandAPI +{ + public class RecordingRequestData + { + [SerializeField] private string filename = ""; // actor clip name or filename for recording + [SerializeField] private string time = "00:00:00:00"; // recording start/stop time in SMPTE format + [SerializeField] private float frame_rate = 30.0f; + [SerializeField] private bool back_to_live = false; + + // public members + + public string Filename { get => filename; set => filename = value; } + public string Time { get => time; set => time = value; } + public float FrameRate { get => frame_rate; set => frame_rate = value; } + public bool BackToLive { get => back_to_live; set => back_to_live = value; } + + + public override string ToString() + { + return $"{Filename}, {Time}, {FrameRate}, {BackToLive}"; + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/RecordingRequestData.cs.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI/RecordingRequestData.cs.meta new file mode 100644 index 00000000..7d4afee2 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/RecordingRequestData.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 8920424d8d5d2df4d93ee8ec0078a52b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/CommandAPI/RecordingRequestData.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/RequestData.cs b/Assets/External/Rokoko/Scripts/Core/CommandAPI/RequestData.cs new file mode 100644 index 00000000..dc95ce51 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/RequestData.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace Rokoko.CommandAPI +{ + public class RequestData + { + public string smartsuit = ""; + public float countdown_delay = 4; + public string filename = ""; + + public override string ToString() + { + return smartsuit + "," + countdown_delay + ", " + filename; + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/RequestData.cs.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI/RequestData.cs.meta new file mode 100644 index 00000000..e7f9dd81 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/RequestData.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d5ec1713e30442a19275b49b0572d01b +timeCreated: 1552057825 +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/CommandAPI/RequestData.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/ResetActorRequestData.cs b/Assets/External/Rokoko/Scripts/Core/CommandAPI/ResetActorRequestData.cs new file mode 100644 index 00000000..b137ad2d --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/ResetActorRequestData.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace Rokoko.CommandAPI +{ + public class ResetActorRequestData + { + [SerializeField] private string device_id = ""; + + public string DeviceId { get => device_id; set => device_id = value; } + + public override string ToString() + { + return DeviceId; + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/ResetActorRequestData.cs.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI/ResetActorRequestData.cs.meta new file mode 100644 index 00000000..42a735f8 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/ResetActorRequestData.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: aaa297b495b9e8542b01ab24f0359765 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/CommandAPI/ResetActorRequestData.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPI.cs b/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPI.cs new file mode 100644 index 00000000..70948e7e --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPI.cs @@ -0,0 +1,188 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace Rokoko.CommandAPI +{ + public class StudioCommandAPI : StudioCommandAPIBase + { + [Header("Show CommandAPI response (Optional)")] + [SerializeField] private Text responseText = null; + + [Header("The IP address of Studio. Leave default for same machine")] + public string ipAddress = "127.0.0.1"; + + [Header("Common Parameters")] + [Tooltip("The actor name or hardware device id in the scene")] + [SerializeField] public string deviceId; + + [Header("Calibration Parameters")] + [Tooltip("The calibration countdown delay")] + [SerializeField] public int countDownDelay = 3; + + [Tooltip("The calibration skip suit")] + [SerializeField] public bool calibrationSkipSuit = false; + + [Tooltip("The calibration skip gloves")] + [SerializeField] public bool calibrationSkipGloves = false; + + [Header("Recording Parameters")] + [Tooltip("Recording Clip Name")] + [SerializeField] public string clipName = "NewClip"; + + [Tooltip("Recording Start / Stop Time (SMPTE)")] + [SerializeField] public string recordingTime = "00:00:00:00"; + + [Tooltip("Return To Live Mode When Recording Is Done")] + [SerializeField] public bool backToLive = false; + + [Header("Tracker Parameters")] + [SerializeField] public string BoneAttached = ""; + [SerializeField] public float TrackerTimeout = 2f; + [SerializeField] public bool IsQueryOnly = false; + + [SerializeField] public Transform TrackerTransform; + + [Header("Playback Parameters")] + [SerializeField] public bool IsPlaying = true; + + [Header("Livestream Parameters")] + [SerializeField] public bool IsStreaming = true; + + [Header("Info Parameters")] + [SerializeField] public bool RequestDevicesInfo = true; + [SerializeField] public bool RequestClipsInfo = true; + [SerializeField] public bool RequestActorsInfo = true; + [SerializeField] public bool RequestCharactersInfo = true; + + protected override string IP => ipAddress; + protected override RequestData GetRequestData() => new RequestData(); + protected override ResetActorRequestData GetResetActorRequestData() + { + var data = new ResetActorRequestData() {DeviceId = deviceId}; + if (debug) + { + Debug.Log(data.ToJson()); + } + return data; + } + + protected override CalibrateRequestData GetCalibrateRequestData() + { + var data = new CalibrateRequestData() + { + DeviceId = deviceId, + CountDownDelay = countDownDelay, + SkipSuit = calibrationSkipSuit, + SkipGloves = calibrationSkipGloves + }; + if (debug) + { + Debug.Log(data.ToJson()); + } + return data; + } + + protected override RecordingRequestData GetRecordingRequestData() + { + var data = new RecordingRequestData() + { + Filename = clipName, + Time = recordingTime, + BackToLive = backToLive + }; + if (debug) + { + Debug.Log(data.ToJson()); + } + return data; + } + + protected override TrackerRequestData GetTrackerRequestData() + { + var data = new TrackerRequestData() + { + DeviceId = deviceId, + BoneAttached = BoneAttached, + Position = TrackerTransform?.position ?? Vector3.zero, + Rotation = TrackerTransform?.rotation ?? Quaternion.identity, + Timeout = TrackerTimeout, + IsQueryOnly = IsQueryOnly + }; + if (debug) + { + Debug.Log(data.ToJson()); + } + return data; + } + + protected override PlaybackRequestData GetPlaybackRequestData() + { + var data = new PlaybackRequestData() + { + IsPlaying = IsPlaying, + CurrentTime = 0.0, + PlaybackSpeed = 1.0f, + ChangeFlag = CommandAPIPlaybackChange.IsPlaying + }; + if (debug) + { + Debug.Log(data.ToJson()); + } + return data; + } + + protected override LivestreamRequestData GetLivestreamRequestData() + { + var data = new LivestreamRequestData() + { + Enabled = IsStreaming + }; + if (debug) + { + Debug.Log(data.ToJson()); + } + return data; + } + + protected override InfoRequestData GetInfoRequestData() + { + var data = new InfoRequestData() + { + DoDevicesInfo = RequestDevicesInfo, + DoClipsInfo = RequestClipsInfo, + DoActorsInfo = RequestActorsInfo, + DoCharactersInfo = RequestCharactersInfo + }; + if (debug) + { + Debug.Log(data.ToJson()); + } + return data; + } + + private void Start() + { + SetStatusText(""); + } + + protected override void OnCommmandResponse(ResponseMessage response) + { + base.OnCommmandResponse(response); + SetStatusText(response.description); + } + + protected override void OnCommmandError(string error) + { + base.OnCommmandError(error); + SetStatusText($"{error}\nPlease make sure Rokoko Studio is running and Command API is enabled (Menu->Settings->Command API->Enabled).\nCheck also the receiving port and API key in both Rokoko Studio and Unity plugin."); + } + + private void SetStatusText(string text) + { + if (responseText == null) return; + responseText.transform.parent.gameObject.SetActive(!string.IsNullOrEmpty(text)); + responseText.text = text; + LayoutRebuilder.ForceRebuildLayoutImmediate(responseText.transform.parent as RectTransform); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPI.cs.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPI.cs.meta new file mode 100644 index 00000000..63a3ae19 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPI.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f38fe44d6bfb49dbabd93aea7da287ed +timeCreated: 1565078235 +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPI.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPIBase.cs b/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPIBase.cs new file mode 100644 index 00000000..5c2947e0 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPIBase.cs @@ -0,0 +1,151 @@ +using System.Collections; +using System.Collections.Generic; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.Networking; + +namespace Rokoko.CommandAPI +{ + /// + /// This component provides access to Studio's Command API. + /// + public abstract class StudioCommandAPIBase : MonoBehaviour + { + [Tooltip("The api key as defined in Studio. Settings->Command API->API key")] + public string apiKey; + + [Tooltip("The port number as defined in Studio. Settings->Command API->Listen port")] + public int port; + + [Header("Log extra info")] + public bool debug; + + protected abstract string IP { get; } + + public bool IsTrackerRequestInProgress = false; + + // legacy only commands + [ContextMenu("Unicast")] + public async void Unicast() => + await SendRequest("unicast", GetRequestData().ToJson()); + + [ContextMenu("Broadcast")] + public async void Broadcast() => + await SendRequest("broadcast", GetRequestData().ToJson()); + + [ContextMenu("Restart Smartsuit")] + public async void RestartSmartsuit() + => await SendRequest("Restart", GetRequestData().ToJson()); + + // commands that are compatible with Studio and Studio Legacy + + [ContextMenu("Start Recording")] + public async void StartRecording() => + await SendRequest("recording/start", GetRecordingRequestData().ToJson()); + + [ContextMenu("Stop Recording")] + public async void StopRecording() => + await SendRequest("recording/stop", GetRecordingRequestData().ToJson()); + + [ContextMenu("Calibrate all")] + public async void CalibrateAll() => + await SendRequest("calibrate", GetCalibrateRequestData().ToJson()); + + [ContextMenu("Reset Actor")] + public async void ResetActor() + => await SendRequest("resetactor", GetResetActorRequestData().ToJson()); + + // commands which are not presented in Studio Legacy + + [ContextMenu("Tracker")] + public async void Tracker() => + await SendRequest("tracker", GetTrackerRequestData().ToJson()); + + [ContextMenu("Info")] + public async void Info() => + await SendRequest("info", GetInfoRequestData().ToJson()); + + [ContextMenu("Playback")] + public async void PlaybackPlay() => + await SendRequest("playback", GetPlaybackRequestData().ToJson()); + + [ContextMenu("Livestream")] + public async void ToggleLiveStream() => + await SendRequest("livestream", GetLivestreamRequestData().ToJson()); + + + private Task SendRequest(string endpoint, string json) + { + var tcs = new TaskCompletionSource(); + StartCoroutine(SendRequestEnum(endpoint, json, tcs)); + return tcs.Task; + } + + protected abstract RequestData GetRequestData(); + protected abstract CalibrateRequestData GetCalibrateRequestData(); + protected abstract ResetActorRequestData GetResetActorRequestData(); + protected abstract RecordingRequestData GetRecordingRequestData(); + protected abstract TrackerRequestData GetTrackerRequestData(); + protected abstract PlaybackRequestData GetPlaybackRequestData(); + protected abstract LivestreamRequestData GetLivestreamRequestData(); + protected abstract InfoRequestData GetInfoRequestData(); + + private IEnumerator SendRequestEnum(string endpoint, string json, TaskCompletionSource task) + { + IsTrackerRequestInProgress = true; + + string url = $"http://{IP}:{port}/v1/{apiKey}/{endpoint}"; + if (debug) + { + Debug.Log("Sending request: " + url, this.transform); + Debug.Log("Sending data: " + json, this.transform); + } + + // convert json string to byte + byte[] formData = System.Text.Encoding.UTF8.GetBytes(json); + UnityWebRequest request = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST); + UploadHandlerRaw uploadHandler = new UploadHandlerRaw(formData); + request.uploadHandler = uploadHandler; + request.downloadHandler = new DownloadHandlerBuffer(); + request.SetRequestHeader("Content-Type", "application/json"); + yield return request.SendWebRequest(); + + string body = request.downloadHandler.text; + if (request.result != UnityWebRequest.Result.ConnectionError) + { + if (debug) + Debug.Log($"Response: {request.responseCode}: {body}", this.transform); + OnCommmandResponse(JsonUtility.FromJson(body)); + } + else + { + if (debug) + Debug.LogWarning($"There was an error sending request: {request.error}\n{body}", this.transform); + OnCommmandError(request.error); + } + task.SetResult(body); + request.Dispose(); + uploadHandler.Dispose(); + IsTrackerRequestInProgress = false; + } + + protected virtual void OnCommmandResponse(ResponseMessage response) + { + + } + + protected virtual void OnCommmandError(string error) + { + + } + } + + [System.Serializable] + public class ResponseMessage + { + public string description; + public string response_code; + public long startTime; + public dynamic[] parameters; + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPIBase.cs.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPIBase.cs.meta new file mode 100644 index 00000000..c31bd4b5 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPIBase.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 23be0de9580d445683a1b786461b328d +timeCreated: 1565078385 +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/CommandAPI/StudioCommandAPIBase.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/TrackerRequestData.cs b/Assets/External/Rokoko/Scripts/Core/CommandAPI/TrackerRequestData.cs new file mode 100644 index 00000000..4411f6c8 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/TrackerRequestData.cs @@ -0,0 +1,75 @@ +using UnityEngine; + +namespace Rokoko.CommandAPI +{ + public class TrackerRequestData + { + // the struct is used to serialize attributes the same way as System.Numberics do + [System.Serializable] + private struct TrackerVector3 + { + [SerializeField] public float X; + [SerializeField] public float Y; + [SerializeField] public float Z; + + public TrackerVector3(float x, float y, float z) + { + X = x; + Y = y; + Z = z; + } + } + [System.Serializable] + private struct TrackerQuaternion + { + [SerializeField] public float X; + [SerializeField] public float Y; + [SerializeField] public float Z; + [SerializeField] public float W; + [SerializeField] public bool IsIdentity; + + public TrackerQuaternion(float x, float y, float z, float w) + { + X = x; + Y = y; + Z = z; + W = w; + IsIdentity = false; + } + } + + // tracker attributes + + [SerializeField] private string device_id = ""; + [SerializeField] private string bone_attached = ""; + [SerializeField] private TrackerVector3 position; + [SerializeField] private TrackerQuaternion rotation; + [SerializeField] private float timeout = 2f; + [SerializeField] private bool is_query_only = false; + + + // public members + + public string DeviceId { get => device_id; set => device_id = value; } + public string BoneAttached { get => bone_attached; set => bone_attached = value; } + public Vector3 Position { + get => new Vector3(position.X, position.Y, position.Z); + set => position = new TrackerVector3(value.x, value.y, value.z); } + public Quaternion Rotation { + get => new Quaternion(rotation.X, rotation.Y, rotation.Z, rotation.W); + set => rotation = new TrackerQuaternion(value.x, value.y, value.z, value.w); } + public float Timeout { get => timeout; set => timeout = value; } + public bool IsQueryOnly { get => is_query_only; set => is_query_only = value; } + + + public override string ToString() + { + return $"{DeviceId}, {BoneAttached}, {Position}, {Rotation}, {Timeout}"; + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/CommandAPI/TrackerRequestData.cs.meta b/Assets/External/Rokoko/Scripts/Core/CommandAPI/TrackerRequestData.cs.meta new file mode 100644 index 00000000..98298b81 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/CommandAPI/TrackerRequestData.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 4ba10db8e030fa44da4ccae2d8caea44 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/CommandAPI/TrackerRequestData.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/JsonLiveSerializerV3.cs b/Assets/External/Rokoko/Scripts/Core/JsonLiveSerializerV3.cs new file mode 100644 index 00000000..f6be07d9 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/JsonLiveSerializerV3.cs @@ -0,0 +1,266 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko.Core +{ + #region Data Structs + + [System.Serializable] + public class LiveFrame_v4 + { + // Header + public float version; + // Target fps + public float fps; + public SceneFrame scene; + } + + [System.Serializable] + public struct SceneFrame + { + public float timestamp; + public ActorFrame[] actors; + public CharacterFrame[] characters; + public PropFrame[] props; + } + + [System.Serializable] + public struct ActorFrame + { + public string name; + public int[] color; + public Meta meta; + public Dimensions dimensions; + + public BodyFrame body; + public FaceFrame face; + + [System.Serializable] + public struct Meta + { + public bool hasGloves; + public bool hasLeftGlove; + public bool hasRightGlove; + public bool hasBody; + public bool hasFace; + } + + [System.Serializable] + public struct Dimensions + { + public float totalHeight; + public float hipHeight; + } + } + + [System.Serializable] + public class CharacterFrame + { + public string name; + public CharacterJointFrame[] joints; + public BlendshapesFrame blendshapes; + } + + [System.Serializable] + public class BlendshapesFrame + { + public string[] names; + public float[] values; + } + + [System.Serializable] + public class PropFrame + { + public string name; + public int[] color; + public int type; + public Vector3Frame position; + public Vector4Frame rotation; + } + + + [System.Serializable] + public class BodyFrame + { + public ActorJointFrame hip; + public ActorJointFrame spine; + public ActorJointFrame chest; + public ActorJointFrame neck; + public ActorJointFrame head; + public ActorJointFrame leftShoulder; + public ActorJointFrame leftUpperArm; + public ActorJointFrame leftLowerArm; + public ActorJointFrame leftHand; + public ActorJointFrame rightShoulder; + public ActorJointFrame rightUpperArm; + public ActorJointFrame rightLowerArm; + public ActorJointFrame rightHand; + + public ActorJointFrame leftUpLeg; + public ActorJointFrame leftLeg; + public ActorJointFrame leftFoot; + public ActorJointFrame leftToe; + public ActorJointFrame leftToeEnd; + + public ActorJointFrame rightUpLeg; + public ActorJointFrame rightLeg; + public ActorJointFrame rightFoot; + public ActorJointFrame rightToe; + public ActorJointFrame rightToeEnd; + + + public ActorJointFrame leftThumbProximal; + public ActorJointFrame leftThumbMedial; + public ActorJointFrame leftThumbDistal; + public ActorJointFrame leftThumbTip; + + public ActorJointFrame leftIndexProximal; + public ActorJointFrame leftIndexMedial; + public ActorJointFrame leftIndexDistal; + public ActorJointFrame leftIndexTip; + + public ActorJointFrame leftMiddleProximal; + public ActorJointFrame leftMiddleMedial; + public ActorJointFrame leftMiddleDistal; + public ActorJointFrame leftMiddleTip; + + public ActorJointFrame leftRingProximal; + public ActorJointFrame leftRingMedial; + public ActorJointFrame leftRingDistal; + public ActorJointFrame leftRingTip; + + public ActorJointFrame leftLittleProximal; + public ActorJointFrame leftLittleMedial; + public ActorJointFrame leftLittleDistal; + public ActorJointFrame leftLittleTip; + + + public ActorJointFrame rightThumbProximal; + public ActorJointFrame rightThumbMedial; + public ActorJointFrame rightThumbDistal; + public ActorJointFrame rightThumbTip; + + public ActorJointFrame rightIndexProximal; + public ActorJointFrame rightIndexMedial; + public ActorJointFrame rightIndexDistal; + public ActorJointFrame rightIndexTip; + + public ActorJointFrame rightMiddleProximal; + public ActorJointFrame rightMiddleMedial; + public ActorJointFrame rightMiddleDistal; + public ActorJointFrame rightMiddleTip; + public ActorJointFrame rightRingProximal; + public ActorJointFrame rightRingMedial; + public ActorJointFrame rightRingDistal; + public ActorJointFrame rightRingTip; + + public ActorJointFrame rightLittleProximal; + public ActorJointFrame rightLittleMedial; + public ActorJointFrame rightLittleDistal; + public ActorJointFrame rightLittleTip; + } + + [System.Serializable] + public class FaceFrame + { + public string faceId; + public float eyeBlinkLeft; + public float eyeLookDownLeft; + public float eyeLookInLeft; + public float eyeLookOutLeft; + public float eyeLookUpLeft; + public float eyeSquintLeft; + public float eyeWideLeft; + public float eyeBlinkRight; + public float eyeLookDownRight; + public float eyeLookInRight; + public float eyeLookOutRight; + public float eyeLookUpRight; + public float eyeSquintRight; + public float eyeWideRight; + public float jawForward; + public float jawLeft; + public float jawRight; + public float jawOpen; + public float mouthClose; + public float mouthFunnel; + public float mouthPucker; + public float mouthLeft; + public float mouthRight; + public float mouthSmileLeft; + public float mouthSmileRight; + public float mouthFrownLeft; + public float mouthFrownRight; + public float mouthDimpleLeft; + public float mouthDimpleRight; + public float mouthStretchLeft; + public float mouthStretchRight; + public float mouthRollLower; + public float mouthRollUpper; + public float mouthShrugLower; + public float mouthShrugUpper; + public float mouthPressLeft; + public float mouthPressRight; + public float mouthLowerDownLeft; + public float mouthLowerDownRight; + public float mouthUpperUpLeft; + public float mouthUpperUpRight; + public float browDownLeft; + public float browDownRight; + public float browInnerUp; + public float browOuterUpLeft; + public float browOuterUpRight; + public float cheekPuff; + public float cheekSquintLeft; + public float cheekSquintRight; + public float noseSneerLeft; + public float noseSneerRight; + public float tongueOut; + } + + [System.Serializable] + public struct Vector3Frame + { + public float x; + public float y; + public float z; + + public override string ToString() => $"VF3: {x}, {y}, {z} :"; + } + + [System.Serializable] + public struct Vector4Frame + { + public float x; + public float y; + public float z; + public float w; + + public override string ToString() => $"VF4: {x}, {y}, {z}, {w} :"; + } + + [System.Serializable] + public struct ActorJointFrame + { + public Vector3Frame position; + public Vector4Frame rotation; + } + + [System.Serializable] + public struct CharacterJointFrame + { + public string name; + public int parent; //!< parent index in a chracter frame joints array (-1 for the root) + public Vector3Frame position; + public Vector4Frame rotation; + } + + #endregion + + public enum PropType + { + NORMAL = 0, + CAMERA = 1, + STICK = 2 + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/JsonLiveSerializerV3.cs.meta b/Assets/External/Rokoko/Scripts/Core/JsonLiveSerializerV3.cs.meta new file mode 100644 index 00000000..dd4b558f --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/JsonLiveSerializerV3.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 61943ed9a14442b4aa24885f7e8a735e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/JsonLiveSerializerV3.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/LZ4Wrapper.cs b/Assets/External/Rokoko/Scripts/Core/LZ4Wrapper.cs new file mode 100644 index 00000000..e2ea8e75 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/LZ4Wrapper.cs @@ -0,0 +1,79 @@ +using System; +using System.Runtime.InteropServices; + +namespace Rokoko.Core +{ + public class LZ4Wrapper + { + public static class LZ4_API + { +#if (UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR + private const string LUADLL = "__Internal"; +#else + private const string LUADLL = "lz4"; +#endif + + [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)] + public static extern int Unity_LZ4_compress(IntPtr src, int srcSize, IntPtr dst, int dstCapacity, int compressionLevel); + + [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)] + public static extern int Unity_LZ4_compressSize(int srcSize, int compressionLevel); + + [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)] + public static extern int Unity_LZ4_uncompressSize(IntPtr srcBuffer, int srcSize); + + [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)] + public static extern int Unity_LZ4_decompress(IntPtr src, int srcSize, IntPtr dst, int dstCapacity); + } + + public static byte[] Compress(byte[] input, int compressionLevel = 3) + { + byte[] result = null; + + if (input != null && input.Length > 0) + { + int maxSize = LZ4_API.Unity_LZ4_compressSize(input.Length, compressionLevel); + if (maxSize > 0) + { + var buffer = new byte[maxSize]; + var srcHandle = GCHandle.Alloc(input, GCHandleType.Pinned); + var dstHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned); + var actualSize = LZ4_API.Unity_LZ4_compress(srcHandle.AddrOfPinnedObject(), input.Length, dstHandle.AddrOfPinnedObject(), maxSize, compressionLevel); + + if (actualSize > 0) + { + result = new byte[actualSize]; + Array.Copy(buffer, result, actualSize); + } + + srcHandle.Free(); + dstHandle.Free(); + } + } + + return result; + } + + public static byte[] Decompress(byte[] input) + { + byte[] result = null; + + if (input != null && input.Length > 0) + { + var srcHandle = GCHandle.Alloc(input, GCHandleType.Pinned); + var uncompressSize = LZ4_API.Unity_LZ4_uncompressSize(srcHandle.AddrOfPinnedObject(), input.Length); + result = new byte[uncompressSize]; + var dstHandle = GCHandle.Alloc(result, GCHandleType.Pinned); + if (LZ4_API.Unity_LZ4_decompress(srcHandle.AddrOfPinnedObject(), input.Length, dstHandle.AddrOfPinnedObject(), result.Length) != 0) + { + result = null; + } + + srcHandle.Free(); + dstHandle.Free(); + } + + return result; + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/LZ4Wrapper.cs.meta b/Assets/External/Rokoko/Scripts/Core/LZ4Wrapper.cs.meta new file mode 100644 index 00000000..03ba1d95 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/LZ4Wrapper.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 8b437a01c2f9fde489b7a18b6bac93d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/LZ4Wrapper.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/StudioReceiver.cs b/Assets/External/Rokoko/Scripts/Core/StudioReceiver.cs new file mode 100644 index 00000000..f0359119 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/StudioReceiver.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using UnityEngine; + +namespace Rokoko.Core +{ + public class StudioReceiver : UDPReceiver + { + public event EventHandler onStudioDataReceived; + public bool useLZ4Compression = true; + public bool verbose = false; + + protected override void OnDataReceived(byte[] data, IPEndPoint endPoint) + { + LiveFrame_v4 liveFrame_V4 = null; + try + { + base.OnDataReceived(data, endPoint); + byte[] uncompressed; + + if (useLZ4Compression) + { + // Decompress LZ4 + uncompressed = LZ4Wrapper.Decompress(data); + if (uncompressed == null || uncompressed.Length == 0) + { + Debug.LogError("Incoming data are in bad format. Please ensure you are using JSON v3 as forward data format"); + return; + } + } + else + { + uncompressed = data; + } + + // Convert from Json + string text = System.Text.Encoding.UTF8.GetString(uncompressed); + if (verbose) + { + Debug.Log(text); + } + liveFrame_V4 = JsonUtility.FromJson(text); + + if (liveFrame_V4 == null) + { + Debug.LogError("Incoming data are in bad format. Please ensure you are using JSON v3 as forward data format"); + return; + } + + if (verbose) + { + int numberOfActors = (liveFrame_V4.scene.actors != null) ? liveFrame_V4.scene.actors.Length : 0; + int numberOfChars = (liveFrame_V4.scene.characters != null) ? liveFrame_V4.scene.characters.Length : 0; + + if (numberOfActors == 0 && numberOfChars == 0) + { + Debug.LogError("Incoming data has no actors and no characters in the stream"); + } + } + } + catch { } + + onStudioDataReceived?.Invoke(this, liveFrame_V4); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Core/StudioReceiver.cs.meta b/Assets/External/Rokoko/Scripts/Core/StudioReceiver.cs.meta new file mode 100644 index 00000000..eb5d098c --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/StudioReceiver.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 8cb1306ef28465d49b3d63bc97885931 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/StudioReceiver.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Core/UDPReceiver.cs b/Assets/External/Rokoko/Scripts/Core/UDPReceiver.cs new file mode 100644 index 00000000..ec8169f0 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/UDPReceiver.cs @@ -0,0 +1,109 @@ +using System.Net; +using System.Net.Sockets; +using System.Threading; +using UnityEngine; + +namespace Rokoko.Core +{ + public class UDPReceiver + { + public int sendPortNumber = 14043; + public int receivePortNumber = 14043; + public int bufferSize = 65000; + + private UdpClient client; + private Thread thread; + + public virtual void Initialize() + { + try + { + client = new UdpClient(receivePortNumber); + client.Client.SendBufferSize = bufferSize; + } + catch (SocketException) + { + Debug.LogError($"Seem like port:{receivePortNumber} is already in use. Is plugin running already in other application?"); + } + catch(System.Exception ex) + { + throw ex; + } + } + + public virtual void StartListening() + { + if (client == null) + { + Debug.LogError("UDPReceiver - Client isn't initialized."); + return; + } + + if (thread != null) + { + Debug.LogWarning("UDPReceiver - Cannot start listening. Thread is already listening"); + return; + } + + StartListeningThread(); + } + + public virtual void StopListening() + { + thread?.Abort(); + client?.Close(); + } + + public virtual void Dispose() + { + StopListening(); + client?.Dispose(); + client = null; + } + + public void Send(string ipAddress, byte[] data) + { + Send(ipAddress, data, sendPortNumber); + } + + public void Send(string ipAddress, byte[] data, int portNumber) + { + client?.Send(data, data.Length, new IPEndPoint(IPAddress.Parse(ipAddress), portNumber)); + } + + public void Send(IPEndPoint endPoint, byte[] data) + { + client?.Send(data, data.Length, endPoint); + } + + public bool IsListening() => thread != null; + + protected virtual void OnDataReceived(byte[] data, IPEndPoint endPoint) { } + + private void StartListeningThread() + { + thread = new Thread(ListenToUDP); + thread.IsBackground = true; + thread.Start(); + } + + private void ListenToUDP() + { + while (client != null) + { + try + { + IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, receivePortNumber); + byte[] data = client.Receive(ref endpoint); + OnDataReceived(data, endpoint); + } + catch (ThreadAbortException) { } + catch (SocketException) { } + catch (System.Exception ex) + { + Debug.Log(ex.Message); + } + } + } + } +} diff --git a/Assets/External/Rokoko/Scripts/Core/UDPReceiver.cs.meta b/Assets/External/Rokoko/Scripts/Core/UDPReceiver.cs.meta new file mode 100644 index 00000000..35e3748b --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Core/UDPReceiver.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 9af01aaa3a63e7a4499c28b22dd1b20d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Core/UDPReceiver.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono.meta b/Assets/External/Rokoko/Scripts/Mono.meta new file mode 100644 index 00000000..6801a5a6 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fd28f925f7e38846913c7631653e97a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs.meta b/Assets/External/Rokoko/Scripts/Mono/Inputs.meta new file mode 100644 index 00000000..2fc218d1 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b9e800521674004693e0a38816ed885 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/Actor.cs b/Assets/External/Rokoko/Scripts/Mono/Inputs/Actor.cs new file mode 100644 index 00000000..28179da4 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/Actor.cs @@ -0,0 +1,510 @@ +using Rokoko.Core; +using Rokoko.Helper; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace Rokoko.Inputs +{ + public class Actor : MonoBehaviour + { + [System.Serializable] + public enum BoneMappingEnum + { + Animator, + Custom + } + + [System.Serializable] + public enum RotationSpace + { + Offset, + World, + Self + } + + [System.Serializable] + public enum PoseApplicationScope + { + All, // Apply to all bones + HandsAndFingers, // Apply to hands (wrists) and all fingers + FingersOnly // Apply to fingers only + } + + [HideInInspector] public string profileName = "DemoProfile"; + + [HideInInspector] public BoneMappingEnum boneMapping; + [HideInInspector] public Animator animator; + [HideInInspector] public HumanBoneMapping customBoneMapping; + + [Header("Convert Space")] + [Tooltip("Convert Studio data to Unity position space")] + public Space positionSpace = Space.Self; + [Tooltip("Convert Studio data to Unity rotation space")] + public RotationSpace rotationSpace = RotationSpace.Offset; + + [Space(10)] + [Header("Pose Application")] + [Tooltip("Select which bones to apply motion capture data to")] + public PoseApplicationScope poseScope = PoseApplicationScope.All; + + [Space(10)] + [Tooltip("Calculate Model's height comparing to Actor's and position the Hips accordingly.\nGreat tool to align with the floor")] + public bool adjustHipHeightBasedOnStudioActor = false; + + [Space(10)] + [Header("Thumb Offset")] + [Tooltip("Apply additional rotation offset to thumb proximal bones after all updates")] + public bool applyThumbOffset = true; + [Tooltip("Additional rotation offset for left thumb proximal bone (in degrees)")] + public Vector3 leftThumbProximalOffset = new Vector3(0, -30, -30); + [Tooltip("Additional rotation offset for right thumb proximal bone (in degrees)")] + public Vector3 rightThumbProximalOffset = new Vector3(0, 30, 30); + + [HideInInspector] public Face face = null; + + [Header("Log extra info")] + public bool debug = false; + + [HideInInspector] + public HumanTPoseDictionary characterTPose = new HumanTPoseDictionary(); + + [HideInInspector] + public bool isValidTpose = false; + + protected Dictionary animatorHumanBones = new Dictionary(); + private Dictionary offsets = new Dictionary(); + + private float hipHeight = 0; + + #region Initialize + + protected virtual void Awake() + { + if(animator == null) + { + Debug.LogError($"Actor {this.name} isn't configured", this.transform); + return; + } + + // OptitrackSkeletonAnimator_Mingle 컴포넌트에서 스켈레톤 이름 가져오기 시도 + var optitrackComponent = this.GetComponent("OptitrackSkeletonAnimator_Mingle"); + if (optitrackComponent != null) + { + // Reflection을 사용하여 SkeletonAssetName 속성 가져오기 + var skeletonNameField = optitrackComponent.GetType().GetField("SkeletonAssetName"); + if (skeletonNameField != null && skeletonNameField.GetValue(optitrackComponent) is string skeletonName) + { + profileName = skeletonName; + } + } + + if (!animator.isHuman) + { + Debug.LogError("Model is not marked as Humanoid. Please go in model inspector, under Rig tab and select AnimationType as Humanoid.", this.transform); + return; + } + + InitializeAnimatorHumanBones(); + InitializeBoneOffsets(); + + // Get the Hip height independent of parent transformations + hipHeight = GetBone(HumanBodyBones.Hips).parent.InverseTransformVector(GetBone(HumanBodyBones.Hips).localPosition).y; + hipHeight = Mathf.Abs(hipHeight); + + if (characterTPose.Count == 0) + Debug.LogError($"Character {this.name} is not set to TPose. Please ensure you assign a valid TPose in Editor before playing", this.transform); + } + + /// + /// Register Actor override in StudioManager. + /// + private void Start() + { + if (animator != null && !animator.isHuman) return; + + if (!string.IsNullOrEmpty(profileName)) + StudioManager.AddActorOverride(this); + } + + [ContextMenu("CalcualteTPose")] + public void CalculateTPose() + { + InitializeAnimatorHumanBones(); + InitializeCharacterTPose(); + + isValidTpose = IsValidTPose(); + } + + private void InitializeBonesIfNeeded() + { + if (boneMapping == BoneMappingEnum.Animator && animatorHumanBones.Count == 0) + InitializeAnimatorHumanBones(); + } + + /// + /// Store Character's T Pose. + /// + protected void InitializeCharacterTPose() + { + characterTPose.Clear(); + foreach (HumanBodyBones bone in RokokoHelper.HumanBodyBonesArray) + { + if (bone == HumanBodyBones.LastBone) break; + Transform boneTransform = GetBone(bone); + + if (boneTransform == null) continue; + + characterTPose.Add(bone, boneTransform.rotation); + } + } + + /// + /// Calculate Character's offset based on its T Pose and Newton's T Pose. + /// + protected void InitializeBoneOffsets() + { + // Calculate offsets based on Smartsuit T pose + offsets = CalculateRotationOffsets(); + } + + /// + /// Cache the bone transforms from Animator. + /// + protected void InitializeAnimatorHumanBones() + { + if (boneMapping != BoneMappingEnum.Animator) return; + if (animator == null || !animator.isHuman) return; + animatorHumanBones.Clear(); + + foreach (HumanBodyBones bone in RokokoHelper.HumanBodyBonesArray) + { + if (bone == HumanBodyBones.LastBone) break; + animatorHumanBones.Add(bone, animator.GetBoneTransform(bone)); + } + } + + #endregion + + #region Public Methods + + /// + /// Update Skeleton and Face data based on ActorFrame. + /// + public virtual void UpdateActor(ActorFrame actorFrame) + { + if (animator == null || !animator.isHuman) return; + + profileName = actorFrame.name; + + bool updateBody = actorFrame.meta.hasBody || actorFrame.meta.hasGloves; + + // Update skeleton from data + if (updateBody) + UpdateSkeleton(actorFrame); + + // Update face from data + if (actorFrame.meta.hasFace) + face?.UpdateFace(actorFrame.face); + } + + /// + /// Create Idle/Default Actor. + /// + public virtual void CreateIdle(string actorName) + { + this.profileName = actorName; + } + + public float GetActorHeight() + { + InitializeBonesIfNeeded(); + + Transform head = GetBone(HumanBodyBones.Head); + Transform foot = GetBone(HumanBodyBones.LeftFoot); + if (head == null || foot == null) + return 1.8f; + + // Add space for head mesh + return Vector3.Distance(head.position, foot.position) + 0.25f; + } + + #endregion + + #region Internal Logic + + private bool IsValidTPose() + { + InitializeBonesIfNeeded(); + + Transform rightHand = GetBone(HumanBodyBones.RightHand); + Transform leftHand = GetBone(HumanBodyBones.LeftHand); + + Transform spine = GetBone(HumanBodyBones.Spine); + Transform chest = GetBone(HumanBodyBones.Chest); + + if(rightHand == null || leftHand == null || spine == null || chest == null) + { + Debug.LogError("Cant validate actor height. Bone is missing", this.transform); + return false; + } + + Vector3 armsDirection = rightHand.position - leftHand.position; + armsDirection.Normalize(); + + Vector3 spineDirection = chest.position - spine.position; + spineDirection.Normalize(); + + return Vector3.Dot(armsDirection, Vector3.right) > 0.99f && + Vector3.Dot(spineDirection, Vector3.up) > 0.99f; + } + + /// + /// Get Transform from a given HumanBodyBones. + /// + private Transform GetBone(HumanBodyBones bone) + { + switch (boneMapping) + { + case BoneMappingEnum.Animator: + return animatorHumanBones[bone]; + case BoneMappingEnum.Custom: + return customBoneMapping.customBodyBones[(int)bone]; + } + + return null; + } + + /// + /// Update Humanoid Skeleton based on BodyData. + /// + protected void UpdateSkeleton(ActorFrame actorFrame) + { + foreach (HumanBodyBones bone in RokokoHelper.HumanBodyBonesArray) + { + if (bone == HumanBodyBones.LastBone) break; + + // Skip bones that are not in the selected scope + if (!ShouldApplyToBone(bone)) + continue; + + ActorJointFrame? boneFrame = actorFrame.body.GetBoneFrame(bone); + if (boneFrame != null) + { + bool shouldUpdatePosition = bone == HumanBodyBones.Hips; + + Quaternion worldRotation = boneFrame.Value.rotation.ToQuaternion(); + Vector3 worldPosition = boneFrame.Value.position.ToVector3(); + + // Offset Hip bone + if (shouldUpdatePosition && adjustHipHeightBasedOnStudioActor) + worldPosition = new Vector3(worldPosition.x, worldPosition.y - (actorFrame.dimensions.hipHeight - hipHeight), worldPosition.z); + + UpdateBone(bone, worldPosition, worldRotation, shouldUpdatePosition, positionSpace, rotationSpace); + } + } + + // Apply thumb offsets after all bone updates are complete + if (applyThumbOffset) + { + ApplyThumbOffsets(); + } + } + + /// + /// Determine if a bone should be included based on the selected pose scope. + /// + private bool ShouldApplyToBone(HumanBodyBones bone) + { + switch (poseScope) + { + case PoseApplicationScope.All: + return true; + + case PoseApplicationScope.HandsAndFingers: + return IsHandOrFingerBone(bone); + + case PoseApplicationScope.FingersOnly: + return IsFingerBone(bone); + + default: + return true; + } + } + + /// + /// Check if the bone is a hand (wrist) or finger bone. + /// + private bool IsHandOrFingerBone(HumanBodyBones bone) + { + return bone == HumanBodyBones.LeftHand || bone == HumanBodyBones.RightHand || IsFingerBone(bone); + } + + /// + /// Check if the bone is a finger bone. + /// + private bool IsFingerBone(HumanBodyBones bone) + { + return bone == HumanBodyBones.LeftThumbProximal || bone == HumanBodyBones.LeftThumbIntermediate || bone == HumanBodyBones.LeftThumbDistal || + bone == HumanBodyBones.LeftIndexProximal || bone == HumanBodyBones.LeftIndexIntermediate || bone == HumanBodyBones.LeftIndexDistal || + bone == HumanBodyBones.LeftMiddleProximal || bone == HumanBodyBones.LeftMiddleIntermediate || bone == HumanBodyBones.LeftMiddleDistal || + bone == HumanBodyBones.LeftRingProximal || bone == HumanBodyBones.LeftRingIntermediate || bone == HumanBodyBones.LeftRingDistal || + bone == HumanBodyBones.LeftLittleProximal || bone == HumanBodyBones.LeftLittleIntermediate || bone == HumanBodyBones.LeftLittleDistal || + bone == HumanBodyBones.RightThumbProximal || bone == HumanBodyBones.RightThumbIntermediate || bone == HumanBodyBones.RightThumbDistal || + bone == HumanBodyBones.RightIndexProximal || bone == HumanBodyBones.RightIndexIntermediate || bone == HumanBodyBones.RightIndexDistal || + bone == HumanBodyBones.RightMiddleProximal || bone == HumanBodyBones.RightMiddleIntermediate || bone == HumanBodyBones.RightMiddleDistal || + bone == HumanBodyBones.RightRingProximal || bone == HumanBodyBones.RightRingIntermediate || bone == HumanBodyBones.RightRingDistal || + bone == HumanBodyBones.RightLittleProximal || bone == HumanBodyBones.RightLittleIntermediate || bone == HumanBodyBones.RightLittleDistal; + } + + /// + /// Apply additional rotation offsets to thumb proximal bones. + /// + protected void ApplyThumbOffsets() + { + // Apply left thumb offset + Transform leftThumbTransform = GetBone(HumanBodyBones.LeftThumbProximal); + if (leftThumbTransform != null) + { + Quaternion leftOffset = Quaternion.Euler(leftThumbProximalOffset); + leftThumbTransform.rotation *= leftOffset; + } + + // Apply right thumb offset + Transform rightThumbTransform = GetBone(HumanBodyBones.RightThumbProximal); + if (rightThumbTransform != null) + { + Quaternion rightOffset = Quaternion.Euler(rightThumbProximalOffset); + rightThumbTransform.rotation *= rightOffset; + } + } + + /// + /// Update Human bone. + /// + protected void UpdateBone(HumanBodyBones bone, Vector3 worldPosition, Quaternion worldRotation, bool updatePosition, Space positionSpace, RotationSpace rotationSpace) + { + // Find Humanoid bone + Transform boneTransform = GetBone(bone); + + // Check if bone is valid + if (boneTransform == null) + { + if (debug) + Debug.LogWarning($"Couldn't find Transform for bone:{bone} in {boneMapping}Mapping component", this.transform); + return; + } + + // Update position + if (updatePosition) + { + if (positionSpace == Space.World || boneTransform.parent == null) + { + boneTransform.position = worldPosition; + } + else + { + boneTransform.position = boneTransform.parent.rotation * worldPosition + boneTransform.parent.position; + } + } + + // Update Rotation + if (rotationSpace == RotationSpace.World) + { + boneTransform.rotation = worldRotation; + } + else if (rotationSpace == RotationSpace.Self) + { + if (transform.parent != null) + boneTransform.rotation = this.transform.parent.rotation * worldRotation; + else + boneTransform.rotation = worldRotation; + } + else + { + boneTransform.rotation = GetBone(HumanBodyBones.Hips).parent.rotation * worldRotation * offsets[bone]; + } + } + + #endregion + + /// + /// Get the rotational difference between 2 humanoid T poses. + /// + private Dictionary CalculateRotationOffsets() + { + Dictionary offsets = new Dictionary(); + foreach (HumanBodyBones bone in RokokoHelper.HumanBodyBonesArray) + { + if (!characterTPose.Contains(bone)) continue; + Quaternion rotation = Quaternion.Inverse(SmartsuitTPose[bone]) * characterTPose[bone]; + + offsets.Add(bone, rotation); + } + return offsets; + } + + /// + /// Get Smartsuit T pose data + /// + private static Dictionary SmartsuitTPose = new Dictionary() { + {HumanBodyBones.Hips, new Quaternion(0.000f, 0.000f, 0.000f, 1.000f)}, + {HumanBodyBones.LeftUpperLeg, new Quaternion(0.000f, 0.707f, 0.000f, 0.707f)}, + {HumanBodyBones.RightUpperLeg, new Quaternion(0.000f, -0.707f, 0.000f, 0.707f)}, + {HumanBodyBones.LeftLowerLeg, new Quaternion(0.000f, 0.707f, 0.000f, 0.707f)}, + {HumanBodyBones.RightLowerLeg, new Quaternion(0.000f, -0.707f, 0.000f, 0.707f)}, + {HumanBodyBones.LeftFoot, new Quaternion(0.000f, 0.707f, -0.707f, 0.000f)}, + {HumanBodyBones.RightFoot, new Quaternion(0.000f, -0.707f, 0.707f, 0.000f)}, + {HumanBodyBones.Spine, new Quaternion(0.000f, 0.000f, 1.000f, 0.000f)}, + {HumanBodyBones.Chest, new Quaternion(0.000f, 0.000f, 1.000f, 0.000f)}, + {HumanBodyBones.Neck, new Quaternion(0.000f, 0.000f, 1.000f, 0.000f)}, + {HumanBodyBones.Head, new Quaternion(0.000f, 0.000f, 1.000f, 0.000f)}, + {HumanBodyBones.LeftShoulder, new Quaternion(0.000f, 0.000f, 0.707f, -0.707f)}, + {HumanBodyBones.RightShoulder, new Quaternion(0.000f, 0.000f, 0.707f, 0.707f)}, + {HumanBodyBones.LeftUpperArm, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.RightUpperArm, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.LeftLowerArm, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.RightLowerArm, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.LeftHand, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.RightHand, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.LeftToes, new Quaternion(0.000f, 0.707f, -0.707f, 0.000f)}, + {HumanBodyBones.RightToes, new Quaternion(0.000f, -0.707f, 0.707f, 0.000f)}, + {HumanBodyBones.LeftEye, new Quaternion(0.000f, 0.000f, 0.000f, 0.000f)}, + {HumanBodyBones.RightEye, new Quaternion(0.000f, 0.000f, 0.000f, 0.000f)}, + {HumanBodyBones.Jaw, new Quaternion(0.000f, 0.000f, 0.000f, 0.000f)}, + {HumanBodyBones.LeftThumbProximal, new Quaternion(-0.561f, -0.701f, 0.430f, -0.092f)}, + {HumanBodyBones.LeftThumbIntermediate, new Quaternion(-0.653f, -0.653f, 0.271f, -0.271f)}, + {HumanBodyBones.LeftThumbDistal, new Quaternion(-0.653f, -0.653f, 0.271f, -0.271f)}, + {HumanBodyBones.LeftIndexProximal, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftIndexIntermediate, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftIndexDistal, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftMiddleProximal, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftMiddleIntermediate, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftMiddleDistal, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftRingProximal, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftRingIntermediate, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftRingDistal, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftLittleProximal, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftLittleIntermediate, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.LeftLittleDistal, new Quaternion(-0.500f, -0.500f, 0.500f, -0.500f)}, + {HumanBodyBones.RightThumbProximal, new Quaternion(0.561f, -0.701f, 0.430f, 0.092f)}, + {HumanBodyBones.RightThumbIntermediate, new Quaternion(0.653f, -0.653f, 0.271f, 0.271f)}, + {HumanBodyBones.RightThumbDistal, new Quaternion(0.653f, -0.653f, 0.271f, 0.271f)}, + {HumanBodyBones.RightIndexProximal, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightIndexIntermediate, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightIndexDistal, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightMiddleProximal, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightMiddleIntermediate, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightMiddleDistal, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightRingProximal, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightRingIntermediate, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightRingDistal, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightLittleProximal, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightLittleIntermediate, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.RightLittleDistal, new Quaternion(0.500f, -0.500f, 0.500f, 0.500f)}, + {HumanBodyBones.UpperChest, new Quaternion(0.000f, 0.000f, 1.000f, 0.000f)} + }; + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/Actor.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Inputs/Actor.cs.meta new file mode 100644 index 00000000..ce11fe37 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/Actor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 0b3d830ef66b485459e15992199096b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Inputs/Actor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/ActorNewton.cs b/Assets/External/Rokoko/Scripts/Mono/Inputs/ActorNewton.cs new file mode 100644 index 00000000..5fc4bf47 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/ActorNewton.cs @@ -0,0 +1,91 @@ +using Rokoko.Core; +using Rokoko.Helper; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko.Inputs +{ + public class ActorNewton : Actor + { + private const int HEAD_TO_MATERIAL_INDEX = 5; + private const int JOINT_TO_MATERIAL_INDEX = 1; + + [Header("Newton materials")] + [SerializeField] protected Renderer meshRenderer = null; + [SerializeField] private Material bodyMaterial = null; + [SerializeField] private Material faceInvisibleMaterial = null; + public bool autoHideFaceWhenInactive = false; + + protected Material[] meshMaterials; + + #region Initialize + + protected override void Awake() + { + base.Awake(); + InitializeMaterials(); + } + + private void InitializeMaterials() + { + // Clone the material, so not to affect other objects + bodyMaterial = Material.Instantiate(bodyMaterial); + meshMaterials = new Material[meshRenderer.materials.Length]; + for (int i = 0; i < meshMaterials.Length; i++) + { + // Keep joint material as source + if (i == JOINT_TO_MATERIAL_INDEX) + meshMaterials[i] = meshRenderer.materials[i]; + else + meshMaterials[i] = bodyMaterial; + } + meshRenderer.materials = meshMaterials; + } + + #endregion + + #region Public Methods + + public override void CreateIdle(string actorName) + { + base.CreateIdle(actorName); + + if (autoHideFaceWhenInactive) + face?.gameObject.SetActive(false); + } + + public override void UpdateActor(ActorFrame actorFrame) + { + base.UpdateActor(actorFrame); + + bool updateBody = actorFrame.meta.hasBody || actorFrame.meta.hasGloves; + + // Enable/Disable body renderer + meshRenderer.enabled = updateBody; + + // Update material color and visibility + UpdateMaterialColors(actorFrame); + + // Enable/Disable face renderer + if (autoHideFaceWhenInactive) + face?.gameObject.SetActive(actorFrame.meta.hasFace); + } + + #endregion + + #region Internal Logic + + private void UpdateMaterialColors(ActorFrame actorFrame) + { + bodyMaterial.color = actorFrame.color.ToColor(); + meshMaterials[HEAD_TO_MATERIAL_INDEX] = (actorFrame.meta.hasFace) ? faceInvisibleMaterial : bodyMaterial; + meshRenderer.materials = meshMaterials; + + face?.SetColor(actorFrame.color.ToColor()); + } + + #endregion + + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/ActorNewton.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Inputs/ActorNewton.cs.meta new file mode 100644 index 00000000..9d8d266e --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/ActorNewton.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 7694c1eb6726a2d49a01558f46c8ef83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Inputs/ActorNewton.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/BlendShapesMapping.cs b/Assets/External/Rokoko/Scripts/Mono/Inputs/BlendShapesMapping.cs new file mode 100644 index 00000000..1aa9a773 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/BlendShapesMapping.cs @@ -0,0 +1,13 @@ +using Rokoko.Core; +using Rokoko.Helper; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko.Inputs +{ + public class BlendShapesMapping : MonoBehaviour + { + public BlendshapesDictionary blendshapeNames = new BlendshapesDictionary(); + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/BlendShapesMapping.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Inputs/BlendShapesMapping.cs.meta new file mode 100644 index 00000000..41ca0a7b --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/BlendShapesMapping.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 07a3f22e5c105474e9725d5438558a99 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Inputs/BlendShapesMapping.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/Character.cs b/Assets/External/Rokoko/Scripts/Mono/Inputs/Character.cs new file mode 100644 index 00000000..111b83da --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/Character.cs @@ -0,0 +1,183 @@ +using Rokoko.Core; +using Rokoko.Helper; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace Rokoko.Inputs +{ + public class Character : MonoBehaviour + { + [System.Serializable] + public enum RotationSpace + { + Offset, + World, + Self + } + + [HideInInspector] + public string profileName = ""; + + [HideInInspector] public Animator animator; + + [Header("Convert Space")] + [Tooltip("Convert Studio data to Unity position space")] + public Space positionSpace = Space.World; + [Tooltip("Convert Studio data to Unity rotation space")] + public RotationSpace rotationSpace = RotationSpace.World; + + [Tooltip("A rotation pre rotation applied")] + public Vector3 PreRotation = new Vector3(0.0f, 0.0f, 0.0f); + + [Tooltip("A rotation post rotation applied")] + public Vector3 PostRotation = new Vector3(0.0f, 0.0f, 0.0f); + + [Space(10)] + [Tooltip("Calculate Model's height comparing to Actor's and position the Hips accordingly.\nGreat tool to align with the floor")] + public bool adjustHipHeightBasedOnStudioActor = false; + + public string hipsName = "pelvis"; + + [HideInInspector] public Face face = null; + + [Header("Log extra info")] + public bool debug = false; + + + private Dictionary _skeletonJoints = new Dictionary(); + + #region Initialize + + protected virtual void Awake() + { + if(animator == null) + { + Debug.LogError($"Character {this.name} isn't configured", this.transform); + //return; + } + + InitializeSkeletonJoints(); + } + + private void InitializeSkeletonJoints() + { + _skeletonJoints.Clear(); + Transform[] transforms = GetComponentsInChildren(); + for (int i=0; i() != null) + continue; + + _skeletonJoints.Add(transforms[i].name, transforms[i]); + } + } + + /// + /// Register Actor override in StudioManager. + /// + private void Start() + { + //if (animator != null && !animator.isHuman) return; + + if (!string.IsNullOrEmpty(profileName)) + StudioManager.AddCharacterOverride(this); + } + + + #endregion + + #region Public Methods + + /// + /// Update Skeleton and Face data based on ActorFrame. + /// + public virtual void UpdateCharacter(CharacterFrame frame) + { + //if (animator == null || !animator.isHuman) return; + + profileName = frame.name; + + // Update skeleton from data + UpdateSkeleton(frame); + + if (frame.blendshapes != null && frame.blendshapes.names != null && frame.blendshapes.names.Length > 0) + { + face?.UpdateFace(frame.blendshapes.names, frame.blendshapes.values); + } + else if (debug) + { + Debug.LogError($"Character {this.name} face has no blendshapes"); + } + } + + /// + /// Create Idle/Default Actor. + /// + public virtual void CreateIdle(string actorName) + { + this.profileName = actorName; + } + + #endregion + + #region Internal Logic + + + /// + /// Update Humanoid Skeleton based on BodyData. + /// + protected void UpdateSkeleton(CharacterFrame frame) + { + for (int i=0; i + /// Update Human bone. + /// + protected void UpdateBone(Transform boneTransform, Vector3 worldPosition, Quaternion worldRotation, bool updatePosition, Space positionSpace, RotationSpace rotationSpace) + { + // Update position + if (updatePosition) + { + if (positionSpace == Space.World || boneTransform.parent == null) + { + boneTransform.position = worldPosition; + } + else + { + boneTransform.position = boneTransform.parent.rotation * worldPosition + boneTransform.parent.position; + } + } + + // Update Rotation + if (rotationSpace == RotationSpace.World) + { + boneTransform.rotation = Quaternion.Euler(PreRotation.x, PreRotation.y, PreRotation.z) * worldRotation * Quaternion.Euler(PostRotation.x, PostRotation.y, PostRotation.z); + } + else if (rotationSpace == RotationSpace.Self) + { + if (transform.parent != null) + boneTransform.rotation = this.transform.parent.rotation * worldRotation; + else + boneTransform.rotation = worldRotation; + } + } + + #endregion + + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/Character.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Inputs/Character.cs.meta new file mode 100644 index 00000000..6b264ff9 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/Character.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 8b7631c1f06f4144abfa5da7ebc0f80c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Inputs/Character.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/Face.cs b/Assets/External/Rokoko/Scripts/Mono/Inputs/Face.cs new file mode 100644 index 00000000..3667703c --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/Face.cs @@ -0,0 +1,111 @@ +using Rokoko.Core; +using Rokoko.Helper; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko.Inputs +{ + public class Face : MonoBehaviour + { + [System.Serializable] + public enum FaceMappingEnum + { + ARKit, + Custom + } + + private const int HEAD_TO_MATERIAL_INDEX = 3; + + [HideInInspector] public FaceMappingEnum blendshapeMapping; + [HideInInspector] public BlendShapesMapping blendshapeCustomMap; + + [HideInInspector] public SkinnedMeshRenderer meshRenderer = null; + + [Header("Log extra info")] + public bool debug = false; + + private Dictionary blendshapeNamesToIndex = new Dictionary(); + + private void Start() + { + if (meshRenderer == null) + { + Debug.LogError("Unassigned SkinnedMeshRenderer for face", this.transform); + return; + } + + blendshapeNamesToIndex = meshRenderer.sharedMesh.GetAllBlendshapes(); + } + + public void UpdateFace(FaceFrame faceFrame) + { + if (meshRenderer == null) return; + + float[] blendshapeValues = faceFrame.GetValues(); + for (int i = 0; i < RokokoHelper.BlendshapesArray.Length; i++) + { + // Get blendshape name + string blendShapeName; + + // Set default blendshape name + if (blendshapeMapping == FaceMappingEnum.ARKit) + { + blendShapeName = RokokoHelper.BlendshapesArray[i].ToString(); + } + // Get custom blendshape name + else + { + blendShapeName = blendshapeCustomMap.blendshapeNames[RokokoHelper.BlendshapesArray[i]]; + } + + int blendshapeIndex = GetBlendshapeIndex(blendShapeName); + if (blendshapeIndex >= 0) + meshRenderer.SetBlendShapeWeight(blendshapeIndex, blendshapeValues[i]); + else + { + if (debug) + Debug.LogWarning($"Couldn't find blendshape name:{blendShapeName} in Mesh blendshapes (count:{meshRenderer.sharedMesh.blendShapeCount})", this.transform); + } + } + } + + public void UpdateFace(string[] names, float[] blendshapeValues) + { + if (meshRenderer == null) return; + + for (int i = 0; i < names.Length; ++i) + { + // Get blendshape name + string blendShapeName = names[i]; + + int blendshapeIndex = GetBlendshapeIndex(blendShapeName); + if (blendshapeIndex >= 0) + meshRenderer.SetBlendShapeWeight(blendshapeIndex, blendshapeValues[i]); + else + { + if (debug) + Debug.LogWarning($"Couldn't find blendshape name:{blendShapeName} in Mesh blendshapes (count:{meshRenderer.sharedMesh.blendShapeCount})", this.transform); + } + } + } + + private int GetBlendshapeIndex(string blendshape) + { + foreach (string blendshapeKey in blendshapeNamesToIndex.Keys) + { + if (blendshapeKey.Contains(blendshape.ToLower())) + return blendshapeNamesToIndex[blendshapeKey]; + } + return -1; + } + + public void SetColor(Color color) + { + if (meshRenderer == null) return; + + meshRenderer.materials[HEAD_TO_MATERIAL_INDEX].color = color; + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/Face.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Inputs/Face.cs.meta new file mode 100644 index 00000000..6754e660 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/Face.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: b6f1b7bab29ae9c4ab510759d0fbaa91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Inputs/Face.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/HumanBoneMapping.cs b/Assets/External/Rokoko/Scripts/Mono/Inputs/HumanBoneMapping.cs new file mode 100644 index 00000000..fff24d06 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/HumanBoneMapping.cs @@ -0,0 +1,11 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko.Inputs +{ + public class HumanBoneMapping : MonoBehaviour + { + public Transform[] customBodyBones = new Transform[0]; + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/HumanBoneMapping.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Inputs/HumanBoneMapping.cs.meta new file mode 100644 index 00000000..cccec490 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/HumanBoneMapping.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 4a162b99fb9dfe542b5844d7b3d7c9fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Inputs/HumanBoneMapping.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/Prop.cs b/Assets/External/Rokoko/Scripts/Mono/Inputs/Prop.cs new file mode 100644 index 00000000..b13ed19c --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/Prop.cs @@ -0,0 +1,42 @@ +using Rokoko.Core; +using Rokoko.Helper; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko.Inputs +{ + public class Prop : MonoBehaviour + { + [HideInInspector] public string propName; + public Space positionSpace = Space.Self; + public Space rotationSpace = Space.Self; + + protected virtual void Start() + { + if (!string.IsNullOrEmpty(propName)) + StudioManager.AddPropOverride(this); + } + + public virtual void UpdateProp(PropFrame propFrame) + { + propName = propFrame.name; + + if (positionSpace == Space.World) + this.transform.position = propFrame.position.ToVector3(); + else + this.transform.localPosition = propFrame.position.ToVector3(); + + Quaternion worldRotation = propFrame.rotation.ToQuaternion(); + if (rotationSpace == Space.World) + this.transform.rotation = worldRotation; + else + { + if (transform.parent != null) + this.transform.rotation = Quaternion.Inverse(transform.parent.rotation) * worldRotation; + else + this.transform.rotation = worldRotation; + } + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/Prop.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Inputs/Prop.cs.meta new file mode 100644 index 00000000..3b6c4577 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/Prop.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 8274508f93c440949969e644e7b64e65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Inputs/Prop.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/PropColor.cs b/Assets/External/Rokoko/Scripts/Mono/Inputs/PropColor.cs new file mode 100644 index 00000000..717ea412 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/PropColor.cs @@ -0,0 +1,21 @@ +using Rokoko.Core; +using Rokoko.Helper; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko.Inputs +{ + public class PropColor : Prop + { + [HideInInspector] public MeshRenderer meshRenderer; + + public override void UpdateProp(PropFrame propFrame) + { + base.UpdateProp(propFrame); + + if (meshRenderer != null) + meshRenderer.material.color = propFrame.color.ToColor(); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/Inputs/PropColor.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Inputs/PropColor.cs.meta new file mode 100644 index 00000000..650c2a58 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Inputs/PropColor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 93bc1b702e5f6fa4c9d905909f4741e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Inputs/PropColor.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/PrefabInstancer.cs b/Assets/External/Rokoko/Scripts/Mono/PrefabInstancer.cs new file mode 100644 index 00000000..72a3f5dd --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/PrefabInstancer.cs @@ -0,0 +1,46 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko +{ + public class PrefabInstancer where P : MonoBehaviour + { + private PrefabPool

pool; + private Dictionary objects; + + public PrefabInstancer(P prefab, Transform container, int poolNumber = 0) + { + pool = new PrefabPool

(prefab, container, poolNumber); + objects = new Dictionary(); + } + + public P this[T key] + { + get + { + if (!objects.ContainsKey(key)) + objects.Add(key, pool.Dequeue()); + return objects[key]; + } + } + + public bool ContainsKey(T key) => objects.ContainsKey(key); + + public bool ContainsValue(P item) => objects.ContainsValue(item); + + public IEnumerable Keys => objects.Keys; + + public IEnumerable Values => objects.Values; + + public int Count => objects.Count; + + public void Remove(T key) + { + if (!ContainsKey(key)) return; + P item = objects[key]; + objects.Remove(key); + pool.Enqueue(item); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/PrefabInstancer.cs.meta b/Assets/External/Rokoko/Scripts/Mono/PrefabInstancer.cs.meta new file mode 100644 index 00000000..9f3e543a --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/PrefabInstancer.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ded564a0c7575434ebb9c2faf540099d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/PrefabInstancer.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/PrefabPool.cs b/Assets/External/Rokoko/Scripts/Mono/PrefabPool.cs new file mode 100644 index 00000000..4c3dcd89 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/PrefabPool.cs @@ -0,0 +1,53 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko +{ + public class PrefabPool where T : MonoBehaviour + { + public int poolNumber = 3; + public T prefab; + public Transform container; + + private Queue pool = new Queue(); + + public PrefabPool(T prefab, Transform container, int poolNumber = 3) + { + this.prefab = prefab; + this.container = container; + this.poolNumber = poolNumber; + + for (int i = 0; i < poolNumber; i++) + { + Enqueue(InstantiatePrefab()); + } + } + + public T Dequeue() + { + if (pool.Count == 0) + Enqueue(InstantiatePrefab()); + T instance = pool.Dequeue(); + instance.gameObject.SetActive(true); + return instance; + } + + public void Enqueue(T instance) + { + pool.Enqueue(instance); + instance.gameObject.SetActive(false); + instance.name = prefab.name; + } + + private T InstantiatePrefab() + { + T instance = GameObject.Instantiate(prefab); + instance.transform.SetParent(container); + instance.transform.position = Vector3.zero; + instance.transform.rotation = Quaternion.identity; + instance.name = prefab.name; + return instance; + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/PrefabPool.cs.meta b/Assets/External/Rokoko/Scripts/Mono/PrefabPool.cs.meta new file mode 100644 index 00000000..0459559c --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/PrefabPool.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 47b981a3ed34dc64b9ab5ae02663b220 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/PrefabPool.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/RokokoHelper.cs b/Assets/External/Rokoko/Scripts/Mono/RokokoHelper.cs new file mode 100644 index 00000000..c00e5ccc --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/RokokoHelper.cs @@ -0,0 +1,344 @@ +using Rokoko.Core; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko.Helper +{ + public static class RokokoHelper + { + public static Vector3 ToVector3(this Vector3Frame vec3) + { + return new Vector3(vec3.x, vec3.y, vec3.z); + } + + public static Quaternion ToQuaternion(this Vector4Frame vec4) + { + return new Quaternion(vec4.x, vec4.y, vec4.z, vec4.w); + } + + public static string ToLowerFirstChar(this string input) + { + string newString = input; + if (!String.IsNullOrEmpty(newString) && Char.IsUpper(newString[0])) + newString = Char.ToLower(newString[0]) + newString.Substring(1); + return newString; + } + + public static string ToUpperFirstChar(this string input) + { + string newString = input; + if (!String.IsNullOrEmpty(newString) && Char.IsLower(newString[0])) + newString = Char.ToUpper(newString[0]) + newString.Substring(1); + return newString; + } + + public static ActorJointFrame? GetBoneFrame(this BodyFrame frame, HumanBodyBones bone) + { + switch (bone) + { + case HumanBodyBones.Hips: + return frame.hip; + case HumanBodyBones.LeftUpperLeg: + return frame.leftUpLeg; + case HumanBodyBones.RightUpperLeg: + return frame.rightUpLeg; + case HumanBodyBones.LeftLowerLeg: + return frame.leftLeg; + case HumanBodyBones.RightLowerLeg: + return frame.rightLeg; + case HumanBodyBones.LeftFoot: + return frame.leftFoot; + case HumanBodyBones.RightFoot: + return frame.rightFoot; + case HumanBodyBones.Spine: + return frame.spine; + //case HumanBodyBones.Chest: + // return frame.chest; + case HumanBodyBones.Neck: + return frame.neck; + case HumanBodyBones.Head: + return frame.head; + case HumanBodyBones.LeftShoulder: + return frame.leftShoulder; + case HumanBodyBones.RightShoulder: + return frame.rightShoulder; + case HumanBodyBones.LeftUpperArm: + return frame.leftUpperArm; + case HumanBodyBones.RightUpperArm: + return frame.rightUpperArm; + case HumanBodyBones.LeftLowerArm: + return frame.leftLowerArm; + case HumanBodyBones.RightLowerArm: + return frame.rightLowerArm; + case HumanBodyBones.LeftHand: + return frame.leftHand; + case HumanBodyBones.RightHand: + return frame.rightHand; + case HumanBodyBones.LeftToes: + return frame.leftToe; + case HumanBodyBones.RightToes: + return frame.rightToe; + //case HumanBodyBones.LeftEye: + // return frame.leftEye; + //case HumanBodyBones.RightEye: + // return frame.rightEye; + //case HumanBodyBones.Jaw: + // return frame.jaw; + case HumanBodyBones.LeftThumbProximal: + return frame.leftThumbProximal; + case HumanBodyBones.LeftThumbIntermediate: + return frame.leftThumbMedial; + case HumanBodyBones.LeftThumbDistal: + return frame.leftThumbDistal; + case HumanBodyBones.LeftIndexProximal: + return frame.leftIndexProximal; + case HumanBodyBones.LeftIndexIntermediate: + return frame.leftIndexMedial; + case HumanBodyBones.LeftIndexDistal: + return frame.leftIndexDistal; + case HumanBodyBones.LeftMiddleProximal: + return frame.leftMiddleProximal; + case HumanBodyBones.LeftMiddleIntermediate: + return frame.leftMiddleMedial; + case HumanBodyBones.LeftMiddleDistal: + return frame.leftMiddleDistal; + case HumanBodyBones.LeftRingProximal: + return frame.leftRingProximal; + case HumanBodyBones.LeftRingIntermediate: + return frame.leftRingMedial; + case HumanBodyBones.LeftRingDistal: + return frame.leftRingDistal; + case HumanBodyBones.LeftLittleProximal: + return frame.leftLittleProximal; + case HumanBodyBones.LeftLittleIntermediate: + return frame.leftLittleMedial; + case HumanBodyBones.LeftLittleDistal: + return frame.leftLittleDistal; + case HumanBodyBones.RightThumbProximal: + return frame.rightThumbProximal; + case HumanBodyBones.RightThumbIntermediate: + return frame.rightThumbMedial; + case HumanBodyBones.RightThumbDistal: + return frame.rightThumbDistal; + case HumanBodyBones.RightIndexProximal: + return frame.rightIndexProximal; + case HumanBodyBones.RightIndexIntermediate: + return frame.rightIndexMedial; + case HumanBodyBones.RightIndexDistal: + return frame.rightIndexDistal; + case HumanBodyBones.RightMiddleProximal: + return frame.rightMiddleProximal; + case HumanBodyBones.RightMiddleIntermediate: + return frame.rightMiddleMedial; + case HumanBodyBones.RightMiddleDistal: + return frame.rightMiddleDistal; + case HumanBodyBones.RightRingProximal: + return frame.rightRingProximal; + case HumanBodyBones.RightRingIntermediate: + return frame.rightRingMedial; + case HumanBodyBones.RightRingDistal: + return frame.rightRingDistal; + case HumanBodyBones.RightLittleProximal: + return frame.rightLittleProximal; + case HumanBodyBones.RightLittleIntermediate: + return frame.rightLittleMedial; + case HumanBodyBones.RightLittleDistal: + return frame.rightLittleDistal; + case HumanBodyBones.UpperChest: + return frame.chest; + } + + return null; + } + + public static Color ToColor(this int[] color) + { + if (color == null || color.Length != 3) + return Color.white; + return new Color((float)color[0] / 255f, (float)color[1] / 255f, (float)color[2] / 255f); + } + + public static void DestroyChildren(this Transform transform) + { + List children = new List(); + foreach (Transform child in transform) + children.Add(child); + + foreach (Transform child in children) + GameObject.Destroy(child.gameObject); + } + + ///

+ /// Check if actor name is present in live data + /// + public static bool HasProfile(this LiveFrame_v4 frame, string profileName) + { + for (int i = 0; i < frame.scene.actors.Length; i++) + { + if (frame.scene.actors[i].name == profileName) + return true; + } + return false; + } + + /// + /// Check if character name is present in live data + /// + public static bool HasCharacter(this LiveFrame_v4 frame, string profileName) + { + for (int i = 0; i < frame.scene.characters.Length; i++) + { + if (frame.scene.characters[i].name == profileName) + return true; + } + return false; + } + + /// + /// Check if prop name is present in live data + /// + public static bool HasProp(this LiveFrame_v4 frame, string propName) + { + for (int i = 0; i < frame.scene.props.Length; i++) + { + if (frame.scene.props[i].name == propName) + return true; + } + return false; + } + + public static float[] GetValues(this FaceFrame faceFrame) + { + var values = new float[(int)BlendShapes.size]; + values[(int)BlendShapes.eyeBlinkLeft] = faceFrame.eyeBlinkLeft; + values[(int)BlendShapes.eyeLookDownLeft] = faceFrame.eyeLookDownLeft; + values[(int)BlendShapes.eyeLookInLeft] = faceFrame.eyeLookInLeft; + values[(int)BlendShapes.eyeLookOutLeft] = faceFrame.eyeLookOutLeft; + values[(int)BlendShapes.eyeLookUpLeft] = faceFrame.eyeLookUpLeft; + values[(int)BlendShapes.eyeSquintLeft] = faceFrame.eyeSquintLeft; + values[(int)BlendShapes.eyeWideLeft] = faceFrame.eyeWideLeft; + values[(int)BlendShapes.eyeBlinkRight] = faceFrame.eyeBlinkRight; + values[(int)BlendShapes.eyeLookDownRight] = faceFrame.eyeLookDownRight; + values[(int)BlendShapes.eyeLookInRight] = faceFrame.eyeLookInRight; + values[(int)BlendShapes.eyeLookOutRight] = faceFrame.eyeLookOutRight; + values[(int)BlendShapes.eyeLookUpRight] = faceFrame.eyeLookUpRight; + values[(int)BlendShapes.eyeSquintRight] = faceFrame.eyeSquintRight; + values[(int)BlendShapes.eyeWideRight] = faceFrame.eyeWideRight; + values[(int)BlendShapes.jawForward] = faceFrame.jawForward; + values[(int)BlendShapes.jawLeft] = faceFrame.jawLeft; + values[(int)BlendShapes.jawRight] = faceFrame.jawRight; + values[(int)BlendShapes.jawOpen] = faceFrame.jawOpen; + values[(int)BlendShapes.mouthClose] = faceFrame.mouthClose; + values[(int)BlendShapes.mouthFunnel] = faceFrame.mouthFunnel; + values[(int)BlendShapes.mouthPucker] = faceFrame.mouthPucker; + values[(int)BlendShapes.mouthLeft] = faceFrame.mouthLeft; + values[(int)BlendShapes.mouthRight] = faceFrame.mouthRight; + values[(int)BlendShapes.mouthSmileLeft] = faceFrame.mouthSmileLeft; + values[(int)BlendShapes.mouthSmileRight] = faceFrame.mouthSmileRight; + values[(int)BlendShapes.mouthFrownLeft] = faceFrame.mouthFrownLeft; + values[(int)BlendShapes.mouthFrownRight] = faceFrame.mouthFrownRight; + values[(int)BlendShapes.mouthDimpleLeft] = faceFrame.mouthDimpleLeft; + values[(int)BlendShapes.mouthDimpleRight] = faceFrame.mouthDimpleRight; + values[(int)BlendShapes.mouthStretchLeft] = faceFrame.mouthStretchLeft; + values[(int)BlendShapes.mouthStretchRight] = faceFrame.mouthStretchRight; + values[(int)BlendShapes.mouthRollLower] = faceFrame.mouthRollLower; + values[(int)BlendShapes.mouthRollUpper] = faceFrame.mouthRollUpper; + values[(int)BlendShapes.mouthShrugLower] = faceFrame.mouthShrugLower; + values[(int)BlendShapes.mouthShrugUpper] = faceFrame.mouthShrugUpper; + values[(int)BlendShapes.mouthPressLeft] = faceFrame.mouthPressLeft; + values[(int)BlendShapes.mouthPressRight] = faceFrame.mouthPressRight; + values[(int)BlendShapes.mouthLowerDownLeft] = faceFrame.mouthLowerDownLeft; + values[(int)BlendShapes.mouthLowerDownRight] = faceFrame.mouthLowerDownRight; + values[(int)BlendShapes.mouthUpperUpLeft] = faceFrame.mouthUpperUpLeft; + values[(int)BlendShapes.mouthUpperUpRight] = faceFrame.mouthUpperUpRight; + values[(int)BlendShapes.browDownLeft] = faceFrame.browDownLeft; + values[(int)BlendShapes.browDownRight] = faceFrame.browDownRight; + values[(int)BlendShapes.browInnerUp] = faceFrame.browInnerUp; + values[(int)BlendShapes.browOuterUpLeft] = faceFrame.browOuterUpLeft; + values[(int)BlendShapes.browOuterUpRight] = faceFrame.browOuterUpRight; + values[(int)BlendShapes.cheekPuff] = faceFrame.cheekPuff; + values[(int)BlendShapes.cheekSquintLeft] = faceFrame.cheekSquintLeft; + values[(int)BlendShapes.cheekSquintRight] = faceFrame.cheekSquintRight; + values[(int)BlendShapes.noseSneerLeft] = faceFrame.noseSneerLeft; + values[(int)BlendShapes.noseSneerRight] = faceFrame.noseSneerRight; + values[(int)BlendShapes.tongueOut] = faceFrame.tongueOut; + + return values; + } + + public static Dictionary GetAllBlendshapes(this Mesh mesh) + { + Dictionary blendshapeNamesToIndex = new Dictionary(); + for (int i = 0; i < mesh.blendShapeCount; i++) + { + blendshapeNamesToIndex.Add(mesh.GetBlendShapeName(i).ToLower(), i); + } + return blendshapeNamesToIndex; + } + + /// + /// Get all missing blendshapes comparing to ARKit 52 blendshapes + /// + public static List GetAllMissingBlendshapes(this Mesh mesh) + { + List missingBlendshapes = new List(); + List blendshapeNames = new List(mesh.GetAllBlendshapes().Keys); + for (int i = 0; i < BlendshapesArray.Length; i++) + { + string arkitName = BlendshapesArray[i].ToString(); + if (!blendshapeNames.Contains(arkitName.ToLower())) + missingBlendshapes.Add(arkitName); + } + + return missingBlendshapes; + } + + private static BlendShapes[] _BlendshapesArray = null; + public static BlendShapes[] BlendshapesArray + { + get + { + if (_BlendshapesArray == null) + { + _BlendshapesArray = new BlendShapes[(int)BlendShapes.size]; + for (int i = 0; i < _BlendshapesArray.Length; i++) + { + _BlendshapesArray[i] = (BlendShapes)i; + } + } + + return _BlendshapesArray; + } + } + + private static HumanBodyBones[] _HumanBodyBonesArray = null; + + public static HumanBodyBones[] HumanBodyBonesArray + { + get + { + if (_HumanBodyBonesArray == null) + { + _HumanBodyBonesArray = new HumanBodyBones[(int)HumanBodyBones.LastBone]; + for (int i = 0; i < _HumanBodyBonesArray.Length; i++) + _HumanBodyBonesArray[i] = (HumanBodyBones)i; + } + return _HumanBodyBonesArray; + } + } + + public static void Destroy(GameObject gameObject) + { + if (Application.isPlaying) + GameObject.Destroy(gameObject); + else + GameObject.DestroyImmediate(gameObject); + +#if UNITY_EDITOR + if (!Application.isPlaying) + UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEngine.SceneManagement.SceneManager.GetActiveScene()); +#endif + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/RokokoHelper.cs.meta b/Assets/External/Rokoko/Scripts/Mono/RokokoHelper.cs.meta new file mode 100644 index 00000000..cc89a1e5 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/RokokoHelper.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 5fb415e868ac58149ae137d5bd2d006a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/RokokoHelper.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/Serializable.meta b/Assets/External/Rokoko/Scripts/Mono/Serializable.meta new file mode 100644 index 00000000..fe19255d --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Serializable.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 363721fc8fef7dc40a9243ec4954d2af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Mono/Serializable/BlendshapesDictionary.cs b/Assets/External/Rokoko/Scripts/Mono/Serializable/BlendshapesDictionary.cs new file mode 100644 index 00000000..7c3df5d7 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Serializable/BlendshapesDictionary.cs @@ -0,0 +1,7 @@ +using Rokoko.Core; + +/// +/// Create a simple serialized version of a Dictionary in order to able to persist in Editor play mode. +/// +[System.Serializable] +public class BlendshapesDictionary : SerializableDictionary { } diff --git a/Assets/External/Rokoko/Scripts/Mono/Serializable/BlendshapesDictionary.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Serializable/BlendshapesDictionary.cs.meta new file mode 100644 index 00000000..0b70cd5e --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Serializable/BlendshapesDictionary.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 9681c86ca06b0de479fcf425d8560c3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Serializable/BlendshapesDictionary.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/Serializable/HumanTPoseDictionary.cs b/Assets/External/Rokoko/Scripts/Mono/Serializable/HumanTPoseDictionary.cs new file mode 100644 index 00000000..992317c6 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Serializable/HumanTPoseDictionary.cs @@ -0,0 +1,8 @@ +using System; +using UnityEngine; + +/// +/// Create a simple serialized version of a Dictionary in order to able to persist in Editor play mode. +/// +[System.Serializable] +public class HumanTPoseDictionary : SerializableDictionary { } diff --git a/Assets/External/Rokoko/Scripts/Mono/Serializable/HumanTPoseDictionary.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Serializable/HumanTPoseDictionary.cs.meta new file mode 100644 index 00000000..df6e876e --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Serializable/HumanTPoseDictionary.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 9a32ea12a419b4544a5ef5263af08a26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Serializable/HumanTPoseDictionary.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/Serializable/SerializableDictionary.cs b/Assets/External/Rokoko/Scripts/Mono/Serializable/SerializableDictionary.cs new file mode 100644 index 00000000..26804dbc --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Serializable/SerializableDictionary.cs @@ -0,0 +1,63 @@ +using Rokoko.Core; +using System.Collections; +using System.Collections.Generic; + +/// +/// Create a simple serialized version of a Dictionary in order to able to persist in Editor play mode. +/// +[System.Serializable] +public abstract class SerializableDictionary +{ + public List keys = new List(); + public List values = new List(); + + public void Add(TKey key, TValue value) + { + if (keys.Contains(key)) + throw new System.Exception("Key already exists"); + keys.Add(key); + values.Add(value); + } + + public TValue this[TKey key] + { + get + { + if (!keys.Contains(key)) + throw new System.Exception("Key doesn't exists"); + return values[keys.IndexOf(key)]; + } + set + { + if (!keys.Contains(key)) + throw new System.Exception("Key doesn't exists"); + + int index = keys.IndexOf(key); + values[index] = value; + } + + } + + public KeyValuePair this[int index] + { + get + { + if (keys.Count < index) + throw new System.IndexOutOfRangeException(); + return new KeyValuePair(keys[index], values[index]); + } + } + + public bool Contains(TKey key) + { + return keys.Contains(key); + } + + public void Clear() + { + keys.Clear(); + values.Clear(); + } + + public int Count => keys.Count; +} diff --git a/Assets/External/Rokoko/Scripts/Mono/Serializable/SerializableDictionary.cs.meta b/Assets/External/Rokoko/Scripts/Mono/Serializable/SerializableDictionary.cs.meta new file mode 100644 index 00000000..d856cef1 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/Serializable/SerializableDictionary.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 40cfb04b525907c409046edb971ff8f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/Serializable/SerializableDictionary.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/StudioManager.cs b/Assets/External/Rokoko/Scripts/Mono/StudioManager.cs new file mode 100644 index 00000000..55a90ec6 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/StudioManager.cs @@ -0,0 +1,342 @@ +using Rokoko; +using Rokoko.Core; +using Rokoko.CommandAPI; +using Rokoko.Helper; +using Rokoko.Inputs; +using Rokoko.UI; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Rokoko +{ + public class StudioManager : MonoBehaviour + { + private const string ACTOR_DEMO_IDLE_NAME = "ActorIdle"; + + private static StudioManager instance; + + [Header("Network")] + [Tooltip("ReceivePort must match Studio Live Stream port settings")] + public int receivePort = 14043; + + [Tooltip("Use LZ4 compression stream")] + public bool useLZ4Compression = true; + + [Tooltip("Log the stream frame information")] + public bool receiverVerbose = false; + + [Header("Default Inputs - Used when no overrides found (Optional)")] + [Tooltip("Actor Prefab to create actors when no overrides found")] + public Actor actorPrefab; + [Tooltip("Character Prefab to create characters when no overrides found")] + public Character characterPrefab; + [Tooltip("Prop Prefab to create props when no overrides found")] + public Prop propPrefab; + + [Header("UI (Optional)")] + public UIHierarchyManager uiManager; + + [Header("Command API (Optional)")] + public StudioCommandAPI CommandAPI; + public bool AutoSendTrackerCommands; + + [Header("Input Overrides - Automatically updated")] + public List actorOverrides = new List(); + public List characterOverrides = new List(); + public List propOverrides = new List(); + + [Header("Extra Behiavours")] + public bool autoGenerateInputsWhenNoOverridesFound = false; + public bool showDefaultActorWhenNoData = false; + + private StudioReceiver studioReceiver; + private PrefabInstancer actors; + private PrefabInstancer characters; + private PrefabInstancer props; + + private object actionsOnMainThread = new object(); + private List packetsToProcess = new List(); + + #region MonoBehaviour + + private void Awake() + { + if (instance == null) + instance = this; + } + + // Start is called before the first frame update + private IEnumerator Start() + { + studioReceiver = new StudioReceiver(); + studioReceiver.receivePortNumber = receivePort; + studioReceiver.useLZ4Compression = useLZ4Compression; + studioReceiver.verbose = receiverVerbose; + studioReceiver.Initialize(); + studioReceiver.StartListening(); + studioReceiver.onStudioDataReceived += StudioReceiver_onStudioDataReceived; + + if (actorPrefab != null) + actors = new PrefabInstancer(actorPrefab, this.transform); + if (characterPrefab != null) + characters = new PrefabInstancer(characterPrefab, this.transform); + if (propPrefab != null) + props = new PrefabInstancer(propPrefab, this.transform); + + yield return null; + + if (actorOverrides.Count == 0 && characterOverrides.Count == 0) + { + Debug.Log("No custom characters found. Will generate scene from default ones"); + } + } + + private void Update() + { + // Run all actions inside Unity's main thread + lock (actionsOnMainThread) + { + if (packetsToProcess.Count > 0) + { + ProcessLiveFrame(packetsToProcess[packetsToProcess.Count-1]); + packetsToProcess.Clear(); + } + } + } + + private void FixedUpdate() + { + if (AutoSendTrackerCommands && CommandAPI != null) + { + if (!CommandAPI.IsTrackerRequestInProgress) + { + CommandAPI.Tracker(); + } + } + } + + private void OnDestroy() + { + studioReceiver.Dispose(); + } + + #endregion + + private void StudioReceiver_onStudioDataReceived(object sender, LiveFrame_v4 e) + { + lock (actionsOnMainThread) + packetsToProcess.Add(e); + } + + /// + /// Main process logic of live data + /// + private void ProcessLiveFrame(LiveFrame_v4 frame) + { + int numberOfActors = frame?.scene.actors?.Length ?? 0; + int numberOfCharacters = frame?.scene.characters?.Length ?? 0; + + if (numberOfActors == 0 && numberOfCharacters == 0) + return; + + // Update each actor from live data + for (int i = 0; i < numberOfActors; i++) + { + ActorFrame actorFrame = frame.scene.actors[i]; + + List actorOverrides = GetActorOverride(actorFrame.name); + // Update custom actors if any + if (actorOverrides.Count > 0) + { + for (int a = 0; a < actorOverrides.Count; a++) + { + actorOverrides[a].UpdateActor(actorFrame); + } + } + // Update default actor + else if (autoGenerateInputsWhenNoOverridesFound && actors != null) + { + actors[actorFrame.name].UpdateActor(actorFrame); + } + } + + // Update each character from live data + for (int i = 0; i < numberOfCharacters; i++) + { + CharacterFrame charFrame = frame.scene.characters[i]; + + List characterOverrides = GetCharacterOverride(charFrame.name); + // Update custom characters if any + if (characterOverrides.Count > 0) + { + for (int a = 0; a < characterOverrides.Count; a++) + { + characterOverrides[a].UpdateCharacter(charFrame); + } + } + // Update default character + else if (autoGenerateInputsWhenNoOverridesFound && characters != null) + { + characters[charFrame.name].UpdateCharacter(charFrame); + } + } + + // Update each prop from live data + if (frame.scene.props != null) + { + for (int i = 0; i < frame.scene.props.Length; i++) + { + PropFrame propFrame = frame.scene.props[i]; + + List propOverrides = GetPropOverride(propFrame.name); + // Update custom props if any + if (propOverrides.Count > 0) + { + for (int a = 0; a < propOverrides.Count; a++) + { + propOverrides[a].UpdateProp(propFrame); + } + } + // Update default prop + else if (autoGenerateInputsWhenNoOverridesFound && props != null) + { + props[propFrame.name].UpdateProp(propFrame); + } + } + } + + // Remove all default Actors that doesn't exist in data + ClearUnusedDefaultInputs(frame); + + // Show default character + UpdateDefaultActorWhenIdle(); + + // Update Hierarchy UI + uiManager?.UpdateHierarchy(frame); + } + + /// + /// Show default T pose character when not playback data + /// + private void UpdateDefaultActorWhenIdle() + { + if (!showDefaultActorWhenNoData) return; + if (actors == null || props == null) // || characters == null) + return; + + // Create default actor + if (actors.Count == 0 && props.Count == 0) + { + actors[ACTOR_DEMO_IDLE_NAME].CreateIdle(ACTOR_DEMO_IDLE_NAME); + } + // No need to update + else if (actors.Count == 1 && actors.ContainsKey(ACTOR_DEMO_IDLE_NAME)) + { + + } + // Remove default actor when playback data available + else + { + actors.Remove(ACTOR_DEMO_IDLE_NAME); + } + } + + /// + /// Remove all default Actors that doesn't exist in data + /// + private void ClearUnusedDefaultInputs(LiveFrame_v4 frame) + { + if (actors != null) + { + foreach (Actor actor in new List((IEnumerable)actors.Values)) + { + // Don't remove idle demo + if (actor.profileName == ACTOR_DEMO_IDLE_NAME) continue; + + if (!frame.HasProfile(actor.profileName)) + actors.Remove(actor.profileName); + } + } + + if (characters != null) + { + foreach (Character character in new List((IEnumerable)characters.Values)) + { + // Don't remove idle demo + if (character.profileName == ACTOR_DEMO_IDLE_NAME) continue; + + if (!frame.HasCharacter(character.profileName)) + characters.Remove(character.profileName); + } + } + + if (props != null) + { + foreach (Prop prop in new List((IEnumerable)props.Values)) + { + if (!frame.HasProp(prop.propName)) + props.Remove(prop.propName); + } + } + } + + public List GetActorOverride(string profileName) + { + List overrides = new List(); + for (int i = 0; i < actorOverrides.Count; i++) + { + if (profileName.ToLower() == actorOverrides[i].profileName.ToLower()) + overrides.Add(actorOverrides[i]); + } + return overrides; + } + + public List GetCharacterOverride(string profileName) + { + List overrides = new List(); + for (int i = 0; i < characterOverrides.Count; i++) + { + if (characterOverrides[i] == null) + continue; + + if (profileName.ToLower() == characterOverrides[i].profileName.ToLower()) + overrides.Add(characterOverrides[i]); + } + return overrides; + } + + public List GetPropOverride(string profileName) + { + List overrides = new List(); + for (int i = 0; i < propOverrides.Count; i++) + { + if (profileName.ToLower() == propOverrides[i].propName.ToLower()) + overrides.Add(propOverrides[i]); + } + return overrides; + } + + public static void AddActorOverride(Actor actor) + { + if (instance == null) return; + if (instance.actorOverrides.Contains(actor)) return; + instance.actorOverrides.Add(actor); + } + + public static void AddCharacterOverride(Character character) + { + if (instance == null) return; + if (instance.characterOverrides.Contains(character)) return; + instance.characterOverrides.Add(character); + } + + public static void AddPropOverride(Prop prop) + { + if (instance == null) return; + if (instance.propOverrides.Contains(prop)) return; + instance.propOverrides.Add(prop); + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/StudioManager.cs.meta b/Assets/External/Rokoko/Scripts/Mono/StudioManager.cs.meta new file mode 100644 index 00000000..797d33af --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/StudioManager.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: de63a1dd9ec769e4080fd4da352fac11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/StudioManager.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/TPoseGuideGameComponent.cs b/Assets/External/Rokoko/Scripts/Mono/TPoseGuideGameComponent.cs new file mode 100644 index 00000000..13a999ac --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/TPoseGuideGameComponent.cs @@ -0,0 +1,48 @@ +using Rokoko.Helper; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace Rokoko +{ + [ExecuteInEditMode] + public class TPoseGuideGameComponent : MonoBehaviour + { + public Transform followTarget; + public Vector3 followOffset = Vector3.zero; + + private void Awake() + { + SceneManager.activeSceneChanged += SceneManager_activeSceneChanged; + +#if !UNITY_EDITOR + RokokoHelper.Destroy(this.gameObject); +#endif + } + + private void Start() + { + + } + + private void SceneManager_activeSceneChanged(Scene arg0, Scene arg1) + { +#if UNITY_EDITOR + if (!Application.isPlaying) + { + RokokoHelper.Destroy(this.gameObject); + } +#endif + } + + // Update is called once per frame + void Update() + { + this.transform.rotation = Quaternion.LookRotation(Vector3.up * -1); + + if(followTarget != null) + { + this.transform.position = followTarget.transform.position + followOffset; + } + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/TPoseGuideGameComponent.cs.meta b/Assets/External/Rokoko/Scripts/Mono/TPoseGuideGameComponent.cs.meta new file mode 100644 index 00000000..daf52e20 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/TPoseGuideGameComponent.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 4296b318fcf88b240a52b1fbe7be783e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/TPoseGuideGameComponent.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/UI.meta b/Assets/External/Rokoko/Scripts/Mono/UI.meta new file mode 100644 index 00000000..108691ae --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e6ff7aa69142344db48e66a446c3b21 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Mono/UI/InputHierarchyRow.cs b/Assets/External/Rokoko/Scripts/Mono/UI/InputHierarchyRow.cs new file mode 100644 index 00000000..44545377 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/UI/InputHierarchyRow.cs @@ -0,0 +1,63 @@ +using Rokoko.Core; +using Rokoko.Helper; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace Rokoko.UI +{ + public class InputHierarchyRow : MonoBehaviour + { + public string profileName { get; private set; } + + [Header("Actor")] + [SerializeField] private GameObject actorPanel = null; + [SerializeField] private Image profileImage = null; + [SerializeField] private Text profileText = null; + [SerializeField] private Image faceImage = null; + [SerializeField] private Image suitImage = null; + [SerializeField] private Image leftGloveImage = null; + [SerializeField] private Image rightGloveImage = null; + [SerializeField] private Color inactiveColor = Color.gray; + + [Header("Prop")] + [SerializeField] private GameObject propPanel = null; + [SerializeField] private Image propImage = null; + [SerializeField] private Text propText = null; + + public void UpdateRow(ActorFrame actorFrame) + { + actorPanel.SetActive(true); + propPanel.SetActive(false); + + profileName = actorFrame.name; + profileImage.color = actorFrame.color.ToColor(); + profileText.text = actorFrame.name; + faceImage.color = actorFrame.meta.hasFace ? Color.white : inactiveColor; + suitImage.color = actorFrame.meta.hasBody ? Color.white : inactiveColor; + leftGloveImage.color = actorFrame.meta.hasLeftGlove ? Color.white : inactiveColor; + rightGloveImage.color = actorFrame.meta.hasRightGlove ? Color.white : inactiveColor; + } + + public void UpdateRow(CharacterFrame charFrame) + { + actorPanel.SetActive(false); + propPanel.SetActive(true); + + profileName = charFrame.name; + //propImage.color = propFrame.color.ToColor(); + propText.text = charFrame.name; + } + + public void UpdateRow(PropFrame propFrame) + { + actorPanel.SetActive(false); + propPanel.SetActive(true); + + profileName = propFrame.name; + propImage.color = propFrame.color.ToColor(); + propText.text = propFrame.name; + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/UI/InputHierarchyRow.cs.meta b/Assets/External/Rokoko/Scripts/Mono/UI/InputHierarchyRow.cs.meta new file mode 100644 index 00000000..76ffe4ad --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/UI/InputHierarchyRow.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 1ad284b4954ca4e4e87c771f198afd80 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/UI/InputHierarchyRow.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Mono/UI/UIHierarchyManager.cs b/Assets/External/Rokoko/Scripts/Mono/UI/UIHierarchyManager.cs new file mode 100644 index 00000000..75c2d8dc --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/UI/UIHierarchyManager.cs @@ -0,0 +1,88 @@ +using Rokoko.Core; +using Rokoko.Helper; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace Rokoko.UI +{ + public class UIHierarchyManager : MonoBehaviour + { + [SerializeField] private InputHierarchyRow rowPrefab = null; + [SerializeField] private Transform prefabContainer = null; + + private PrefabInstancer rows; + + // Start is called before the first frame update + void Start() + { + // Destroy children before PrefabInstancer creates the pool + prefabContainer.DestroyChildren(); + + rows = new PrefabInstancer(rowPrefab, prefabContainer, 3); + } + + public void UpdateHierarchy(LiveFrame_v4 dataFrame) + { + // Check if UI needs rebuild + bool forceLayoutUpdate = false; + + // Update each actor from live data + for (int i = 0; i < dataFrame.scene.actors.Length; i++) + { + ActorFrame actorFrame = dataFrame.scene.actors[i]; + string profileName = actorFrame.name; + + // If profile doesn't exist, mark for rebuild + if (forceLayoutUpdate == false && !rows.ContainsKey(profileName)) + forceLayoutUpdate = true; + + rows[profileName].UpdateRow(actorFrame); + } + + // Update each actor from live data + for (int i = 0; i < dataFrame.scene.characters.Length; i++) + { + CharacterFrame charFrame = dataFrame.scene.characters[i]; + string profileName = charFrame.name; + + // If profile doesn't exist, mark for rebuild + if (forceLayoutUpdate == false && !rows.ContainsKey(profileName)) + forceLayoutUpdate = true; + + rows[profileName].UpdateRow(charFrame); + } + + // Update each prop from live data + for (int i = 0; i < dataFrame.scene.props.Length; i++) + { + PropFrame propFrame = dataFrame.scene.props[i]; + string profileName = propFrame.name; + + // If profile doesn't exist, mark for rebuild + if (forceLayoutUpdate == false && !rows.ContainsKey(profileName)) + forceLayoutUpdate = true; + + rows[profileName].UpdateRow(propFrame); + } + + ClearUnusedInputRows(dataFrame); + + if (forceLayoutUpdate) + LayoutRebuilder.ForceRebuildLayoutImmediate(prefabContainer as RectTransform); + } + + /// + /// Remove all rows that no longer exists in live data + /// + private void ClearUnusedInputRows(LiveFrame_v4 frame) + { + foreach (InputHierarchyRow row in new List((IEnumerable)rows.Values)) + { + if (!frame.HasProfile(row.profileName) && !frame.HasProp(row.profileName) && !frame.HasCharacter(row.profileName)) + rows.Remove(row.profileName); + } + } + } +} \ No newline at end of file diff --git a/Assets/External/Rokoko/Scripts/Mono/UI/UIHierarchyManager.cs.meta b/Assets/External/Rokoko/Scripts/Mono/UI/UIHierarchyManager.cs.meta new file mode 100644 index 00000000..315d24e2 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Mono/UI/UIHierarchyManager.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 0726fb4ef719b9d46a2afcc8c682dc54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Mono/UI/UIHierarchyManager.cs + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Plugins.meta b/Assets/External/Rokoko/Scripts/Plugins.meta new file mode 100644 index 00000000..9070f333 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bbb359d9a38c1004bbe87c4f14822488 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4.meta new file mode 100644 index 00000000..87e98093 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 26a3fe8611eb3a44aa1ae9081871b540 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android.meta new file mode 100644 index 00000000..a229d9a9 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 82985f460b91d5d4ba2aa833b74fef35 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs.meta new file mode 100644 index 00000000..c24562f1 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea56c1cd6eae28e479bc6dd92c6898f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/arm64-v8a.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/arm64-v8a.meta new file mode 100644 index 00000000..f003678e --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/arm64-v8a.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5261e97e6db9c3c49bf370285d19c389 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/arm64-v8a/liblz4.so b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/arm64-v8a/liblz4.so new file mode 100644 index 00000000..09cf40ea --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/arm64-v8a/liblz4.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7059713511df34b30a9d14697602eb9e43aed0c2218fb95468e0607fd786aff7 +size 185528 diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/arm64-v8a/liblz4.so.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/arm64-v8a/liblz4.so.meta new file mode 100644 index 00000000..3ab40b5c --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/arm64-v8a/liblz4.so.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 2034ecf0466b4e74f87f5c2418b9ca6a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/arm64-v8a/liblz4.so + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/armeabi-v7a.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/armeabi-v7a.meta new file mode 100644 index 00000000..61d32574 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/armeabi-v7a.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ff5c59bfbd7cdc145932e75bd2c77813 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/armeabi-v7a/liblz4.so b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/armeabi-v7a/liblz4.so new file mode 100644 index 00000000..d019fa11 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/armeabi-v7a/liblz4.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8cf87aded6d6311fa92c5f004cd3333d66d8caf96b49cfa2f94d30e90c737b6 +size 184968 diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/armeabi-v7a/liblz4.so.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/armeabi-v7a/liblz4.so.meta new file mode 100644 index 00000000..57ef8eea --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/armeabi-v7a/liblz4.so.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 64661c496f7cc0a418cbe44f3c5df8d4 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/armeabi-v7a/liblz4.so + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/x86.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/x86.meta new file mode 100644 index 00000000..57c0d572 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/x86.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fd93f2258a54c1341a561817c9d7221c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/x86/liblz4.so b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/x86/liblz4.so new file mode 100644 index 00000000..5e8d176c --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/x86/liblz4.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74b245ef940b45656ec7c53277680155a306b40ca63630ea31cf09397204c6fd +size 153592 diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/x86/liblz4.so.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/x86/liblz4.so.meta new file mode 100644 index 00000000..df4c30c6 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/x86/liblz4.so.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 334dff52187feb849ab4ea932a1b7b73 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Plugins/LZ4/Android/libs/x86/liblz4.so + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/iOS.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/iOS.meta new file mode 100644 index 00000000..83801bf9 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/iOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd770c574097d3e4ea6aeddfb5b6da48 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/iOS/liblz4.a b/Assets/External/Rokoko/Scripts/Plugins/LZ4/iOS/liblz4.a new file mode 100644 index 00000000..0f9892c9 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/iOS/liblz4.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45b8c1919c3591414f58a1544d947718288836f061d2bcd8c465a9ef771ca2df +size 3762480 diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/iOS/liblz4.a.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/iOS/liblz4.a.meta new file mode 100644 index 00000000..45fa228a --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/iOS/liblz4.a.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 8cd1870f720ab8c4c92c3ca9afc19937 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Plugins/LZ4/iOS/liblz4.a + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle.meta new file mode 100644 index 00000000..d5a8d742 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: be0bf098585b39345bbd41d178618e0e +folderAsset: yes +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle/Contents.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle/Contents.meta new file mode 100644 index 00000000..473c2ad9 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle/Contents.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6182d450d1495714b9e59291998ad771 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle/Contents/MacOS.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle/Contents/MacOS.meta new file mode 100644 index 00000000..50f698a7 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle/Contents/MacOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ffd7822eee55dc42aeef4cb60e1f1b5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle/Contents/MacOS/lz4 b/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle/Contents/MacOS/lz4 new file mode 100644 index 00000000..eef5f96f Binary files /dev/null and b/Assets/External/Rokoko/Scripts/Plugins/LZ4/lz4.bundle/Contents/MacOS/lz4 differ diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/x86_64.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/x86_64.meta new file mode 100644 index 00000000..dbf0890b --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/x86_64.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b36efa71b5d9f444940eb00ad416ece +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/x86_64/lz4.dll b/Assets/External/Rokoko/Scripts/Plugins/LZ4/x86_64/lz4.dll new file mode 100644 index 00000000..eda7abe0 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/x86_64/lz4.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7bb0b1b32a13c6b0e1ff9742c2e3aec8934d411c7dec141672e929189260b29 +size 1071104 diff --git a/Assets/External/Rokoko/Scripts/Plugins/LZ4/x86_64/lz4.dll.meta b/Assets/External/Rokoko/Scripts/Plugins/LZ4/x86_64/lz4.dll.meta new file mode 100644 index 00000000..8580f95d --- /dev/null +++ b/Assets/External/Rokoko/Scripts/Plugins/LZ4/x86_64/lz4.dll.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: e521e00f91993534799438ee73ee065a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/Plugins/LZ4/x86_64/lz4.dll + uploadId: 616054 diff --git a/Assets/External/Rokoko/Scripts/RokokoAssembly.asmdef b/Assets/External/Rokoko/Scripts/RokokoAssembly.asmdef new file mode 100644 index 00000000..da2573d1 --- /dev/null +++ b/Assets/External/Rokoko/Scripts/RokokoAssembly.asmdef @@ -0,0 +1,3 @@ +{ + "name": "Rokoko" +} diff --git a/Assets/External/Rokoko/Scripts/RokokoAssembly.asmdef.meta b/Assets/External/Rokoko/Scripts/RokokoAssembly.asmdef.meta new file mode 100644 index 00000000..87629f7c --- /dev/null +++ b/Assets/External/Rokoko/Scripts/RokokoAssembly.asmdef.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: c0283c4bf59b9ad4aa5b4622e1c041a8 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Scripts/RokokoAssembly.asmdef + uploadId: 616054 diff --git a/Assets/External/Rokoko/TestController.controller b/Assets/External/Rokoko/TestController.controller new file mode 100644 index 00000000..148d8614 --- /dev/null +++ b/Assets/External/Rokoko/TestController.controller @@ -0,0 +1,87 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-3924221627825932553 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New State + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: -4671056281497532287, guid: 36a951994cc4a8747ba422cbe26f7858, type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &-3852329928199134753 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: -3924221627825932553} + m_Position: {x: 360, y: 210, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: + - {fileID: -2355705550242550450} + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: -3924221627825932553} +--- !u!1109 &-2355705550242550450 +AnimatorTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -3924221627825932553} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 1 +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TestController + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -3852329928199134753} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} diff --git a/Assets/External/Rokoko/TestController.controller.meta b/Assets/External/Rokoko/TestController.controller.meta new file mode 100644 index 00000000..cfa05cee --- /dev/null +++ b/Assets/External/Rokoko/TestController.controller.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: f6c0975243dc3864cb6e1bea3a9f4386 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/TestController.controller + uploadId: 616054 diff --git a/Assets/External/Rokoko/Warrior.fbx b/Assets/External/Rokoko/Warrior.fbx new file mode 100644 index 00000000..187e727f --- /dev/null +++ b/Assets/External/Rokoko/Warrior.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c2eba32893e1ded3865b669e75329004f5785d1afb16cb21296016a5d07cb59 +size 2731872 diff --git a/Assets/External/Rokoko/Warrior.fbx.meta b/Assets/External/Rokoko/Warrior.fbx.meta new file mode 100644 index 00000000..50086e81 --- /dev/null +++ b/Assets/External/Rokoko/Warrior.fbx.meta @@ -0,0 +1,113 @@ +fileFormatVersion: 2 +guid: 95a53b8d470df304fb096dc20051a60b +ModelImporter: + serializedVersion: 21300 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 1 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 1 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/Warrior.fbx + uploadId: 616054 diff --git a/Assets/External/Rokoko/WarriorTimeline.playable b/Assets/External/Rokoko/WarriorTimeline.playable new file mode 100644 index 00000000..06c88f9f --- /dev/null +++ b/Assets/External/Rokoko/WarriorTimeline.playable @@ -0,0 +1,155 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-1249943104347743860 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 030f85c3f73729f4f976f66ffb23b875, type: 3} + m_Name: AnimationPlayableAsset + m_EditorClassIdentifier: + m_Clip: {fileID: -4671056281497532287, guid: 36a951994cc4a8747ba422cbe26f7858, type: 3} + m_Position: {x: 0, y: 0, z: 0} + m_EulerAngles: {x: 0, y: 0, z: 0} + m_UseTrackMatchFields: 1 + m_MatchTargetFields: 63 + m_RemoveStartOffset: 1 + m_ApplyFootIK: 1 + m_Loop: 0 + m_Version: 1 + m_Rotation: {x: 0, y: 0, z: 0, w: 1} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bfda56da833e2384a9677cd3c976a436, type: 3} + m_Name: WarriorTimeline + m_EditorClassIdentifier: + m_Version: 0 + m_Tracks: + - {fileID: 7898493821493201492} + m_FixedDuration: 0 + m_EditorSettings: + m_Framerate: 60 + m_ScenePreview: 1 + m_DurationMode: 0 + m_MarkerTrack: {fileID: 0} +--- !u!114 &7898493821493201492 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d21dcc2386d650c4597f3633c75a1f98, type: 3} + m_Name: Animation Track + m_EditorClassIdentifier: + m_Version: 3 + m_AnimClip: {fileID: 0} + m_Locked: 0 + m_Muted: 0 + m_CustomPlayableFullTypename: + m_Curves: {fileID: 0} + m_Parent: {fileID: 11400000} + m_Children: [] + m_Clips: + - m_Version: 1 + m_Start: 0 + m_ClipIn: 0 + m_Asset: {fileID: -1249943104347743860} + m_Duration: 16.633333333333333 + m_TimeScale: 1 + m_ParentTrack: {fileID: 7898493821493201492} + m_EaseInDuration: 0 + m_EaseOutDuration: 0 + m_BlendInDuration: -1 + m_BlendOutDuration: -1 + m_MixInCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_MixOutCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BlendInCurveMode: 0 + m_BlendOutCurveMode: 0 + m_ExposedParameterNames: [] + m_AnimationCurves: {fileID: 0} + m_Recordable: 0 + m_PostExtrapolationMode: 1 + m_PreExtrapolationMode: 1 + m_PostExtrapolationTime: Infinity + m_PreExtrapolationTime: 0 + m_DisplayName: clip + m_Markers: + m_Objects: [] + m_InfiniteClipPreExtrapolation: 0 + m_InfiniteClipPostExtrapolation: 0 + m_InfiniteClipOffsetPosition: {x: 0, y: 0, z: 0} + m_InfiniteClipOffsetEulerAngles: {x: 0, y: 0, z: 0} + m_InfiniteClipTimeOffset: 0 + m_InfiniteClipRemoveOffset: 0 + m_InfiniteClipApplyFootIK: 1 + mInfiniteClipLoop: 0 + m_MatchTargetFields: 63 + m_Position: {x: 0, y: 0, z: 0} + m_EulerAngles: {x: 0, y: 0, z: 0} + m_AvatarMask: {fileID: 0} + m_ApplyAvatarMask: 1 + m_TrackOffset: 0 + m_InfiniteClip: {fileID: 0} + m_OpenClipOffsetRotation: {x: 0, y: 0, z: 0, w: 1} + m_Rotation: {x: 0, y: 0, z: 0, w: 1} + m_ApplyOffsets: 0 diff --git a/Assets/External/Rokoko/WarriorTimeline.playable.meta b/Assets/External/Rokoko/WarriorTimeline.playable.meta new file mode 100644 index 00000000..91a33456 --- /dev/null +++ b/Assets/External/Rokoko/WarriorTimeline.playable.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: e63a464c2acd7eb4387ff31900659acc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/WarriorTimeline.playable + uploadId: 616054 diff --git a/Assets/External/Rokoko/documentation.txt b/Assets/External/Rokoko/documentation.txt new file mode 100644 index 00000000..f0d476ff --- /dev/null +++ b/Assets/External/Rokoko/documentation.txt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fade60aff6ce456d8162947c1b0cbbc12b6016a4d1693fbb68d0875b2a2002c +size 113 diff --git a/Assets/External/Rokoko/documentation.txt.meta b/Assets/External/Rokoko/documentation.txt.meta new file mode 100644 index 00000000..fc1ad6b7 --- /dev/null +++ b/Assets/External/Rokoko/documentation.txt.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 5254ae00c7dd72d4da829d7586a7ee98 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/documentation.txt + uploadId: 616054 diff --git a/Assets/External/Rokoko/package.json b/Assets/External/Rokoko/package.json new file mode 100644 index 00000000..dd3eb098 --- /dev/null +++ b/Assets/External/Rokoko/package.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e51843bda1c931020cb0280d2c835a7a1aa493f8d1458300fc82ef27920555c +size 1830 diff --git a/Assets/External/Rokoko/package.json.meta b/Assets/External/Rokoko/package.json.meta new file mode 100644 index 00000000..3a7519e1 --- /dev/null +++ b/Assets/External/Rokoko/package.json.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: c18ee99870ae47443b77bfefe95e8de9 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 98045 + packageName: Rokoko Live + packageVersion: 2.0.2 + assetPath: Assets/External/Rokoko/package.json + uploadId: 616054 diff --git a/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseClipEditor.cs b/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseClipEditor.cs new file mode 100644 index 00000000..1b4692a0 --- /dev/null +++ b/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseClipEditor.cs @@ -0,0 +1,90 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace UniHumanoid +{ + [CustomEditor(typeof(HumanPoseClip))] + public class HumanPoseClipEditor : Editor + { + private Animator m_animator; + private HumanPoseHandler m_poseHandler; + private Animator m_lastAnimator; + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + var clip = target as HumanPoseClip; + if (clip == null) return; + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Pose Application", EditorStyles.boldLabel); + + m_animator = EditorGUILayout.ObjectField("Target Animator", m_animator, typeof(Animator), true) as Animator; + + // Recreate pose handler if animator changed + if (m_animator != m_lastAnimator) + { + m_poseHandler = null; + m_lastAnimator = m_animator; + } + + if (m_animator != null && m_animator.isHuman) + { + if (GUILayout.Button("Apply Pose")) + { + ApplyPose(clip); + } + + if (GUILayout.Button("Capture Current Pose")) + { + CapturePose(clip); + } + } + else if (m_animator != null) + { + EditorGUILayout.HelpBox("Selected animator must be humanoid!", MessageType.Warning); + } + } + + private void ApplyPose(HumanPoseClip clip) + { + if (m_animator == null || !m_animator.isHuman) return; + + // Create pose handler if needed + if (m_poseHandler == null) + { + m_poseHandler = new HumanPoseHandler(m_animator.avatar, m_animator.transform); + } + + var pose = clip.GetPose(); + m_poseHandler.SetHumanPose(ref pose); + + // Record undo + Undo.RegisterFullObjectHierarchyUndo(m_animator.gameObject, "Apply Pose"); + + // Ensure the changes are visible in the scene view + EditorUtility.SetDirty(m_animator.gameObject); + SceneView.RepaintAll(); + } + + private void CapturePose(HumanPoseClip clip) + { + if (m_animator == null || !m_animator.isHuman) return; + + // Create pose handler if needed + if (m_poseHandler == null) + { + m_poseHandler = new HumanPoseHandler(m_animator.avatar, m_animator.transform); + } + + var pose = new HumanPose(); + m_poseHandler.GetHumanPose(ref pose); + + Undo.RecordObject(clip, "Capture Pose"); + clip.ApplyPose(ref pose); + EditorUtility.SetDirty(clip); + } + } +} \ No newline at end of file diff --git a/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseClipEditor.cs.meta b/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseClipEditor.cs.meta new file mode 100644 index 00000000..d6770f29 --- /dev/null +++ b/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseClipEditor.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c5041805cdf64014b9b1a045832c07bd \ No newline at end of file diff --git a/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseWindow.cs b/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseWindow.cs new file mode 100644 index 00000000..9789741c --- /dev/null +++ b/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseWindow.cs @@ -0,0 +1,259 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.Linq; + +namespace UniHumanoid +{ + public class HumanPoseWindow : EditorWindow + { + private Vector2 scrollPosition; + private Animator targetAnimator; + private HumanPoseHandler poseHandler; + private Animator lastAnimator; + private List poseClips = new List(); + private string searchText = ""; + private bool showCreateNew = false; + private string newPoseName = "New Pose"; + + [MenuItem("Window/Animation/Human Pose Manager")] + static void ShowWindow() + { + var window = GetWindow("Human Pose Manager"); + window.Show(); + } + + void OnEnable() + { + RefreshPoseList(); + } + + void RefreshPoseList() + { + // Find all HumanPoseClip assets in the project + string[] guids = AssetDatabase.FindAssets("t:HumanPoseClip"); + poseClips = guids + .Select(guid => AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid))) + .Where(clip => clip != null) + .ToList(); + } + + void OnGUI() + { + EditorGUILayout.Space(10); + + // Target Animator Selection + using (new EditorGUILayout.HorizontalScope()) + { + targetAnimator = (Animator)EditorGUILayout.ObjectField("Target Humanoid", targetAnimator, typeof(Animator), true); + + if (targetAnimator != lastAnimator) + { + poseHandler = null; + lastAnimator = targetAnimator; + } + } + + if (targetAnimator != null && !targetAnimator.isHuman) + { + EditorGUILayout.HelpBox("Selected animator must be humanoid!", MessageType.Warning); + return; + } + + EditorGUILayout.Space(10); + + // Search Bar + using (new EditorGUILayout.HorizontalScope()) + { + searchText = EditorGUILayout.TextField("Search", searchText, EditorStyles.toolbarSearchField); + if (GUILayout.Button("Refresh", GUILayout.Width(60))) + { + RefreshPoseList(); + } + } + + EditorGUILayout.Space(10); + + // Create New Pose Section + using (new EditorGUILayout.VerticalScope(EditorStyles.helpBox)) + { + showCreateNew = EditorGUILayout.Foldout(showCreateNew, "Create New Pose", true); + if (showCreateNew) + { + EditorGUI.indentLevel++; + newPoseName = EditorGUILayout.TextField("Pose Name", newPoseName); + + using (new EditorGUI.DisabledScope(targetAnimator == null || !targetAnimator.isHuman)) + { + if (GUILayout.Button("Capture Current Pose")) + { + CreateNewPoseFromCurrent(); + } + } + EditorGUI.indentLevel--; + } + } + + EditorGUILayout.Space(10); + + // Pose List + EditorGUILayout.LabelField("Available Poses", EditorStyles.boldLabel); + scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); + + var filteredPoses = poseClips + .Where(p => string.IsNullOrEmpty(searchText) || + p.name.ToLower().Contains(searchText.ToLower())) + .ToList(); + + foreach (var pose in filteredPoses) + { + DrawPoseEntry(pose); + } + + EditorGUILayout.EndScrollView(); + } + + void DrawPoseEntry(HumanPoseClip pose) + { + using (new EditorGUILayout.VerticalScope(EditorStyles.helpBox)) + { + // Pose name and buttons + using (new EditorGUILayout.HorizontalScope()) + { + EditorGUILayout.LabelField(pose.name, EditorStyles.boldLabel); + + using (new EditorGUI.DisabledScope(targetAnimator == null || !targetAnimator.isHuman)) + { + if (GUILayout.Button("Apply", GUILayout.Width(60))) + { + ApplyPose(pose); + } + if (GUILayout.Button("Update", GUILayout.Width(60))) + { + UpdatePose(pose); + } + } + + if (GUILayout.Button("Select", GUILayout.Width(60))) + { + Selection.activeObject = pose; + } + } + } + } + + void CreateNewPoseFromCurrent() + { + if (targetAnimator == null || !targetAnimator.isHuman) return; + + // Ensure animator is properly initialized + PrepareAnimator(); + + // Create new pose asset + var newPose = CreateInstance(); + + // Capture current pose + CreatePoseHandler(); + + var pose = new HumanPose(); + poseHandler.GetHumanPose(ref pose); + newPose.ApplyPose(ref pose); + + // Save asset + string path = EditorUtility.SaveFilePanel( + "Save Pose Asset", + "Assets", + newPoseName + ".asset", + "asset" + ); + + if (string.IsNullOrEmpty(path)) return; + + path = FileUtil.GetProjectRelativePath(path); + AssetDatabase.CreateAsset(newPose, path); + AssetDatabase.SaveAssets(); + + RefreshPoseList(); + newPoseName = "New Pose"; + } + + void ApplyPose(HumanPoseClip clip) + { + if (targetAnimator == null || !targetAnimator.isHuman) return; + + // Ensure animator is properly initialized + PrepareAnimator(); + + // Record undo before applying + Undo.RegisterFullObjectHierarchyUndo(targetAnimator.gameObject, "Apply Pose"); + + CreatePoseHandler(); + + var pose = clip.GetPose(); + + // Apply the pose + poseHandler.SetHumanPose(ref pose); + + // Force update the animator + ForceAnimatorUpdate(); + + EditorUtility.SetDirty(targetAnimator.gameObject); + SceneView.RepaintAll(); + } + + void UpdatePose(HumanPoseClip clip) + { + if (targetAnimator == null || !targetAnimator.isHuman) return; + + // Ensure animator is properly initialized + PrepareAnimator(); + + CreatePoseHandler(); + + var pose = new HumanPose(); + poseHandler.GetHumanPose(ref pose); + + Undo.RecordObject(clip, "Update Pose"); + clip.ApplyPose(ref pose); + EditorUtility.SetDirty(clip); + AssetDatabase.SaveAssets(); + } + + void PrepareAnimator() + { + if (targetAnimator == null) return; + + // Ensure the animator is enabled and active + targetAnimator.enabled = true; + + // Force animator to update + targetAnimator.Rebind(); + targetAnimator.Update(0); + } + + void CreatePoseHandler() + { + if (poseHandler == null) + { + poseHandler = new HumanPoseHandler(targetAnimator.avatar, targetAnimator.transform); + } + } + + void ForceAnimatorUpdate() + { + if (targetAnimator == null) return; + + // Force the animator to update its internal state + targetAnimator.Update(0); + + // Also update the transform hierarchy + targetAnimator.transform.hasChanged = true; + + // Force a physics update if needed + if (targetAnimator.updateMode == AnimatorUpdateMode.Fixed) + { + targetAnimator.Update(Time.fixedDeltaTime); + } + } + } +} \ No newline at end of file diff --git a/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseWindow.cs.meta b/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseWindow.cs.meta new file mode 100644 index 00000000..56268420 --- /dev/null +++ b/Assets/External/UniGLTF/Editor/UniHumanoid/HumanPoseWindow.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: faaa48d88f3baf94b89ba5238f36d967 \ No newline at end of file diff --git a/Assets/Scripts/KindRetargeting/CustomRetargetingScript.cs b/Assets/Scripts/KindRetargeting/CustomRetargetingScript.cs index ebecf14a..9b2a5afb 100644 --- a/Assets/Scripts/KindRetargeting/CustomRetargetingScript.cs +++ b/Assets/Scripts/KindRetargeting/CustomRetargetingScript.cs @@ -943,7 +943,7 @@ namespace KindRetargeting /// 지정된 Animator의 포즈를 T-포즈로 설정합니다. /// /// T-포즈를 설정할 Animator - public static void SetTPose(Animator animator) + public void SetTPose(Animator animator) { if (animator == null || animator.avatar == null) return; @@ -957,6 +957,16 @@ namespace KindRetargeting { var pose = humanPoseClip.GetPose(); HumanPoseTransfer.SetPose(avatar, transform, pose); + + // 소스 아바타의 UpperChest 본 로컬 포지션 초기화 + if (animator == sourceAnimator) + { + Transform upperChest = animator.GetBoneTransform(HumanBodyBones.UpperChest); + if (upperChest != null) + { + upperChest.localPosition = Vector3.zero; + } + } } else { @@ -1054,16 +1064,21 @@ namespace KindRetargeting return; } - sourceAnimator.transform.localRotation = new Quaternion(0, 0, 0, 0); - - // T-포즈로 복 + // T-포즈로 복원 SetTPose(sourceAnimator); SetTPose(targetAnimator); + // 소스 아바타의 UpperChest 본 로컬 포지션 초기화 + Transform upperChest = sourceAnimator.GetBoneTransform(HumanBodyBones.UpperChest); + if (upperChest != null) + { + upperChest.localPosition = Vector3.zero; + } + // HumanPoseHandler 초기화 InitializeHumanPoseHandlers(); - // 회전 오프셋 로 계산 + // 회전 오프셋 다시 계산 CalculateRotationOffsets(); Debug.Log("포즈와 회전 오프셋이 재설정되었습니다."); diff --git a/Assets/Scripts/KindRetargeting/Editor/LimbWeightControllerEditor.cs b/Assets/Scripts/KindRetargeting/Editor/LimbWeightControllerEditor.cs index 8db94858..8229cfc4 100644 --- a/Assets/Scripts/KindRetargeting/Editor/LimbWeightControllerEditor.cs +++ b/Assets/Scripts/KindRetargeting/Editor/LimbWeightControllerEditor.cs @@ -18,6 +18,8 @@ namespace KindRetargeting SerializedProperty groundHipsMaxHeight; SerializedProperty footHeightMinThreshold; SerializedProperty footHeightMaxThreshold; + SerializedProperty enableLeftArmIK; + SerializedProperty enableRightArmIK; private bool showDistanceSettings = true; private bool showWeightSettings = true; @@ -25,6 +27,7 @@ namespace KindRetargeting private bool showReferences = true; private bool showGroundHipsSettings = true; private bool showFootHeightSettings = true; + private bool showIKActivationSettings = true; protected override void OnEnable() { @@ -45,6 +48,8 @@ namespace KindRetargeting groundHipsMaxHeight = serializedObject.FindProperty("groundHipsMaxHeight"); footHeightMinThreshold = serializedObject.FindProperty("footHeightMinThreshold"); footHeightMaxThreshold = serializedObject.FindProperty("footHeightMaxThreshold"); + enableLeftArmIK = serializedObject.FindProperty("enableLeftArmIK"); + enableRightArmIK = serializedObject.FindProperty("enableRightArmIK"); } } @@ -59,6 +64,16 @@ namespace KindRetargeting EditorGUILayout.Space(10); GUI.backgroundColor = new Color(0.8f, 0.9f, 1f); + showIKActivationSettings = EditorGUILayout.Foldout(showIKActivationSettings, "IK 활성화 설정", true); + if (showIKActivationSettings) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(enableLeftArmIK, new GUIContent("왼팔 IK 활성화")); + EditorGUILayout.PropertyField(enableRightArmIK, new GUIContent("오른팔 IK 활성화")); + EditorGUI.indentLevel--; + } + + EditorGUILayout.Space(5); showDistanceSettings = EditorGUILayout.Foldout(showDistanceSettings, "거리 기반 가중치 설정", true); if (showDistanceSettings) { diff --git a/Assets/Scripts/KindRetargeting/LimbWeightController.cs b/Assets/Scripts/KindRetargeting/LimbWeightController.cs index 7221f485..8f07d12e 100644 --- a/Assets/Scripts/KindRetargeting/LimbWeightController.cs +++ b/Assets/Scripts/KindRetargeting/LimbWeightController.cs @@ -28,6 +28,10 @@ namespace KindRetargeting [SerializeField, Range(0.1f, 0.5f)] public float footHeightMinThreshold = 0.2f; // 최소 높이 (가중치 1) [SerializeField, Range(0.5f, 1.0f)] public float footHeightMaxThreshold = 0.5f; // 최대 높이 (가중치 0) + [Header("IK 활성화 설정")] + [SerializeField] public bool enableLeftArmIK = true; // 왼팔 IK 활성화 여부 + [SerializeField] public bool enableRightArmIK = true; // 오른팔 IK 활성화 여부 + private FullBodyInverseKinematics_RND fbik; private CustomRetargetingScript crs; @@ -418,12 +422,13 @@ namespace KindRetargeting { if (fbik.solver.leftArm.target != null) { - fbik.solver.leftArm.positionWeight = MasterleftArmEndWeights; - fbik.solver.leftArm.rotationWeight = MasterleftArmEndWeights; + float finalLeftArmWeight = enableLeftArmIK ? MasterleftArmEndWeights : 0f; + fbik.solver.leftArm.positionWeight = finalLeftArmWeight; + fbik.solver.leftArm.rotationWeight = finalLeftArmWeight; } if (fbik.solver.leftArm.bendGoal != null) - fbik.solver.leftArm.bendGoalWeight = MasterleftArmEndWeights; + fbik.solver.leftArm.bendGoalWeight = enableLeftArmIK ? MasterleftArmEndWeights : 0f; } // 오른쪽 팔 가중치 적용 @@ -431,12 +436,13 @@ namespace KindRetargeting { if (fbik.solver.rightArm.target != null) { - fbik.solver.rightArm.positionWeight = MasterrightArmEndWeights; - fbik.solver.rightArm.rotationWeight = MasterrightArmEndWeights; + float finalRightArmWeight = enableRightArmIK ? MasterrightArmEndWeights : 0f; + fbik.solver.rightArm.positionWeight = finalRightArmWeight; + fbik.solver.rightArm.rotationWeight = finalRightArmWeight; } if (fbik.solver.rightArm.bendGoal != null) - fbik.solver.rightArm.bendGoalWeight = MasterrightArmEndWeights; + fbik.solver.rightArm.bendGoalWeight = enableRightArmIK ? MasterrightArmEndWeights : 0f; } // 왼쪽 다리 가중치 적용 diff --git a/Assets/Scripts/KindRetargeting/PropLocationController.cs b/Assets/Scripts/KindRetargeting/PropLocationController.cs index 0455ae72..b6048dfb 100644 --- a/Assets/Scripts/KindRetargeting/PropLocationController.cs +++ b/Assets/Scripts/KindRetargeting/PropLocationController.cs @@ -1,5 +1,6 @@ using UnityEngine; using System.Collections.Generic; +using UniHumanoid; namespace KindRetargeting { @@ -22,10 +23,30 @@ namespace KindRetargeting CreateTargets(); } + public void SetTPose(Animator animator) + { + if (animator == null || animator.avatar == null) + return; + + Avatar avatar = animator.avatar; + Transform transform = animator.transform; + + // HumanPoseClip에 저장된 T-포즈 데이터를 로드하여 적용 + var humanPoseClip = Resources.Load(HumanPoseClip.TPoseResourcePath); + if (humanPoseClip != null) + { + var pose = humanPoseClip.GetPose(); + HumanPoseTransfer.SetPose(avatar, transform, pose); + } + else + { + Debug.LogWarning("T-Pose 데이터가 존재하지 않습니다."); + } + } private void CreateTargets() { Animator animator = GetComponent(); - KindRetargeting.CustomRetargetingScript.SetTPose(animator); + SetTPose(animator); // 왼손 타겟 및 오프셋 설정 Transform leftHandBone = animator.GetBoneTransform(HumanBodyBones.LeftHand); @@ -36,12 +57,12 @@ namespace KindRetargeting leftTarget.transform.parent = leftHandBone; // 왼손 본에 직접 부모 설정 leftHandTargetOffset.target = leftTarget.transform; leftTarget.transform.position = leftHandBone.position + new Vector3(-0.039f, -0.022f, 0f); - leftTarget.transform.rotation = Quaternion.Euler( 90f, 0f, 0f); - + leftTarget.transform.rotation = Quaternion.Euler(90f, 0f, 0f); + GameObject leftOffset = new GameObject("Left_Hand_Offset"); leftOffset.transform.parent = leftTarget.transform; leftHandTargetOffset.offset = leftOffset.transform; - + // 로컬 포지션과 로테이션 설정 leftHandTargetOffset.offset.localPosition = Vector3.zero; leftHandTargetOffset.offset.localRotation = Quaternion.identity; @@ -57,11 +78,11 @@ namespace KindRetargeting rightHandTargetOffset.target = rightTarget.transform; rightTarget.transform.position = rightHandBone.position + new Vector3(0.039f, -0.022f, 0f); rightTarget.transform.rotation = Quaternion.Euler(90f, 0f, 0f); - + GameObject rightOffset = new GameObject("Right_Hand_Offset"); rightOffset.transform.parent = rightTarget.transform; rightHandTargetOffset.offset = rightOffset.transform; - + // 로컬 포지션과 로테이션 설정 rightHandTargetOffset.offset.localPosition = Vector3.zero; rightHandTargetOffset.offset.localRotation = Quaternion.identity; @@ -77,11 +98,11 @@ namespace KindRetargeting headTargetOffset.target = headTarget.transform; headTarget.transform.position = headBone.position + new Vector3(0f, 0.16f, 0f); headTarget.transform.rotation = Quaternion.Euler(0f, 0f, 0f); - + GameObject headOffset = new GameObject("Head_Offset"); headOffset.transform.parent = headTarget.transform; headTargetOffset.offset = headOffset.transform; - + // 기본 오프셋 설정 headTargetOffset.offset.localPosition = Vector3.zero; headTargetOffset.offset.localRotation = Quaternion.identity;