Skip to content

Commit 56a6db6

Browse files
committed
Update diffuse material to support roughness parameter
1 parent b6f32b6 commit 56a6db6

6 files changed

Lines changed: 39 additions & 14 deletions

File tree

include/bulbit/bxdfs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ class EONBxDF : public BxDF
565565
// EON: APractical Energy-Preserving Rough Diffuse BRDF (Portsmouth et al., 2025)
566566
// https://jcgt.org/published/0014/01/06/
567567
public:
568-
EONBxDF(const Spectrum& reflectance, Float roughness = 0, bool exact = true)
568+
EONBxDF(const Spectrum& reflectance, Float roughness, bool exact = true)
569569
: rho{ reflectance }
570570
, r{ roughness }
571571
, exact{ exact }

include/bulbit/materials.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ class DiffuseMaterial : public Material
99
{
1010
public:
1111
DiffuseMaterial(
12-
const SpectrumTexture* reflectance, const SpectrumTexture* normalmap = nullptr, const FloatTexture* alpha = nullptr
12+
const SpectrumTexture* reflectance,
13+
const FloatTexture* roughness = nullptr,
14+
const SpectrumTexture* normalmap = nullptr,
15+
const FloatTexture* alpha = nullptr
1316
);
1417

1518
Float GetAlpha(const Intersection& isect) const;
@@ -21,6 +24,7 @@ class DiffuseMaterial : public Material
2124

2225
public:
2326
const SpectrumTexture* reflectance;
27+
const FloatTexture* roughness;
2428

2529
const SpectrumTexture* normalmap;
2630
const FloatTexture* alpha;

sample/material_builder.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,29 @@
44
namespace bulbit
55
{
66

7-
DiffuseMaterial* CreateDiffuseMaterial(Scene& scene, Float reflectance, const SpectrumTexture* normalmap, Float alpha)
7+
DiffuseMaterial* CreateDiffuseMaterial(
8+
Scene& scene, Float reflectance, Float roughness, const SpectrumTexture* normalmap, Float alpha
9+
)
810
{
911
return scene.CreateMaterial<DiffuseMaterial>(
10-
CreateSpectrumConstantTexture(scene, reflectance), normalmap, CreateFloatConstantTexture(scene, alpha)
12+
CreateSpectrumConstantTexture(scene, reflectance), CreateFloatConstantTexture(scene, roughness), normalmap,
13+
CreateFloatConstantTexture(scene, alpha)
1114
);
1215
}
13-
DiffuseMaterial* CreateDiffuseMaterial(Scene& scene, const Spectrum& reflectance, const SpectrumTexture* normalmap, Float alpha)
16+
DiffuseMaterial* CreateDiffuseMaterial(
17+
Scene& scene, const Spectrum& reflectance, Float roughness, const SpectrumTexture* normalmap, Float alpha
18+
)
1419
{
1520
return scene.CreateMaterial<DiffuseMaterial>(
16-
CreateSpectrumConstantTexture(scene, reflectance), normalmap, CreateFloatConstantTexture(scene, alpha)
21+
CreateSpectrumConstantTexture(scene, reflectance), CreateFloatConstantTexture(scene, roughness), normalmap,
22+
CreateFloatConstantTexture(scene, alpha)
1723
);
1824
}
1925

2026
DiffuseMaterial* CreateDiffuseMaterial(Scene& scene, const std::string& filename, const SpectrumTexture* normalmap, Float alpha)
2127
{
2228
return scene.CreateMaterial<DiffuseMaterial>(
23-
CreateSpectrumImageTexture(scene, filename), normalmap, CreateFloatConstantTexture(scene, alpha)
29+
CreateSpectrumImageTexture(scene, filename), nullptr, normalmap, CreateFloatConstantTexture(scene, alpha)
2430
);
2531
}
2632

sample/material_builder.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ namespace bulbit
77
{
88

99
DiffuseMaterial* CreateDiffuseMaterial(
10-
Scene& scene, Float reflectance, const SpectrumTexture* normalmap = nullptr, Float alpha = 1
10+
Scene& scene, Float reflectance, Float roughness = 0, const SpectrumTexture* normalmap = nullptr, Float alpha = 1
1111
);
1212
DiffuseMaterial* CreateDiffuseMaterial(
13-
Scene& scene, const Spectrum& reflectance, const SpectrumTexture* normalmap = nullptr, Float alpha = 1
13+
Scene& scene, const Spectrum& reflectance, Float roughness = 0, const SpectrumTexture* normalmap = nullptr, Float alpha = 1
1414
);
1515
DiffuseMaterial* CreateDiffuseMaterial(
1616
Scene& scene, const std::string& filename, const SpectrumTexture* normalmap = nullptr, Float alpha = 1

sample/scene/material_test.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,9 @@ std::unique_ptr<Camera> Alphas(Scene& scene)
425425
auto normalmap = CreateSpectrumImageTexture(scene, "res/bistro/Concrete_Normal.png", true);
426426

427427
const Material* outers[count];
428-
outers[0] = CreateDiffuseMaterial(scene, Spectrum(.65f, .05f, .05f), nullptr, 0.4f);
429-
outers[1] = CreateDiffuseMaterial(scene, Spectrum(.12f, .45f, .15f), nullptr, 0.2f);
430-
outers[2] = CreateDiffuseMaterial(scene, Spectrum(.22f, .23f, .75f), nullptr, 0.6f);
428+
outers[0] = CreateDiffuseMaterial(scene, Spectrum(.65f, .05f, .05f), 0, nullptr, 0.4f);
429+
outers[1] = CreateDiffuseMaterial(scene, Spectrum(.12f, .45f, .15f), 0, nullptr, 0.2f);
430+
outers[2] = CreateDiffuseMaterial(scene, Spectrum(.22f, .23f, .75f), 0, nullptr, 0.6f);
431431

432432
const Material* inners[count];
433433
inners[0] = CreateMetallicRoughnessMaterial(scene, Spectrum{ 0.66 }, (0), (0));

src/material/diffuse_material.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
namespace bulbit
66
{
77

8-
DiffuseMaterial::DiffuseMaterial(const SpectrumTexture* reflectance, const SpectrumTexture* normalmap, const FloatTexture* alpha)
8+
DiffuseMaterial::DiffuseMaterial(
9+
const SpectrumTexture* reflectance, const FloatTexture* roughness, const SpectrumTexture* normalmap, const FloatTexture* alpha
10+
)
911
: Material(TypeIndexOf<DiffuseMaterial>())
1012
, reflectance{ reflectance }
13+
, roughness{ roughness }
1114
, normalmap{ normalmap }
1215
, alpha{ alpha }
1316
{
@@ -40,7 +43,19 @@ Spectrum DiffuseMaterial::Le(const Intersection& isect, const Vec3& wo) const
4043
bool DiffuseMaterial::GetBSDF(BSDF* bsdf, const Intersection& isect, const Vec3& wo, Allocator& alloc) const
4144
{
4245
BulbitNotUsed(wo);
43-
*bsdf = BSDF(isect.shading.normal, isect.shading.tangent, alloc.new_object<LambertianBxDF>(reflectance->Evaluate(isect.uv)));
46+
47+
Float r = roughness ? roughness->Evaluate(isect.uv) : 0;
48+
Spectrum rho = reflectance->Evaluate(isect.uv);
49+
50+
if (r > 0)
51+
{
52+
*bsdf = BSDF(isect.shading.normal, isect.shading.tangent, alloc.new_object<EONBxDF>(rho, r));
53+
}
54+
else
55+
{
56+
*bsdf = BSDF(isect.shading.normal, isect.shading.tangent, alloc.new_object<LambertianBxDF>(rho));
57+
}
58+
4459
return true;
4560
}
4661

0 commit comments

Comments
 (0)