/// <summary> /// Standard の Metallic, Smoothness, Occlusion をまとめ、index を確定させる /// </summary> /// <param name="metallicSmoothTexture"></param> /// <param name="smoothness"></param> /// <param name="occlusionTexture"></param> /// <returns></returns> public int ExportMetallicSmoothnessOcclusion(Texture metallicSmoothTexture, float smoothness, Texture occlusionTexture) { if (metallicSmoothTexture == null && occlusionTexture == null) { return(-1); } // cache if (m_exportMap.TryGetValue(new ExportKey(metallicSmoothTexture, glTFTextureTypes.OcclusionMetallicRoughness), out var index)) { return(index); } if (m_exportMap.TryGetValue(new ExportKey(occlusionTexture, glTFTextureTypes.OcclusionMetallicRoughness), out index)) { return(index); } // // Unity と glTF で互換性が無いので必ず変換が必用 // index = Exported.Count; var texture2D = OcclusionMetallicRoughnessConverter.Export(metallicSmoothTexture, smoothness, occlusionTexture); Exported.Add(texture2D); m_exportMap.Add(new ExportKey(metallicSmoothTexture, glTFTextureTypes.OcclusionMetallicRoughness), index); if (occlusionTexture != metallicSmoothTexture && occlusionTexture != null) { m_exportMap.Add(new ExportKey(occlusionTexture, glTFTextureTypes.OcclusionMetallicRoughness), index); } return(index); }
public void ExportingColorTest() { { var smoothness = 1.0f; Assert.That( OcclusionMetallicRoughnessConverter.ExportPixel(new Color32(255, 255, 255, 255), smoothness, default), // r <- 0 : (Unused) // g <- 0 : ((1 - src.a(as float) * smoothness) ^ 2)(as uint8) // b <- 255 : Same metallic (src.r) // a <- 255 : (Unused) Is.EqualTo(new Color32(0, 0, 255, 255))); } { var smoothness = 0.5f; Assert.That( OcclusionMetallicRoughnessConverter.ExportPixel(new Color32(255, 255, 255, 255), smoothness, default), // r <- 0 : (Unused) // g <- 63 : ((1 - src.a(as float) * smoothness) ^ 2)(as uint8) // b <- 255 : Same metallic (src.r) // a <- 255 : (Unused) Is.EqualTo(new Color32(0, 127, 255, 255))); } { var smoothness = 0.0f; Assert.That( OcclusionMetallicRoughnessConverter.ExportPixel(new Color32(255, 255, 255, 255), smoothness, default), // r <- 0 : (Unused) // g <- 255 : ((1 - src.a(as float) * smoothness) ^ 2)(as uint8) // b <- 255 : Same metallic (src.r) // a <- 255 : (Unused) Is.EqualTo(new Color32(0, 255, 255, 255))); } }
public void ImportingColorTest() { { var roughnessFactor = 1.0f; Assert.That( OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 255, 255, 255), 1.0f, roughnessFactor, default), // r <- 255 : Same metallic (src.r) // g <- 0 : (Unused) // b <- 0 : (Unused) // a <- 0 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8) Is.EqualTo(new Color32(255, 0, 0, 0))); } { var roughnessFactor = 1.0f; Assert.That( OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 128, 255, 255), 1.0f, roughnessFactor, default), // r <- 255 : Same metallic (src.r) // g <- 0 : (Unused) // b <- 0 : (Unused) // a <- 128 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8) Is.EqualTo(new Color32(255, 0, 0, 127))); // smoothness 0.5 * src.a 1.0 } { var roughnessFactor = 0.5f; Assert.That( OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 255, 255, 255), 1.0f, roughnessFactor, default), // r <- 255 : Same metallic (src.r) // g <- 0 : (Unused) // b <- 0 : (Unused) // a <- 74 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8) Is.EqualTo(new Color32(255, 0, 0, 127))); } { var roughnessFactor = 0.0f; Assert.That( OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 255, 255, 255), 1.0f, roughnessFactor, default), // r <- 255 : Same metallic (src.r) // g <- 0 : (Unused) // b <- 0 : (Unused) // a <- 255 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8) Is.EqualTo(new Color32(255, 0, 0, 255))); } }