mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-25 12:28:43 -05:00
MeshMap
This commit is contained in:
parent
d6c4a2bea6
commit
e7390ecf2c
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,8 @@ namespace UniGLTF.MeshUtility
|
|||
|
||||
integrator.Intgrate(onlyBlendShapeRenderers);
|
||||
integrator.Result.IntegratedRenderer.transform.SetParent(go.transform, false);
|
||||
|
||||
integrator.Result.CreateMeshMap();
|
||||
return integrator.Result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user