mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-14 22:50:08 -05:00
Merge pull request #2238 from ousttrue/fix/hide_not_impl_option
rotation もしくは scaling だけを freeze するのは難しかった。
This commit is contained in:
commit
ccd3a12ae4
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user