This commit is contained in:
ousttrue
2021-11-24 21:52:47 +09:00
parent b1c431a04e
commit 4533a7f0bf
5 changed files with 29 additions and 12 deletions

View File

@@ -57,7 +57,7 @@ namespace UniVRM10
y += height;
rect = new Rect(position.x, y, position.width, height);
if (ExpressionEditorHelper.FloatSlider(rect, property.FindPropertyRelative(nameof(MorphTargetBinding.Weight)), 1.0f))
if (ExpressionEditorHelper.FloatSlider(rect, property.FindPropertyRelative(nameof(MorphTargetBinding.Weight)), MorphTargetBinding.MAX_WEIGHT))
{
changed = true;
}

View File

@@ -192,11 +192,11 @@ namespace UniVRM10
//EditorGUI.indentLevel += 1;
for (int i = 0; i < mesh.blendShapeCount; ++i)
{
var src = renderer.GetBlendShapeWeight(i) * 0.01f;
var dst = EditorGUILayout.Slider(mesh.GetBlendShapeName(i), src, 0, 1.0f);
var src = renderer.GetBlendShapeWeight(i) * MorphTargetBinding.UNITY_TO_VRM;
var dst = EditorGUILayout.Slider(mesh.GetBlendShapeName(i), src, 0, MorphTargetBinding.MAX_WEIGHT);
if (dst != src)
{
renderer.SetBlendShapeWeight(i, dst * 100.0f);
renderer.SetBlendShapeWeight(i, dst * MorphTargetBinding.VRM_TO_UNITY);
changed = true;
}
}
@@ -210,7 +210,7 @@ namespace UniVRM10
MorphTargetBinding[] GetBindings(out string _maxWeightName)
{
var maxWeight = 0.0f;
var maxUnityWeight = 0.0f;
var maxWeightName = "";
// weightのついたblendShapeを集める
var values = m_items
@@ -225,18 +225,18 @@ namespace UniVRM10
{
for (int i = 0; i < mesh.blendShapeCount; ++i)
{
var weight = x.SkinnedMeshRenderer.GetBlendShapeWeight(i);
if (weight == 0)
var unityWeight = x.SkinnedMeshRenderer.GetBlendShapeWeight(i);
if (unityWeight == 0)
{
continue;
}
var name = mesh.GetBlendShapeName(i);
if (weight > maxWeight)
if (unityWeight > maxUnityWeight)
{
maxWeightName = name;
maxWeight = weight;
maxUnityWeight = unityWeight;
}
list.Add(new MorphTargetBinding(relativePath, i, weight * 0.01f));
list.Add(new MorphTargetBinding(relativePath, i, unityWeight * MorphTargetBinding.UNITY_TO_VRM));
}
}
return list;

View File

@@ -6,6 +6,18 @@ namespace UniVRM10
[Serializable]
public struct MorphTargetBinding : IEquatable<MorphTargetBinding>
{
/// <summary>
/// Unity の BlendShape の値域は 0-100
/// </summary>
public const float VRM_TO_UNITY = 100.0f;
/// <summary>
/// VRM-1.0 の MorphTargetBinding.Weight の値域は 0-1.0
/// </summary>
public const float UNITY_TO_VRM = 0.01f;
public const float MAX_WEIGHT = 1.0f;
/// <summary>
/// SkinnedMeshRenderer.BlendShape[Index].Weight を 指し示す。
///

View File

@@ -59,8 +59,13 @@ namespace UniVRM10
{
m_morphTargetSetterMap.Add(binding, x =>
{
if (target == null)
{
// recompile in editor ?
return;
}
// VRM-1.0 weight is 0-1
target.SetBlendShapeWeight(binding.Index, x * 100.0f);
target.SetBlendShapeWeight(binding.Index, x * MorphTargetBinding.VRM_TO_UNITY);
});
}
else

View File

@@ -79,7 +79,7 @@ namespace UniVRM10
{
if (x.Index >= 0 && x.Index < SkinnedMeshRenderer.sharedMesh.blendShapeCount)
{
SkinnedMeshRenderer.SetBlendShapeWeight(x.Index, x.Weight * weight * 100.0f);
SkinnedMeshRenderer.SetBlendShapeWeight(x.Index, x.Weight * weight * MorphTargetBinding.VRM_TO_UNITY);
}
else
{