From 2ca1c22e9fadd124a5fe89406c4233484bbdeb0e Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 26 Mar 2025 16:09:32 +0900 Subject: [PATCH] FaceCameraTarget --- .../VRM10Viewer/UIToolkit/EmotionElement.cs | 30 ++++++++++-- .../UIToolkit/ExpressionElement.cs | 5 ++ .../VRM10Viewer/UIToolkit/MainView.uxml | 4 +- .../VRM10Viewer/UIToolkit/MetaView.uxml | 2 +- .../VRM10Viewer/UIToolkit/VRM10MainView.cs | 47 ++++++++++--------- .../VRM10Viewer/VRM10Viewer.unity | 6 ++- .../VRM10Viewer/VRM10ViewerController.cs | 3 ++ 7 files changed, 66 insertions(+), 31 deletions(-) diff --git a/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/EmotionElement.cs b/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/EmotionElement.cs index 352bb2677..33ceeecf6 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/EmotionElement.cs +++ b/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/EmotionElement.cs @@ -7,7 +7,7 @@ using UniVRM10; public class EmotionElement : VisualElement { Slider _slider; - Toggle _toggle; + Toggle m_binary; DropdownField _overrideMouth; DropdownField _overrideBlink; DropdownField _overrideLookat; @@ -21,8 +21,8 @@ public class EmotionElement : VisualElement { _slider = this.Q("Slider"); Debug.Assert(_slider != null); - _toggle = this.Q("Toggle"); - Debug.Assert(_toggle != null); + m_binary = this.Q("Toggle"); + Debug.Assert(m_binary != null); _overrideMouth = this.Q("OverrideMouth"); Debug.Assert(_overrideMouth != null); _overrideBlink = this.Q("OverrideBlink"); @@ -53,7 +53,7 @@ public class EmotionElement : VisualElement public void ApplyRuntime(VRM10Expression expression) { - expression.IsBinary = _toggle.value; + expression.IsBinary = m_binary.value; if (m_useOverride) { expression.OverrideMouth = ToOverrideType(_overrideMouth.index); @@ -62,6 +62,28 @@ public class EmotionElement : VisualElement } } + static int GetOverrideIndex(UniGLTF.Extensions.VRMC_vrm.ExpressionOverrideType value) + { + switch (value) + { + case UniGLTF.Extensions.VRMC_vrm.ExpressionOverrideType.none: return 0; + case UniGLTF.Extensions.VRMC_vrm.ExpressionOverrideType.block: return 1; + case UniGLTF.Extensions.VRMC_vrm.ExpressionOverrideType.blend: return 2; + default: return -1; + } + } + + public void OnLoad(VRM10Expression expression) + { + m_binary.value = expression.IsBinary; + if (m_useOverride) + { + _overrideMouth.index = GetOverrideIndex(expression.OverrideMouth); + _overrideBlink.index = GetOverrideIndex(expression.OverrideBlink); + _overrideLookat.index = GetOverrideIndex(expression.OverrideLookAt); + } + } + public new class UxmlFactory : UxmlFactory { } public new class UxmlTraits : VisualElement.UxmlTraits diff --git a/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/ExpressionElement.cs b/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/ExpressionElement.cs index fabde6ed5..03522a091 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/ExpressionElement.cs +++ b/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/ExpressionElement.cs @@ -32,6 +32,11 @@ public class ExpressionElement : VisualElement expression.IsBinary = _toggle.value; } + public void OnLoad(VRM10Expression expression) + { + _toggle.value = expression.IsBinary; + } + public new class UxmlFactory : UxmlFactory { } public new class UxmlTraits : VisualElement.UxmlTraits diff --git a/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/MainView.uxml b/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/MainView.uxml index 389dba884..79d645c87 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/MainView.uxml +++ b/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/MainView.uxml @@ -62,8 +62,8 @@ - - + + diff --git a/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/MetaView.uxml b/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/MetaView.uxml index 58780ed75..d316aa3a5 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/MetaView.uxml +++ b/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/MetaView.uxml @@ -14,9 +14,9 @@ - + diff --git a/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/VRM10MainView.cs b/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/VRM10MainView.cs index 729243304..f023f4236 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/VRM10MainView.cs +++ b/Assets/VRM10_Samples/VRM10Viewer/UIToolkit/VRM10MainView.cs @@ -131,6 +131,7 @@ namespace UniVRM10.VRM10Viewer QueryOrAssert(out m_metaPermissionCommercial, root, "PermissionCommercial"); QueryOrAssert(out m_metaLicense, root, "MetaLicense"); QueryOrAssert(out m_metaDistribution, root, "MetaDistribution"); + root.Q("FaceCameraTarget").style.backgroundImage = new StyleBackground(Background.FromRenderTexture(m_controller.m_faceCameraTarget)); m_autoEmotion = gameObject.AddComponent(); m_autoBlink = gameObject.AddComponent(); @@ -258,20 +259,20 @@ namespace UniVRM10.VRM10Viewer } else { - // vrm.Runtime.LookAt.SetYawPitchManually(m_yaw.value, m_pitch.value); + vrm.Runtime.LookAt.SetYawPitchManually(m_yaw.value, m_pitch.value); } - // if (vrm.TryGetBoneTransform(HumanBodyBones.Head, out var head)) - // { - // var initLocarlRotation = vrm.DefaultTransformStates[head].LocalRotation; - // var r = head.rotation * Quaternion.Inverse(initLocarlRotation); - // var pos = head.position - // + (r * Vector3.forward * 0.7f) - // + (r * Vector3.up * 0.07f) - // ; - // m_faceCamera.position = pos; - // m_faceCamera.rotation = r; - // } + if (vrm.TryGetBoneTransform(HumanBodyBones.Head, out var head)) + { + var initLocarlRotation = vrm.DefaultTransformStates[head].LocalRotation; + var r = head.rotation * Quaternion.Inverse(initLocarlRotation); + var pos = head.position + + (r * Vector3.forward * 0.7f) + + (r * Vector3.up * 0.07f) + ; + m_controller.m_faceCamera.position = pos; + m_controller.m_faceCamera.rotation = r; + } } } @@ -289,17 +290,17 @@ namespace UniVRM10.VRM10Viewer void OnLoaded(Loaded loaded) { m_showBoxMan.value = false; - // m_happy.OnLoad(loaded.Instance.Vrm.Expression.Happy); - // m_angry.OnLoad(loaded.Instance.Vrm.Expression.Angry); - // m_sad.OnLoad(loaded.Instance.Vrm.Expression.Sad); - // m_relaxed.OnLoad(loaded.Instance.Vrm.Expression.Relaxed); - // m_surprised.OnLoad(loaded.Instance.Vrm.Expression.Surprised); - // m_lipAa.OnLoad(loaded.Instance.Vrm.Expression.Aa); - // m_lipIh.OnLoad(loaded.Instance.Vrm.Expression.Ih); - // m_lipOu.OnLoad(loaded.Instance.Vrm.Expression.Ou); - // m_lipEe.OnLoad(loaded.Instance.Vrm.Expression.Ee); - // m_lipOh.OnLoad(loaded.Instance.Vrm.Expression.Oh); - // m_blink.OnLoad(loaded.Instance.Vrm.Expression.Blink); + m_happy.OnLoad(loaded.Instance.Vrm.Expression.Happy); + m_angry.OnLoad(loaded.Instance.Vrm.Expression.Angry); + m_sad.OnLoad(loaded.Instance.Vrm.Expression.Sad); + m_relaxed.OnLoad(loaded.Instance.Vrm.Expression.Relaxed); + m_surprised.OnLoad(loaded.Instance.Vrm.Expression.Surprised); + m_lipAa.OnLoad(loaded.Instance.Vrm.Expression.Aa); + m_lipIh.OnLoad(loaded.Instance.Vrm.Expression.Ih); + m_lipOu.OnLoad(loaded.Instance.Vrm.Expression.Ou); + m_lipEe.OnLoad(loaded.Instance.Vrm.Expression.Ee); + m_lipOh.OnLoad(loaded.Instance.Vrm.Expression.Oh); + m_blink.OnLoad(loaded.Instance.Vrm.Expression.Blink); } public void UpdateMeta(Texture2D thumbnail, UniGLTF.Extensions.VRMC_vrm.Meta meta, Migration.Vrm0Meta meta0) diff --git a/Assets/VRM10_Samples/VRM10Viewer/VRM10Viewer.unity b/Assets/VRM10_Samples/VRM10Viewer/VRM10Viewer.unity index 3c72f7340..a1d4d8411 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/VRM10Viewer.unity +++ b/Assets/VRM10_Samples/VRM10Viewer/VRM10Viewer.unity @@ -4054,7 +4054,9 @@ MonoBehaviour: m_EditorClassIdentifier: m_controller: m_motion: {fileID: 4900000, guid: 08df5151e71aed748b13547492fb8b9a, type: 3} - m_faceCamera: {fileID: 1832097581} + m_faceCameraTarget: {fileID: 8600000, guid: 30519662c19bd4842a70b1f1ea87a8be, + type: 2} + m_faceCamera: {fileID: 1150163685} m_lookAtTarget: {fileID: 802105000} m_pbrOpaqueMaterial: {fileID: -876546973899608171, guid: ac58f8c11a130e04ba883a82ae4b78e4, type: 3} @@ -30956,6 +30958,8 @@ MonoBehaviour: m_EditorClassIdentifier: m_controller: m_motion: {fileID: 4900000, guid: 08df5151e71aed748b13547492fb8b9a, type: 3} + m_faceCameraTarget: {fileID: 8600000, guid: 30519662c19bd4842a70b1f1ea87a8be, + type: 2} m_faceCamera: {fileID: 1832097581} m_lookAtTarget: {fileID: 802105000} m_pbrOpaqueMaterial: {fileID: -876546973899608171, guid: ac58f8c11a130e04ba883a82ae4b78e4, diff --git a/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerController.cs b/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerController.cs index ff2d1203c..178b77314 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerController.cs +++ b/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerController.cs @@ -19,6 +19,9 @@ namespace UniVRM10.VRM10Viewer [SerializeField] TextAsset m_motion; + [SerializeField] + public RenderTexture m_faceCameraTarget = default; + [SerializeField] public Transform m_faceCamera = default; [SerializeField]