mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-26 12:50:40 -05:00
FaceCameraTarget
This commit is contained in:
@@ -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>("Slider");
|
||||
Debug.Assert(_slider != null);
|
||||
_toggle = this.Q<Toggle>("Toggle");
|
||||
Debug.Assert(_toggle != null);
|
||||
m_binary = this.Q<Toggle>("Toggle");
|
||||
Debug.Assert(m_binary != null);
|
||||
_overrideMouth = this.Q<DropdownField>("OverrideMouth");
|
||||
Debug.Assert(_overrideMouth != null);
|
||||
_overrideBlink = this.Q<DropdownField>("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<EmotionElement, UxmlTraits> { }
|
||||
|
||||
public new class UxmlTraits : VisualElement.UxmlTraits
|
||||
|
||||
@@ -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<ExpressionElement, UxmlTraits> { }
|
||||
|
||||
public new class UxmlTraits : VisualElement.UxmlTraits
|
||||
|
||||
@@ -62,8 +62,8 @@
|
||||
</ui:Instance>
|
||||
<ui:Label tabindex="-1" text="LookAt" parse-escape-sequences="true" display-tooltip-when-elided="true" name="__LookAt__" style="-unity-font-style: bold; -unity-text-align: upper-center;" />
|
||||
<ui:Toggle label="Lookat Target" name="LookatTarget" value="true" style="flex-direction: row-reverse;" />
|
||||
<ui:Slider label="Yaw" high-value="100" name="Yaw" />
|
||||
<ui:Slider label="Pitch" high-value="100" name="Pitch" />
|
||||
<ui:Slider label="Yaw" high-value="180" name="Yaw" low-value="-180" />
|
||||
<ui:Slider label="Pitch" high-value="90" name="Pitch" low-value="-90" />
|
||||
</ui:VisualElement>
|
||||
<ui:VisualElement style="flex-grow: 1;" />
|
||||
<ui:Instance template="MetaView" name="Meta" style="background-color: rgba(255, 255, 255, 0.39);" />
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
<ui:TextField picking-mode="Ignore" label="Violent" value="filler text" focusable="false" readonly="true" name="PermissionViolent" />
|
||||
<ui:TextField picking-mode="Ignore" label="Sexual" value="filler text" focusable="false" readonly="true" name="PermissionSexual" />
|
||||
<ui:TextField picking-mode="Ignore" label="Commercial" value="filler text" focusable="false" readonly="true" name="PermissionCommercial" />
|
||||
<ui:Label tabindex="-1" text="Redistribution" parse-escape-sequences="true" display-tooltip-when-elided="true" style="-unity-font-style: bold; -unity-text-align: upper-center;" />
|
||||
<ui:TextField picking-mode="Ignore" label="License" value="filler text" focusable="false" readonly="true" name="MetaLicense" />
|
||||
<ui:TextField picking-mode="Ignore" label="Distribution" value="filler text" focusable="false" readonly="true" name="MetaDistribution" />
|
||||
<TextureElement name="FaceCameraTarget" style="width: 200px; height: 200px; flex-shrink: 0; align-self: center;" />
|
||||
</MetaView>
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
|
||||
@@ -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<TextureElement>("FaceCameraTarget").style.backgroundImage = new StyleBackground(Background.FromRenderTexture(m_controller.m_faceCameraTarget));
|
||||
|
||||
m_autoEmotion = gameObject.AddComponent<VRM10AutoExpression>();
|
||||
m_autoBlink = gameObject.AddComponent<VRM10Blinker>();
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -19,6 +19,9 @@ namespace UniVRM10.VRM10Viewer
|
||||
[SerializeField]
|
||||
TextAsset m_motion;
|
||||
|
||||
[SerializeField]
|
||||
public RenderTexture m_faceCameraTarget = default;
|
||||
|
||||
[SerializeField]
|
||||
public Transform m_faceCamera = default;
|
||||
[SerializeField]
|
||||
|
||||
Reference in New Issue
Block a user