From d76031588b8148f53949e30f334c4656164e4be0 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Fri, 2 Apr 2021 13:47:23 +0900 Subject: [PATCH] fix ExportMetallicSmoothnessOcclusion #836 --- .../UniGLTF/IO/TextureIO/TextureExporter.cs | 14 ++++++++----- Assets/UniGLTF/Tests/UniGLTF/TextureTests.cs | 20 ++++++++++++++----- 2 files changed, 24 insertions(+), 10 deletions(-) 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)); + } } } }