mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-13 06:20:01 -05:00
exclude mesh
This commit is contained in:
@@ -76,30 +76,11 @@ namespace UniGLTF.MeshUtility
|
||||
}
|
||||
}
|
||||
|
||||
public MeshIntegrator(IReadOnlyList<Renderer> excludes)
|
||||
public MeshIntegrator(IEnumerable<Mesh> excludes)
|
||||
{
|
||||
if (excludes != null)
|
||||
{
|
||||
foreach (var exclude in excludes)
|
||||
{
|
||||
if (exclude is SkinnedMeshRenderer smr)
|
||||
{
|
||||
if (smr.sharedMesh != null)
|
||||
{
|
||||
_excludes.Add(smr.sharedMesh);
|
||||
}
|
||||
}
|
||||
else if (exclude is MeshRenderer mr)
|
||||
{
|
||||
if (mr.GetComponent<MeshFilter>() is MeshFilter mf)
|
||||
{
|
||||
if (mf.sharedMesh != null)
|
||||
{
|
||||
_excludes.Add(mf.sharedMesh);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
_excludes.AddRange(excludes);
|
||||
}
|
||||
|
||||
Result = new MeshIntegrationResult();
|
||||
@@ -174,7 +155,7 @@ namespace UniGLTF.MeshUtility
|
||||
return;
|
||||
}
|
||||
var bindpose = bone.worldToLocalMatrix;
|
||||
|
||||
|
||||
BoneWeights.AddRange(Enumerable.Range(0, mesh.vertices.Length)
|
||||
.Select(x => new BoneWeight()
|
||||
{
|
||||
@@ -182,10 +163,10 @@ namespace UniGLTF.MeshUtility
|
||||
weight0 = 1,
|
||||
})
|
||||
);
|
||||
|
||||
|
||||
BindPoses.Add(bindpose);
|
||||
Bones.Add(bone);
|
||||
|
||||
|
||||
for (int i = 0; i < mesh.subMeshCount; ++i)
|
||||
{
|
||||
var indices = mesh.GetIndices(i).Select(x => x + indexOffset);
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace UniGLTF.MeshUtility
|
||||
/// <param name="go"></param>
|
||||
/// <param name="onlyBlendShapeRenderers">BlendShapeを保持するSkinnedMeshRendererのみ/BlendShapeを保持しないSkinnedMeshRenderer + MeshRenderer</param>
|
||||
/// <returns></returns>
|
||||
public static MeshIntegrationResult Integrate(GameObject go, bool onlyBlendShapeRenderers, IReadOnlyList<Renderer> excludes = null)
|
||||
public static MeshIntegrationResult Integrate(GameObject go, bool onlyBlendShapeRenderers, IEnumerable<Mesh> excludes = null)
|
||||
{
|
||||
// レンダラから情報を集める
|
||||
var integrator = new MeshUtility.MeshIntegrator(excludes);
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace VRM
|
||||
SkinnedMeshUtility.IsPrefab(Selection.activeObject);
|
||||
}
|
||||
|
||||
public static List<MeshIntegrationResult> Integrate(GameObject prefab, UniGLTF.UnityPath writeAssetPath, IReadOnlyList<Renderer> excludes)
|
||||
public static List<MeshIntegrationResult> Integrate(GameObject prefab, UniGLTF.UnityPath writeAssetPath, IEnumerable<Mesh> excludes)
|
||||
{
|
||||
Undo.RecordObject(prefab, "Mesh Integration");
|
||||
var instance = SkinnedMeshUtility.InstantiatePrefab(prefab);
|
||||
|
||||
@@ -128,7 +128,7 @@ namespace VRM
|
||||
void OnValidate()
|
||||
{
|
||||
if (m_root == null
|
||||
|| !PrefabUtility.IsPartOfAnyPrefab(m_root))
|
||||
|| !PrefabUtility.IsPartOfAnyPrefab(m_root) || m_root.transform.parent != null)
|
||||
{
|
||||
Debug.LogWarning("Invalidate");
|
||||
m_uniqueMaterials = new Material[] { };
|
||||
@@ -196,7 +196,28 @@ namespace VRM
|
||||
return;
|
||||
}
|
||||
|
||||
var excludes = m_excludes.Where(x => x.Renderer != null && x.Exclude).Select(x => x.Renderer).ToArray();
|
||||
var excludes = new List<Mesh>();
|
||||
foreach (var exclude in m_excludes)
|
||||
{
|
||||
if (exclude.Renderer is SkinnedMeshRenderer smr)
|
||||
{
|
||||
if (smr.sharedMesh != null)
|
||||
{
|
||||
excludes.Add(smr.sharedMesh);
|
||||
}
|
||||
}
|
||||
else if (exclude.Renderer is MeshRenderer mr)
|
||||
{
|
||||
if (mr.GetComponent<MeshFilter>() is MeshFilter mf)
|
||||
{
|
||||
if (mf.sharedMesh != null)
|
||||
{
|
||||
excludes.Add(mf.sharedMesh);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
integrationResults = MeshIntegratorEditor.Integrate(m_root, assetPath, excludes).Select(x => x.MeshMap).ToArray();
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace VRM
|
||||
return true;
|
||||
}
|
||||
|
||||
public static List<UniGLTF.MeshUtility.MeshIntegrationResult> Integrate(GameObject root, List<BlendShapeClip> blendshapeClips, IReadOnlyList<Renderer> excludes)
|
||||
public static List<UniGLTF.MeshUtility.MeshIntegrationResult> Integrate(GameObject root, List<BlendShapeClip> blendshapeClips, IEnumerable<Mesh> excludes)
|
||||
{
|
||||
var result = new List<UniGLTF.MeshUtility.MeshIntegrationResult>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user