public void CreateSceneWithsSheenExtension() { TestContext.CurrentContext.AttachShowDirLink(); TestContext.CurrentContext.AttachGltfValidatorLinks(); var basePath = System.IO.Path.Combine(TestFiles.RootDirectory, "glTF-Sample-Models", "2.0", "SpecGlossVsMetalRough", "glTF"); var material = new Materials.MaterialBuilder("material") .WithMetallicRoughnessShader() .WithChannelImage(Materials.KnownChannel.Normal, System.IO.Path.Combine(basePath, "WaterBottle_normal.png")) .WithChannelImage(Materials.KnownChannel.Emissive, System.IO.Path.Combine(basePath, "WaterBottle_emissive.png")) .WithChannelImage(Materials.KnownChannel.Occlusion, System.IO.Path.Combine(basePath, "WaterBottle_occlusion.png")) .WithChannelImage(Materials.KnownChannel.BaseColor, System.IO.Path.Combine(basePath, "WaterBottle_baseColor.png")) .WithChannelImage(Materials.KnownChannel.MetallicRoughness, System.IO.Path.Combine(basePath, "WaterBottle_roughnessMetallic.png")) .WithChannelImage(Materials.KnownChannel.SheenColor, System.IO.Path.Combine(basePath, "WaterBottle_emissive.png")) .WithChannelParam(Materials.KnownChannel.SheenColor, new Vector4(1, 1, 1, 0)) .WithChannelImage(Materials.KnownChannel.SheenRoughness, System.IO.Path.Combine(basePath, "WaterBottle_occlusion.png")) .WithChannelParam(Materials.KnownChannel.SheenRoughness, new Vector4(0.5f, 0, 0, 0)); 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 scene = new Scenes.SceneBuilder(); scene.AddRigidMesh(mesh, Matrix4x4.Identity); var gltf2 = scene.ToGltf2(); var sheenColorFactor = gltf2.LogicalMaterials[0].FindChannel("SheenColor").Value.Parameter; Assert.AreEqual(new Vector4(1, 1, 1, 0), sheenColorFactor); var sheenRoughnessFactor = gltf2.LogicalMaterials[0].FindChannel("SheenRoughness").Value.Parameter; Assert.AreEqual(new Vector4(0.5f, 0, 0, 0), sheenRoughnessFactor); scene.AttachToCurrentTest("result.glb"); scene.AttachToCurrentTest("result.gltf"); }
public void CreateSceneWithSpecularGlossinessExtension() { TestContext.CurrentContext.AttachShowDirLink(); TestContext.CurrentContext.AttachGltfValidatorLinks(); var basePath = System.IO.Path.Combine(TestFiles.RootDirectory, "glTF-Sample-Models", "2.0", "SpecGlossVsMetalRough", "glTF"); // first, create a default material var material = new Materials.MaterialBuilder("material1 fallback") .WithMetallicRoughnessShader() .WithChannelImage(Materials.KnownChannel.Normal, System.IO.Path.Combine(basePath, "WaterBottle_normal.png")) .WithChannelImage(Materials.KnownChannel.Emissive, System.IO.Path.Combine(basePath, "WaterBottle_emissive.png")) .WithChannelImage(Materials.KnownChannel.Occlusion, System.IO.Path.Combine(basePath, "WaterBottle_occlusion.png")) .WithChannelImage(Materials.KnownChannel.BaseColor, System.IO.Path.Combine(basePath, "WaterBottle_baseColor.png")) .WithChannelImage(Materials.KnownChannel.MetallicRoughness, System.IO.Path.Combine(basePath, "WaterBottle_roughnessMetallic.png")); // wrap the fallback material with a PBR Specular Glossiness material. material = new Materials.MaterialBuilder("material1") .WithFallback(material) .WithSpecularGlossinessShader() .WithChannelImage(Materials.KnownChannel.Normal, System.IO.Path.Combine(basePath, "WaterBottle_normal.png")) .WithChannelImage(Materials.KnownChannel.Emissive, System.IO.Path.Combine(basePath, "WaterBottle_emissive.png")) .WithChannelImage(Materials.KnownChannel.Occlusion, System.IO.Path.Combine(basePath, "WaterBottle_occlusion.png")) .WithChannelImage(Materials.KnownChannel.Diffuse, System.IO.Path.Combine(basePath, "WaterBottle_diffuse.png")) .WithChannelImage(Materials.KnownChannel.SpecularGlossiness, System.IO.Path.Combine(basePath, "WaterBottle_specularGlossiness.png")); 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 scene = new Scenes.SceneBuilder(); scene.AddMesh(mesh, Matrix4x4.Identity); scene.AttachToCurrentTest("result.glb"); scene.AttachToCurrentTest("result.gltf"); }
public void CreateSceneWithClearCoatExtension() { TestContext.CurrentContext.AttachGltfValidatorLinks(); var basePath = System.IO.Path.Combine(TestFiles.KhronosSampleModelsDirectory, "2.0", "SpecGlossVsMetalRough", "glTF"); // first, create a default material var material = new Materials.MaterialBuilder("material") .WithMetallicRoughnessShader() .WithChannelImage(Materials.KnownChannel.Normal, System.IO.Path.Combine(basePath, "WaterBottle_normal.png")) .WithChannelImage(Materials.KnownChannel.Emissive, System.IO.Path.Combine(basePath, "WaterBottle_emissive.png")) .WithChannelImage(Materials.KnownChannel.Occlusion, System.IO.Path.Combine(basePath, "WaterBottle_occlusion.png")) .WithChannelImage(Materials.KnownChannel.BaseColor, System.IO.Path.Combine(basePath, "WaterBottle_baseColor.png")) .WithChannelImage(Materials.KnownChannel.MetallicRoughness, System.IO.Path.Combine(basePath, "WaterBottle_roughnessMetallic.png")) .WithChannelImage(Materials.KnownChannel.ClearCoat, System.IO.Path.Combine(basePath, "WaterBottle_emissive.png")) .WithChannelParam(Materials.KnownChannel.ClearCoat, Materials.KnownProperty.ClearCoatFactor, 0.5f) .WithChannelImage(Materials.KnownChannel.ClearCoatRoughness, System.IO.Path.Combine(basePath, "WaterBottle_roughnessMetallic.png")) .WithChannelImage(Materials.KnownChannel.ClearCoatNormal, System.IO.Path.Combine(basePath, "WaterBottle_normal.png")); 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 scene = new Scenes.SceneBuilder(); scene.AddRigidMesh(mesh, Matrix4x4.Identity); var gltf2 = scene.ToGltf2(); var clearCoatFactor = gltf2.LogicalMaterials[0].FindChannel("ClearCoat").Value.GetFactor("ClearCoatFactor"); Assert.AreEqual(0.5f, clearCoatFactor); scene.AttachToCurrentTest("result.glb"); scene.AttachToCurrentTest("result.gltf"); }
public void TestVertexEquality() { var material1 = new MaterialBuilder() .WithDoubleSide(true) .WithMetallicRoughnessShader() .WithChannelParam("BaseColor", new Vector4(1, 0, 0, 1)); var mesh = new MeshBuilder <VERTEX>("mesh"); var v0 = new VERTEX(15, 5, 0, 1, 0, 0); var v1 = new VERTEX(15, 5, 10, 1, 0, 0); var v2 = new VERTEX(15, 0, 10, 1, 0, 0); var v3 = new VERTEX(15, 0, 0, 1, 0, 0); var prim = mesh.UsePrimitive(material1); prim.AddTriangle(v0, v1, v3); prim.AddTriangle(v3, v1, v2); v0 = new VERTEX(15, 5, 10, 0, 0, 1); v1 = new VERTEX(0, 5, 10, 0, 0, 1); v2 = new VERTEX(0, 0, 10, 0, 0, 1); v3 = new VERTEX(15, 0, 10, 0, 0, 1); prim.AddTriangle(v0, v1, v3); prim.AddTriangle(v3, v1, v2); Assert.AreEqual(8, prim.Vertices.Count); // create a scene var scene = new Scenes.SceneBuilder(); scene.AddRigidMesh(mesh, Matrix4x4.Identity); // save the model in different formats scene.AttachToCurrentTest("mesh.glb"); scene.AttachToCurrentTest("mesh.gltf"); }