Merge pull request #2238 from ousttrue/fix/hide_not_impl_option

rotation もしくは scaling だけを freeze するのは難しかった。
This commit is contained in:
ousttrue 2024-02-08 17:05:38 +09:00 committed by GitHub
commit ccd3a12ae4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 13 additions and 36 deletions

View File

@ -300,10 +300,7 @@ namespace UniGLTF.MeshUtility
bool MeshFreezeGui()
{
var blendShape = ToggleIsModified("BlendShape", ref MeshUtility.FreezeBlendShape);
var scale = ToggleIsModified("Scale", ref MeshUtility.FreezeScaling);
var rotation = ToggleIsModified("Rotation", ref MeshUtility.FreezeRotation);
return blendShape || scale || rotation;
return ToggleIsModified("BlendShapeRotationScaling", ref MeshUtility.FreezeBlendShapeRotationAndScaling);
}
protected virtual bool MeshIntegrateGui()

View File

@ -49,13 +49,8 @@ namespace UniGLTF.MeshUtility
/// 回転とスケールを除去し、BlendShape の現状を焼き付けた版を作成する(まだ、アタッチしない)
/// </summary>
public static Dictionary<Transform, MeshAttachInfo> NormalizeHierarchyFreezeMesh(
GameObject go, bool freezeRotation)
GameObject go)
{
if (!freezeRotation)
{
throw new NotImplementedException("WIP");
}
var result = new Dictionary<Transform, MeshAttachInfo>();
foreach (var src in go.transform.Traverse())
{
@ -108,4 +103,4 @@ namespace UniGLTF.MeshUtility
}
}
}
}
}

View File

@ -23,23 +23,7 @@ namespace UniGLTF.MeshUtility
/// - Node
/// - InverseBindMatrices
/// </summary>
public bool FreezeBlendShape = false;
/// <summary>
/// Same as VRM-0 normalization
/// - Mesh
/// - Node
/// - InverseBindMatrices
/// </summary>
public bool FreezeScaling = true;
/// <summary>
/// Same as VRM-0 normalization
/// - Mesh
/// - Node
/// - InverseBindMatrices
/// </summary>
public bool FreezeRotation = false;
public bool FreezeBlendShapeRotationAndScaling = false;
public List<MeshIntegrationGroup> MeshIntegrationGroups = new List<MeshIntegrationGroup>();
@ -172,15 +156,15 @@ namespace UniGLTF.MeshUtility
public virtual (List<MeshIntegrationResult>, List<GameObject>) Process(
GameObject target, IEnumerable<MeshIntegrationGroup> groupCopy)
{
if (FreezeBlendShape || FreezeRotation || FreezeScaling)
if (FreezeBlendShapeRotationAndScaling)
{
// MeshをBakeする
var meshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(target, FreezeRotation);
var meshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(target);
// - ヒエラルキーから回転・拡縮を除去する
// - BakeされたMeshで置き換える
// - bindPoses を再計算する
BoneNormalizer.Replace(target, meshMap, FreezeRotation, FreezeScaling);
BoneNormalizer.Replace(target, meshMap, true, true);
}
var newList = new List<GameObject>();

View File

@ -76,9 +76,10 @@ namespace VRM
}
// Transform の回転とスケールを Mesh に適用します。
// - BlendShape は現状がbakeされます
// - 回転とスケールが反映された新しい Mesh が作成されます
// - Transform の回転とスケールはクリアされます。world position を維持します
var newMeshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(go, true);
// - Transform の回転とスケールはクリアされます。world position を維持します
var newMeshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(go);
// SkinnedMeshRenderer.sharedMesh と MeshFilter.sharedMesh を新しいMeshで置き換える
BoneNormalizer.Replace(go, newMeshMap, true, true);

View File

@ -108,7 +108,7 @@ namespace VRM
// TODO: update: firstPerson offset
var (list, newList) = base.Process(target, copyGroup);
if (FreezeBlendShape || FreezeRotation || FreezeScaling)
if (FreezeBlendShapeRotationAndScaling)
{
var animator = target.GetComponent<Animator>();
var newAvatar = AvatarDescription.RecreateAvatar(animator);

View File

@ -11,7 +11,7 @@ namespace UniVRM10
{
public Vrm10MeshUtility()
{
FreezeRotation = true;
FreezeBlendShapeRotationAndScaling = true;
}
bool _generateFirstPerson = false;
@ -115,7 +115,7 @@ namespace UniVRM10
// TODO: update: firstPerson offset
var (list, newList) = base.Process(target, groupCopy);
if (FreezeBlendShape || FreezeRotation || FreezeScaling)
if (FreezeBlendShapeRotationAndScaling)
{
var animator = target.GetComponent<Animator>();
var newAvatar = AvatarDescription.RecreateAvatar(animator);