Exemplo n.º 1
0
        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");
            }
        }
Exemplo n.º 2
0
        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"));
            }
        }
Exemplo n.º 3
0
        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");
        }