diff --git a/SeeSharp.Benchmark/GenericMaterial_Sampling.cs b/SeeSharp.Benchmark/GenericMaterial_Sampling.cs index a98003a..35ec117 100644 --- a/SeeSharp.Benchmark/GenericMaterial_Sampling.cs +++ b/SeeSharp.Benchmark/GenericMaterial_Sampling.cs @@ -61,9 +61,7 @@ static string MakeName(GenericMaterial.Parameters parameters) => $"Results/r{parameters.Roughness.Lookup(new(0.5f, 0.5f))}-" + $"m{parameters.Metallic}-" + $"s{parameters.SpecularTransmittance}-" + - $"ior{parameters.IndexOfRefraction}-" + - $"d{parameters.DiffuseTransmittance}-" + - $"thin{parameters.Thin}.exr"; + $"ior{parameters.IndexOfRefraction}.exr"; static float TestRender(GenericMaterial.Parameters parameters, string name) { using var scene = MakeScene(parameters); @@ -88,32 +86,26 @@ public static void BenchPerformance(int numTrials = 100000) { GenericMaterial highIOR = new(new() { Roughness = new(0.3199999928474426f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.0f, IndexOfRefraction = 1.4500000476837158f, Metallic = 0.0f, SpecularTintStrength = 0.0f, SpecularTransmittance = 0.0f, - Thin = false, }); GenericMaterial translucent = new(new() { Roughness = new(0.3f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.5f, IndexOfRefraction = 1.6667f, Metallic = 0.0f, SpecularTintStrength = 0.0f, SpecularTransmittance = 0.0f, - Thin = true, }); GenericMaterial glass = new(new() { Roughness = new(0.003199999928474426f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.0f, IndexOfRefraction = 1.4500000476837158f, Metallic = 0.0f, SpecularTintStrength = 0.0f, SpecularTransmittance = 1.0f, - Thin = false, }); RNG rng = new(); @@ -156,32 +148,26 @@ public static void BenchPerformanceComponentPdfs(int numTrials = 100000) { GenericMaterial highIOR = new(new() { Roughness = new(0.3199999928474426f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.0f, IndexOfRefraction = 1.4500000476837158f, Metallic = 0.0f, SpecularTintStrength = 0.0f, SpecularTransmittance = 0.0f, - Thin = false, }); GenericMaterial translucent = new(new() { Roughness = new(0.3f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.5f, IndexOfRefraction = 1.6667f, Metallic = 0.0f, SpecularTintStrength = 0.0f, SpecularTransmittance = 0.0f, - Thin = true, }); GenericMaterial glass = new(new() { Roughness = new(0.003199999928474426f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.0f, IndexOfRefraction = 1.4500000476837158f, Metallic = 0.0f, SpecularTintStrength = 0.0f, SpecularTransmittance = 1.0f, - Thin = false, }); RNG rng = new(); @@ -244,12 +230,10 @@ public static void QuickTest() { GenericMaterial.Parameters highIOR = new() { Roughness = new(0.3199999928474426f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.0f, IndexOfRefraction = 1.4500000476837158f, Metallic = 0.0f, SpecularTintStrength = 0.0f, SpecularTransmittance = 0.0f, - Thin = false, }; TestRender(highIOR, "highIOR"); @@ -257,12 +241,10 @@ public static void QuickTest() { GenericMaterial.Parameters lowIOR = new() { Roughness = new(0.3199999928474426f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.0f, IndexOfRefraction = 1.01f, Metallic = 0.0f, SpecularTintStrength = 0.0f, SpecularTransmittance = 0.0f, - Thin = false, }; TestRender(lowIOR, "lowIOR"); @@ -270,12 +252,10 @@ public static void QuickTest() { GenericMaterial.Parameters translucent = new() { Roughness = new(0.3f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.5f, IndexOfRefraction = 1.6667f, Metallic = 0.0f, SpecularTintStrength = 0.0f, SpecularTransmittance = 0.0f, - Thin = true, }; TestRender(translucent, "translucent"); @@ -283,12 +263,10 @@ public static void QuickTest() { GenericMaterial.Parameters glass = new() { Roughness = new(0.003199999928474426f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.0f, IndexOfRefraction = 1.4500000476837158f, Metallic = 0.0f, SpecularTintStrength = 0.0f, SpecularTransmittance = 1.0f, - Thin = false, }; TestRender(glass, "glass"); @@ -296,12 +274,10 @@ public static void QuickTest() { GenericMaterial.Parameters mirror = new() { Roughness = new(0.003199999928474426f), Anisotropic = 0.0f, - DiffuseTransmittance = 0.0f, IndexOfRefraction = 1.4500000476837158f, Metallic = 0.8f, SpecularTintStrength = 0.0f, SpecularTransmittance = 0.0f, - Thin = false, }; TestRender(mirror, "mirror"); @@ -328,20 +304,11 @@ public static void Benchmark(int numSteps = 2) { float t = m / (numSteps + 1.0f); parameters.IndexOfRefraction = t * 1 + (1 - t) * 2; for (int n = 0; n < numSteps; ++n) { - parameters.DiffuseTransmittance = (0.5f * n) / numSteps; - parameters.Thin = false; float e = TestRender(parameters, MakeName(parameters)); totalError += e; minError = Math.Min(e, minError); maxError = Math.Max(e, maxError); numTests++; - - parameters.Thin = true; - e = TestRender(parameters, MakeName(parameters)); - totalError += e; - minError = Math.Min(e, minError); - maxError = Math.Max(e, maxError); - numTests++; } } } diff --git a/SeeSharp.ToMitsuba/Program.cs b/SeeSharp.ToMitsuba/Program.cs index a117a45..1fcc166 100644 --- a/SeeSharp.ToMitsuba/Program.cs +++ b/SeeSharp.ToMitsuba/Program.cs @@ -122,21 +122,7 @@ static XElement ExportMesh(Scene scene, Mesh mesh) { ); } else if (mesh.Material is GenericMaterial) { var mat = mesh.Material as GenericMaterial; - if (mat.MaterialParameters.DiffuseTransmittance > 0) { - float difftrans = mat.MaterialParameters.DiffuseTransmittance; - bsdf = new("bsdf", new XAttribute("type", "mixturebsdf"), - new XElement("string", - new XAttribute("name", "weights"), - new XAttribute("value", $"{difftrans}, {1 - difftrans}") - ), - new XElement("bsdf", new XAttribute("type", "difftrans"), - MapTextureOrColor(mat.MaterialParameters.BaseColor, "transmittance") - ), - new XElement("bsdf", new XAttribute("type", "diffuse"), - MapTextureOrColor(mat.MaterialParameters.BaseColor, "reflectance") - ) - ); - } else if (mat.MaterialParameters.SpecularTransmittance > 0) { + if (mat.MaterialParameters.SpecularTransmittance > 0) { // Rough dielectric BSDF bsdf = new("bsdf", new XAttribute("type", "roughdielectric"), new XElement("string", MakeNameValue("distribution", "ggx")), diff --git a/SeeSharp.Validation/Validate_SingleBounceGlossy.cs b/SeeSharp.Validation/Validate_SingleBounceGlossy.cs index 65cf724..a9a42fd 100644 --- a/SeeSharp.Validation/Validate_SingleBounceGlossy.cs +++ b/SeeSharp.Validation/Validate_SingleBounceGlossy.cs @@ -39,8 +39,6 @@ public override Scene MakeScene() { BaseColor = new TextureRgb(RgbColor.White), Roughness = new TextureMono(0.5f), SpecularTransmittance = 1, - Thin = true, - DiffuseTransmittance = 1, }); scene.Meshes.Add(mesh); // second plane @@ -56,8 +54,6 @@ public override Scene MakeScene() { mesh.Material = new GenericMaterial(new GenericMaterial.Parameters { BaseColor = new TextureRgb(RgbColor.White), Roughness = new TextureMono(0.5f), - Thin = true, - DiffuseTransmittance = 1, }); scene.Meshes.Add(mesh); diff --git a/SeeSharp/Shading/Materials/GenericMaterial.cs b/SeeSharp/Shading/Materials/GenericMaterial.cs index ac493e7..e600254 100644 --- a/SeeSharp/Shading/Materials/GenericMaterial.cs +++ b/SeeSharp/Shading/Materials/GenericMaterial.cs @@ -4,6 +4,8 @@ namespace SeeSharp.Shading.Materials; public partial class GenericMaterial(GenericMaterial.Parameters parameters) : Material { + public Parameters MaterialParameters => parameters; + /// /// Parameters of the generic material /// @@ -273,7 +275,7 @@ public override BsdfSample Sample(in ShadingContext context, Vector2 primarySamp if (halfVectorRev != Vector3.Zero) // Prevent NaN if outDir and inDir exactly align { halfVectorRev = Vector3.Normalize(halfVectorRev); - halfVectorRev = (!SameHemisphere(inDir, halfVector)) ? -halfVectorRev : halfVectorRev; + halfVectorRev = (!SameHemisphere(inDir, halfVectorRev)) ? -halfVectorRev : halfVectorRev; float sqrtDenomIn = Vector3.Dot(inDir, halfVectorRev) + etaIn * Vector3.Dot(context.OutDir, halfVectorRev); if (sqrtDenomIn != 0) // Prevent NaN in corner case