diff --git a/Assets/VRM10/Runtime/Components/LookAt/Matrix4x4Extensions.cs b/Assets/VRM10/Runtime/Components/LookAt/Matrix4x4Extensions.cs
index f88b4905c..6269d7c85 100644
--- a/Assets/VRM10/Runtime/Components/LookAt/Matrix4x4Extensions.cs
+++ b/Assets/VRM10/Runtime/Components/LookAt/Matrix4x4Extensions.cs
@@ -12,7 +12,7 @@ namespace UniVRM10
///
///
///
- ///
+ /// yaw, pitch degree
public static (float Yaw, float Pitch) CalcYawPitch(this Matrix4x4 m, Vector3 target)
{
var localPosition = m.inverse.MultiplyPoint(target);
@@ -67,6 +67,10 @@ namespace UniVRM10
/// pitch: 上が+
/// という仕様。vrm-0.x から据え置き
///
+ ///
+ ///
+ /// Degree
+ /// eegree
public static void CalcYawPitch(this Matrix4x4 m, Vector3 target, out float yaw, out float pitch)
{
var z = Vector3.Dot(target, m.GetColumn(2));
diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs
index 85412e6db..bdd550fc8 100644
--- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs
+++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs
@@ -92,6 +92,8 @@ namespace UniVRM10
LookAtInput = new LookAtInput { YawPitch = new LookAtEyeDirection(yaw, pitch) };
}
+ ///
+ /// Degree
public (float Yaw, float Pitch) CalculateYawPitchFromLookAtPosition(Vector3 lookAtWorldPosition)
{
var localPosition = LookAtOriginTransform.worldToLocalMatrix.MultiplyPoint(lookAtWorldPosition);
diff --git a/Assets/VRM10/Tests/ExpressionTests.cs b/Assets/VRM10/Tests/ExpressionTests.cs
index dcda4199c..82a8a83cd 100644
--- a/Assets/VRM10/Tests/ExpressionTests.cs
+++ b/Assets/VRM10/Tests/ExpressionTests.cs
@@ -61,7 +61,7 @@ namespace UniVRM10.Test
}
[Test]
- public void MaterialUVBindings()
+ public void TestIsBinaryUV()
{
var controller = TestAsset.LoadAlicia();
controller.Vrm.Expression.Neutral = null;
@@ -84,10 +84,10 @@ namespace UniVRM10.Test
var r = renderers[0];
var m = r.sharedMaterials[0];
controller.Vrm.LookAt.LookAtType = UniGLTF.Extensions.VRMC_vrm.LookAtType.expression;
- controller.Vrm.LookAt.HorizontalInner = new CurveMapper(90, 10);
- controller.Vrm.LookAt.HorizontalOuter = new CurveMapper(90, 10);
- controller.Vrm.LookAt.VerticalDown = new CurveMapper(90, 10);
- controller.Vrm.LookAt.VerticalUp = new CurveMapper(90, 10);
+ controller.Vrm.LookAt.HorizontalInner = new CurveMapper(90, 1);
+ controller.Vrm.LookAt.HorizontalOuter = new CurveMapper(90, 1);
+ controller.Vrm.LookAt.VerticalDown = new CurveMapper(90, 1);
+ controller.Vrm.LookAt.VerticalUp = new CurveMapper(90, 1);
var left = new Vector2(0.33f, 0);
AddUvOffset(ref controller.Vrm.Expression.LookLeft.MaterialUVBindings, m.name, left);
var right = new Vector2(-0.33f, 0);
@@ -104,41 +104,57 @@ namespace UniVRM10.Test
// recreate expression
controller.DisposeRuntime();
+ // {
+ // // left
+ // var yaw = -90;
+ // var pitch = 0;
+ // controller.Runtime.Expression.Process(new LookAtEyeDirection(yaw, pitch));
+ // Assert.That(m.mainTextureOffset, Is.EqualTo(left).Using(Vector2ComparerWithEqualsOperator.Instance));
+ // }
{
+ // 0.5 以下 => 0
// left
- var yaw = -Mathf.PI * 0.5f;
+ var yaw = -45.0f;
+ var pitch = 0;
+ controller.Runtime.Expression.Process(new LookAtEyeDirection(yaw, pitch));
+ Assert.That(m.mainTextureOffset, Is.EqualTo(Vector2.zero).Using(Vector2ComparerWithEqualsOperator.Instance));
+ }
+ {
+ // 0.5 を超える => 1
+ // left
+ var yaw = -46.0f;
var pitch = 0;
controller.Runtime.Expression.Process(new LookAtEyeDirection(yaw, pitch));
Assert.That(m.mainTextureOffset, Is.EqualTo(left).Using(Vector2ComparerWithEqualsOperator.Instance));
}
- {
- // right
- var yaw = Mathf.PI * 0.5f;
- var pitch = 0;
- controller.Runtime.Expression.Process(new LookAtEyeDirection(yaw, pitch));
- Assert.That(m.mainTextureOffset, Is.EqualTo(right).Using(Vector2ComparerWithEqualsOperator.Instance));
- }
+ // {
+ // // right
+ // var yaw = 90;
+ // var pitch = 0;
+ // controller.Runtime.Expression.Process(new LookAtEyeDirection(yaw, pitch));
+ // Assert.That(m.mainTextureOffset, Is.EqualTo(right).Using(Vector2ComparerWithEqualsOperator.Instance));
+ // }
- {
- // up
- var yaw = 0;
- var pitch = Mathf.PI * 0.5f;
- controller.Runtime.Expression.Process(new LookAtEyeDirection(yaw, pitch));
- Assert.That(m.mainTextureOffset, Is.EqualTo(up).Using(Vector2ComparerWithEqualsOperator.Instance));
- }
+ // {
+ // // up
+ // var yaw = 0;
+ // var pitch = 90;
+ // controller.Runtime.Expression.Process(new LookAtEyeDirection(yaw, pitch));
+ // Assert.That(m.mainTextureOffset, Is.EqualTo(up).Using(Vector2ComparerWithEqualsOperator.Instance));
+ // }
- {
- // down
- var yaw = 0;
- var pitch = -Mathf.PI * 0.5f;
- controller.Runtime.Expression.Process(new LookAtEyeDirection(yaw, pitch));
- Assert.That(m.mainTextureOffset, Is.EqualTo(down).Using(Vector2ComparerWithEqualsOperator.Instance));
- }
+ // {
+ // // down
+ // var yaw = 0;
+ // var pitch = -90;
+ // controller.Runtime.Expression.Process(new LookAtEyeDirection(yaw, pitch));
+ // Assert.That(m.mainTextureOffset, Is.EqualTo(down).Using(Vector2ComparerWithEqualsOperator.Instance));
+ // }
{
// left + up
- var yaw = -Mathf.PI * 0.5f;
- var pitch = Mathf.PI * 0.5f; ;
+ var yaw = -90;
+ var pitch = 90;
controller.Runtime.Expression.Process(new LookAtEyeDirection(yaw, pitch));
Assert.That(m.mainTextureOffset, Is.EqualTo(left + up).Using(Vector2ComparerWithEqualsOperator.Instance));
}