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"); } }
public static void CopyTo(this Materials.MaterialBuilder srcMaterial, Material dstMaterial) { // dstMaterial.Name = srcMaterial.Name; dstMaterial.Alpha = srcMaterial.AlphaMode; dstMaterial.AlphaCutoff = srcMaterial.AlphaCutoff; dstMaterial.DoubleSided = srcMaterial.DoubleSided; srcMaterial.GetChannel("Normal").CopyTo(dstMaterial.FindChannel("Normal")); srcMaterial.GetChannel("Occlusion").CopyTo(dstMaterial.FindChannel("Occlusion")); srcMaterial.GetChannel("Emissive").CopyTo(dstMaterial.FindChannel("Emissive")); if (srcMaterial.Style == "PBRMetallicRoughness") { dstMaterial.InitializePBRMetallicRoughness(); srcMaterial.GetChannel("BaseColor").CopyTo(dstMaterial.FindChannel("BaseColor")); srcMaterial.GetChannel("Metallic").CopyTo(dstMaterial.FindChannel("Metallic")); srcMaterial.GetChannel("Roughness").CopyTo(dstMaterial.FindChannel("Roughness")); } else if (srcMaterial.Style == "PBRSpecularGlossiness") { dstMaterial.InitializePBRSpecularGlossiness(); srcMaterial.GetChannel("Diffuse").CopyTo(dstMaterial.FindChannel("Diffuse")); srcMaterial.GetChannel("Specular").CopyTo(dstMaterial.FindChannel("Specular")); srcMaterial.GetChannel("Glossiness").CopyTo(dstMaterial.FindChannel("Glossiness")); } }
public static void CopyChannelsTo(this Materials.MaterialBuilder srcMaterial, Material dstMaterial, params string[] channelKeys) { Guard.NotNull(srcMaterial, nameof(srcMaterial)); Guard.NotNull(dstMaterial, nameof(dstMaterial)); foreach (var k in channelKeys) { var src = srcMaterial.GetChannel(k); if (src == null) { continue; } var dst = dstMaterial.FindChannel(k); if (dst == null) { continue; } src.CopyTo(dst.Value); } }
public void CrateSceneWithTextureTransformExtension() { TestContext.CurrentContext.AttachShowDirLink(); TestContext.CurrentContext.AttachGltfValidatorLinks(); var basePath = System.IO.Path.Combine(TestContext.CurrentContext.WorkDirectory, "Assets"); // first, create a default material var material = new Materials.MaterialBuilder("material1") .WithDoubleSide(true) .WithMetallicRoughnessShader() .WithChannelImage(Materials.KnownChannel.BaseColor, System.IO.Path.Combine(basePath, "shannon.jpg")); material.GetChannel(Materials.KnownChannel.BaseColor).UseTexture().WithTransform(0.40f, 0.25f, 0.5f, 0.5f); var mesh = new Geometry.MeshBuilder <VPOS, VTEX>("mesh1"); mesh .UsePrimitive(material) .AddQuadrangle ((new Vector3(-10, 10, 0), new Vector2(1, 0)) , (new Vector3(10, 10, 0), new Vector2(0, 0)) , (new Vector3(10, -10, 0), new Vector2(0, 1)) , (new Vector3(-10, -10, 0), new Vector2(1, 1)) ); var model = ModelRoot.CreateModel(); model.CreateMeshes(mesh); model.UseScene("Default") .CreateNode("RootNode") .WithMesh(model.LogicalMeshes[0]); model.AttachToCurrentTest("result_glb.glb"); model.AttachToCurrentTest("result_gltf.gltf"); }