From 3156d0c74cb38d93e5df100ad0dbd0df55147ec0 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Mon, 21 Feb 2022 15:01:26 +0900 Subject: [PATCH] skip empty mesh --- .../VRM10/Runtime/IO/Model/ModelExporter.cs | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs b/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs index 06eea892a..f3fe262ab 100644 --- a/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs +++ b/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs @@ -53,6 +53,34 @@ namespace UniVRM10 return Model; } + /// + /// 頂点と面が存在する Mesh のみをエクスポート可能とする + /// + static bool MeshCanExport(UnityEngine.Mesh mesh) + { + if (mesh == null) + { + Debug.LogWarning("mesh is null"); + return false; + } + if (mesh.vertexCount == 0) + { + Debug.LogWarning($"{mesh}: no vertices"); + return false; + } + if (mesh.triangles == null) + { + Debug.LogWarning($"{mesh}: no triangles"); + return false; + } + if (mesh.triangles.Length == 0) + { + Debug.LogWarning($"{mesh}: no triangles"); + return false; + } + return true; + } + VrmLib.Model _Export(INativeArrayManager arrayManager, GameObject root) { if (Model == null) @@ -94,7 +122,7 @@ namespace UniVRM10 { if (renderer is SkinnedMeshRenderer skinnedMeshRenderer) { - if (skinnedMeshRenderer.sharedMesh != null) + if (MeshCanExport(skinnedMeshRenderer.sharedMesh)) { var mesh = CreateMesh(arrayManager, skinnedMeshRenderer.sharedMesh, skinnedMeshRenderer, Materials); var skin = CreateSkin(arrayManager, skinnedMeshRenderer, Nodes, root); @@ -112,7 +140,7 @@ namespace UniVRM10 else if (renderer is MeshRenderer meshRenderer) { var filter = meshRenderer.gameObject.GetComponent(); - if (filter != null && filter.sharedMesh != null) + if (filter != null && MeshCanExport(filter.sharedMesh)) { var mesh = CreateMesh(arrayManager, filter.sharedMesh, meshRenderer, Materials); Model.MeshGroups.Add(mesh);