diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/TextureExporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/TextureExporter.cs index 8933541ab..f126e8262 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/TextureExporter.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/TextureExporter.cs @@ -10,7 +10,8 @@ using UnityEditor; namespace UniGLTF { /// - /// glTF にエクスポートする Texture2D を蓄えて index を確定させる + /// glTF にエクスポートする Texture2D を蓄えて index を確定させる。 + /// Exporter の最後でまとめて Texture2D から bytes 列を得て出力する。 /// public class TextureExporter { @@ -160,11 +161,11 @@ namespace UniGLTF } // cache - if (m_exportMap.TryGetValue(new ExportKey(metallicSmoothTexture, glTFTextureTypes.OcclusionMetallicRoughness), out var index)) + if (metallicSmoothTexture != null && m_exportMap.TryGetValue(new ExportKey(metallicSmoothTexture, glTFTextureTypes.OcclusionMetallicRoughness), out var index)) { return index; } - if (m_exportMap.TryGetValue(new ExportKey(occlusionTexture, glTFTextureTypes.OcclusionMetallicRoughness), out index)) + if (occlusionTexture != null && m_exportMap.TryGetValue(new ExportKey(occlusionTexture, glTFTextureTypes.OcclusionMetallicRoughness), out index)) { return index; } @@ -176,8 +177,11 @@ namespace UniGLTF var texture2D = OcclusionMetallicRoughnessConverter.Export(metallicSmoothTexture, smoothness, occlusionTexture); Exported.Add(texture2D); - m_exportMap.Add(new ExportKey(metallicSmoothTexture, glTFTextureTypes.OcclusionMetallicRoughness), index); - if (occlusionTexture != metallicSmoothTexture && occlusionTexture != null) + if (metallicSmoothTexture != null) + { + m_exportMap.Add(new ExportKey(metallicSmoothTexture, glTFTextureTypes.OcclusionMetallicRoughness), index); + } + if (occlusionTexture != null && occlusionTexture != metallicSmoothTexture) { m_exportMap.Add(new ExportKey(occlusionTexture, glTFTextureTypes.OcclusionMetallicRoughness), index); } diff --git a/Assets/UniGLTF/Tests/UniGLTF/TextureTests.cs b/Assets/UniGLTF/Tests/UniGLTF/TextureTests.cs index d1165e6d9..91c960e2a 100644 --- a/Assets/UniGLTF/Tests/UniGLTF/TextureTests.cs +++ b/Assets/UniGLTF/Tests/UniGLTF/TextureTests.cs @@ -54,14 +54,24 @@ namespace UniGLTF [Test] public void ExportMetallicSmoothnessOcclusion_Test() { - var exporter = new TextureExporter(); var metallic = new Texture2D(4, 4, TextureFormat.ARGB32, false, true); var occlusion = new Texture2D(4, 4, TextureFormat.ARGB32, false, true); - Assert.AreEqual(-1, exporter.ExportMetallicSmoothnessOcclusion(null, 0, null)); - Assert.AreEqual(0, exporter.ExportMetallicSmoothnessOcclusion(null, 0, occlusion)); - Assert.AreEqual(0, exporter.ExportMetallicSmoothnessOcclusion(metallic, 0, null)); - Assert.AreEqual(0, exporter.ExportMetallicSmoothnessOcclusion(metallic, 0, occlusion)); + { + var exporter = new TextureExporter(); + Assert.AreEqual(-1, exporter.ExportMetallicSmoothnessOcclusion(null, 0, null)); + } + { + var exporter = new TextureExporter(); + Assert.AreEqual(0, exporter.ExportMetallicSmoothnessOcclusion(null, 0, occlusion)); + Assert.AreEqual(1, exporter.ExportMetallicSmoothnessOcclusion(metallic, 0, null)); + } + { + var exporter = new TextureExporter(); + Assert.AreEqual(0, exporter.ExportMetallicSmoothnessOcclusion(metallic, 0, occlusion)); + Assert.AreEqual(0, exporter.ExportMetallicSmoothnessOcclusion(null, 0, occlusion)); + Assert.AreEqual(0, exporter.ExportMetallicSmoothnessOcclusion(metallic, 0, null)); + } } } }