public static void CopyTo(this Materials.MaterialBuilder srcMaterial, Material dstMaterial) { Guard.NotNull(srcMaterial, nameof(srcMaterial)); Guard.NotNull(dstMaterial, nameof(dstMaterial)); srcMaterial.ValidateForSchema2(); dstMaterial.Alpha = srcMaterial.AlphaMode.ToSchema2(); dstMaterial.AlphaCutoff = srcMaterial.AlphaCutoff; dstMaterial.DoubleSided = srcMaterial.DoubleSided; var hasClearCoat = srcMaterial.GetChannel("ClearCoat") != null || srcMaterial.GetChannel("ClearCoatRoughness") != null || srcMaterial.GetChannel("ClearCoatNormal") != null; srcMaterial.CopyChannelsTo(dstMaterial, "Normal", "Occlusion", "Emissive"); Materials.MaterialBuilder defMaterial = null; if (srcMaterial.ShaderStyle == "Unlit") { dstMaterial.InitializePBRMetallicRoughness(); srcMaterial.CopyChannelsTo(dstMaterial, "BaseColor"); return; } if (srcMaterial.ShaderStyle == "PBRMetallicRoughness") { if (hasClearCoat) { dstMaterial.InitializePBRMetallicRoughnessClearCoat(); } else { dstMaterial.InitializePBRMetallicRoughness(); } defMaterial = srcMaterial; } if (srcMaterial.ShaderStyle == "PBRSpecularGlossiness") { dstMaterial.InitializePBRSpecularGlossiness(srcMaterial.CompatibilityFallback != null); srcMaterial.CopyChannelsTo(dstMaterial, "Diffuse", "SpecularGlossiness"); defMaterial = srcMaterial.CompatibilityFallback; } if (defMaterial != null) { if (defMaterial.ShaderStyle != "PBRMetallicRoughness") { throw new ArgumentException(nameof(srcMaterial.CompatibilityFallback.ShaderStyle)); } srcMaterial.CopyChannelsTo(dstMaterial, "BaseColor", "MetallicRoughness"); srcMaterial.CopyChannelsTo(dstMaterial, "ClearCoat", "ClearCoatRoughness", "ClearCoatNormal"); } }