Skip to content

Commit

Permalink
Use material arrays as prim keys to make sure different sets of re-us…
Browse files Browse the repository at this point in the history
…ed meshes export correctly
  • Loading branch information
hybridherbst committed Apr 15, 2021
1 parent 5d159c7 commit 271997a
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 11 deletions.
4 changes: 2 additions & 2 deletions UnityGLTF/Assets/UnityGLTF/Editor/Scripts/GLTFImporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ public override void OnImportAsset(AssetImportContext ctx)
return mat;
});
}).ToArray();
}).Distinct().ToArray();

// Get textures
var textureNames = new List<string>();
Expand Down Expand Up @@ -195,7 +195,7 @@ public override void OnImportAsset(AssetImportContext ctx)
}
}
return matTextures;
}).ToArray();
}).Distinct().ToArray();

var folderName = Path.GetDirectoryName(ctx.assetPath);

Expand Down
18 changes: 9 additions & 9 deletions UnityGLTF/Assets/UnityGLTF/Runtime/Scripts/GLTFSceneExporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ private struct ImageInfo
protected struct PrimKey
{
public Mesh Mesh;
public Material Material;
public Material[] Materials;
}

private struct MeshAccessors
Expand Down Expand Up @@ -692,13 +692,13 @@ private NodeId ExportNode(Transform nodeTransform)
var smr = prim.GetComponent<SkinnedMeshRenderer>();
if (smr != null)
{
_primOwner[new PrimKey { Mesh = smr.sharedMesh, Material = smr.sharedMaterial }] = node.Mesh;
_primOwner[new PrimKey { Mesh = smr.sharedMesh, Materials = smr.sharedMaterials }] = node.Mesh;
}
else
{
var filter = prim.GetComponent<MeshFilter>();
var renderer = prim.GetComponent<MeshRenderer>();
_primOwner[new PrimKey { Mesh = filter.sharedMesh, Material = renderer.sharedMaterial }] = node.Mesh;
_primOwner[new PrimKey { Mesh = filter.sharedMesh, Materials = renderer.sharedMaterials }] = node.Mesh;
}
}
}
Expand Down Expand Up @@ -923,14 +923,14 @@ private MeshId ExportMesh(string name, GameObject[] primitives)
if (smr != null)
{
key.Mesh = smr.sharedMesh;
key.Material = smr.sharedMaterial;
key.Materials = smr.sharedMaterials;
}
else
{
var filter = prim.GetComponent<MeshFilter>();
var renderer = prim.GetComponent<MeshRenderer>();
key.Mesh = filter.sharedMesh;
key.Material = renderer.sharedMaterial;
key.Materials = renderer.sharedMaterials;
}

MeshId tempMeshId;
Expand Down Expand Up @@ -3182,16 +3182,16 @@ private UnityEngine.Mesh getMesh(GameObject gameObject)
return null;
}

private UnityEngine.Material getMaterial(GameObject gameObject)
private UnityEngine.Material[] getMaterial(GameObject gameObject)
{
if (gameObject.GetComponent<MeshRenderer>())
{
return gameObject.GetComponent<MeshRenderer>().sharedMaterial;
return gameObject.GetComponent<MeshRenderer>().sharedMaterials;
}

if (gameObject.GetComponent<SkinnedMeshRenderer>())
{
return gameObject.GetComponent<SkinnedMeshRenderer>().sharedMaterial;
return gameObject.GetComponent<SkinnedMeshRenderer>().sharedMaterials;
}

return null;
Expand All @@ -3202,7 +3202,7 @@ private void ExportSkinFromNode(Transform transform)
PrimKey key = new PrimKey();
UnityEngine.Mesh mesh = getMesh(transform.gameObject);
key.Mesh = mesh;
key.Material = getMaterial(transform.gameObject);
key.Materials = getMaterial(transform.gameObject);
MeshId val;
if (!_primOwner.TryGetValue(key, out val))
{
Expand Down

0 comments on commit 271997a

Please sign in to comment.