Skip to content

Commit

Permalink
fix generic mtl
Browse files Browse the repository at this point in the history
  • Loading branch information
pgrit committed May 23, 2024
1 parent 52c7dbf commit 5c95125
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 54 deletions.
35 changes: 1 addition & 34 deletions SeeSharp.Benchmark/GenericMaterial_Sampling.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -244,64 +230,54 @@ 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");

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");

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");

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");

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");
Expand All @@ -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++;
}
}
}
Expand Down
16 changes: 1 addition & 15 deletions SeeSharp.ToMitsuba/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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")),
Expand Down
4 changes: 0 additions & 4 deletions SeeSharp.Validation/Validate_SingleBounceGlossy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);

Expand Down
4 changes: 3 additions & 1 deletion SeeSharp/Shading/Materials/GenericMaterial.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ namespace SeeSharp.Shading.Materials;

public partial class GenericMaterial(GenericMaterial.Parameters parameters) : Material
{
public Parameters MaterialParameters => parameters;

/// <summary>
/// Parameters of the generic material
/// </summary>
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 5c95125

Please sign in to comment.