This commit is contained in:
ousttrue 2022-03-04 20:18:42 +09:00
parent d6c4a2bea6
commit e7390ecf2c
4 changed files with 48 additions and 17 deletions

View File

@ -4,10 +4,36 @@ using UnityEngine;
namespace UniGLTF.MeshUtility
{
[System.Serializable]
public class MeshMap
{
public List<Mesh> Sources = new List<Mesh>();
public Mesh Integrated;
}
public class MeshIntegrationResult
{
public List<SkinnedMeshRenderer> SourceSkinnedMeshRenderers = new List<SkinnedMeshRenderer>();
public List<MeshRenderer> SourceMeshRenderers = new List<MeshRenderer>();
public SkinnedMeshRenderer IntegratedRenderer;
public MeshMap MeshMap;
public void CreateMeshMap()
{
MeshMap = new MeshMap
{
Integrated = IntegratedRenderer.sharedMesh
};
foreach (var x in SourceSkinnedMeshRenderers)
{
MeshMap.Sources.Add(x.sharedMesh);
}
foreach (var x in SourceMeshRenderers)
{
var filter = x.GetComponent<MeshFilter>();
MeshMap.Sources.Add(filter.sharedMesh);
}
}
}
}

View File

@ -42,6 +42,8 @@ namespace UniGLTF.MeshUtility
integrator.Intgrate(onlyBlendShapeRenderers);
integrator.Result.IntegratedRenderer.transform.SetParent(go.transform, false);
integrator.Result.CreateMeshMap();
return integrator.Result;
}

View File

@ -48,6 +48,22 @@ namespace VRM
// Execute
var results = VRMMeshIntegratorUtility.Integrate(instance, clips);
// disable source renderer
foreach (var res in results)
{
foreach (var renderer in res.SourceSkinnedMeshRenderers)
{
Undo.RecordObject(renderer.gameObject, "Deactivate old renderer");
renderer.gameObject.SetActive(false);
}
foreach (var renderer in res.SourceMeshRenderers)
{
Undo.RecordObject(renderer.gameObject, "Deactivate old renderer");
renderer.gameObject.SetActive(false);
}
}
foreach (var result in results)
{
if (result.IntegratedRenderer == null) continue;
@ -74,20 +90,6 @@ namespace VRM
}
// destroy source renderers
foreach (var res in results)
{
foreach (var renderer in res.SourceSkinnedMeshRenderers)
{
Undo.RecordObject(renderer.gameObject, "Deactivate old renderer");
renderer.gameObject.SetActive(false);
}
foreach (var renderer in res.SourceMeshRenderers)
{
Undo.RecordObject(renderer.gameObject, "Deactivate old renderer");
renderer.gameObject.SetActive(false);
}
}
Object.DestroyImmediate(instance);
return results;

View File

@ -14,6 +14,7 @@ namespace VRM
[SerializeField]
GameObject m_root;
[Header("Validation")]
[SerializeField]
Material[] m_uniqueMaterials;
@ -57,11 +58,11 @@ namespace VRM
MaterialList[] m_duplicateMaterials;
[Header("Result")]
public MeshIntegrationResult[] integrationResults;
public MeshMap[] integrationResults;
public static void CreateWizard()
{
ScriptableWizard.DisplayWizard<MeshIntegratorWizard>("MeshIntegrator", "Integrate and close window", "Integrate");
ScriptableWizard.DisplayWizard<MeshIntegratorWizard>("MeshIntegratorWizard", "Integrate and close window", "Integrate");
}
private void OnEnable()
@ -162,7 +163,7 @@ namespace VRM
return;
}
integrationResults = MeshIntegratorEditor.Integrate(m_root, assetPath).ToArray();
integrationResults = MeshIntegratorEditor.Integrate(m_root, assetPath).Select(x => x.MeshMap).ToArray();
}
void OnWizardCreate()