Skip to content

Commit 53a1866

Browse files
add transmitter bsdf/diffuse/lambert.glsl and clean up a TODO
1 parent 293420d commit 53a1866

File tree

7 files changed

+96
-47
lines changed

7 files changed

+96
-47
lines changed

examples_tests/42.FragmentShaderPathTracer/common.glsl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// basic settings
22
#define MAX_DEPTH 8
3-
#define SAMPLES 16
3+
#define SAMPLES 128
44

55
// firefly and variance reduction techniques
66
//#define KILL_DIFFUSE_SPECULAR_PATHS
@@ -322,7 +322,6 @@ void missProgram()
322322
rayStack[stackPtr]._payload.accumulation += finalContribution;
323323
}
324324

325-
#include <irr/builtin/glsl/bxdf/brdf/cos_weighted_sample.glsl>
326325
#include <irr/builtin/glsl/bxdf/brdf/diffuse/oren_nayar.glsl>
327326
#include <irr/builtin/glsl/bxdf/brdf/specular/ggx.glsl>
328327
#include <irr/builtin/glsl/bxdf/bsdf/specular/dielectric.glsl>

examples_tests/42.FragmentShaderPathTracer/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ int main()
250250
return { gpuPipeline, gpuMeshBuffer };
251251
};
252252

253-
constexpr bool litByTriangle = true;
253+
constexpr bool litByTriangle = false;
254254
auto gpuEnvmapResources = createGpuResources(litByTriangle ? "../litByTriangle.frag":"../litBySphere.frag");
255255
auto gpuEnvmapPipeline = gpuEnvmapResources.first;
256256
auto gpuEnvmapMeshBuffer = gpuEnvmapResources.second;

include/irr/builtin/glsl/bxdf/brdf/cos_weighted_sample.glsl

Lines changed: 0 additions & 32 deletions
This file was deleted.

include/irr/builtin/glsl/bxdf/brdf/diffuse/lambert.glsl

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
#ifndef _IRR_BSDF_BRDF_DIFFUSE_LAMBERT_INCLUDED_
2-
#define _IRR_BSDF_BRDF_DIFFUSE_LAMBERT_INCLUDED_
1+
#ifndef _IRR_BXDF_BRDF_DIFFUSE_LAMBERT_INCLUDED_
2+
#define _IRR_BXDF_BRDF_DIFFUSE_LAMBERT_INCLUDED_
33

4-
// TODO: use the sampling functions from this header
5-
#include <irr/builtin/glsl/bxdf/brdf/cos_weighted_sample.glsl>
4+
#include <irr/builtin/glsl/bxdf/cos_weighted_sample.glsl>
65

76
float irr_glsl_lambertian()
87
{
@@ -19,12 +18,9 @@ float irr_glsl_lambertian_cos_eval(in irr_glsl_BSDFIsotropicParams params, in ir
1918
return irr_glsl_lambertian_cos_eval_rec_pi_factored_out(params,inter)*irr_glsl_lambertian();
2019
}
2120

22-
// TODO: @Crisspl this code is not DRY! Use `irr_glsl_cos_weighted_cos_generate`
2321
irr_glsl_BSDFSample irr_glsl_lambertian_cos_generate(in irr_glsl_AnisotropicViewSurfaceInteraction interaction, in vec2 u)
2422
{
25-
vec3 L;
26-
L.xy = irr_glsl_concentricMapping(u);
27-
L.z = sqrt(1.0-dot(L.xy,L.xy));
23+
vec3 L = irr_glsl_projected_hemisphere_generate(u);
2824

2925
irr_glsl_BSDFSample s;
3026
s.L = irr_glsl_getTangentFrame(interaction) * L;
@@ -40,11 +36,9 @@ irr_glsl_BSDFSample irr_glsl_lambertian_cos_generate(in irr_glsl_AnisotropicView
4036
return s;
4137
}
4238

43-
// TODO: same here @Crisspl
4439
float irr_glsl_lambertian_cos_remainder_and_pdf(out float pdf, in irr_glsl_BSDFSample s, in irr_glsl_IsotropicViewSurfaceInteraction interaction)
4540
{
46-
pdf = irr_glsl_lambertian()*max(s.NdotL,0.0);
47-
return 1.0;
41+
return irr_glsl_projected_hemisphere_remainder_and_pdf(pdf,max(s.NdotL,0.0));
4842
}
4943

5044
#endif
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#ifndef _IRR_BXDF_BSDF_DIFFUSE_LAMBERT_INCLUDED_
2+
#define _IRR_BXDF_BSDF_DIFFUSE_LAMBERT_INCLUDED_
3+
4+
#include <irr/builtin/glsl/bxdf/cos_weighted_sample.glsl>
5+
6+
float irr_glsl_lambertian_transmitter()
7+
{
8+
return irr_glsl_RECIPROCAL_PI*0.5;
9+
}
10+
11+
float irr_glsl_lambertian_transmitter_cos_eval_rec_2pi_factored_out(in irr_glsl_BSDFIsotropicParams params, in irr_glsl_IsotropicViewSurfaceInteraction inter)
12+
{
13+
return abs(params.NdotL);
14+
}
15+
16+
float irr_glsl_lambertian_transmitter_cos_eval(in irr_glsl_BSDFIsotropicParams params, in irr_glsl_IsotropicViewSurfaceInteraction inter)
17+
{
18+
return irr_glsl_lambertian_transmitter_cos_eval_rec_2pi_factored_out(params,inter)*irr_glsl_lambertian_transmitter();
19+
}
20+
21+
irr_glsl_BSDFSample irr_glsl_lambertian_transmitter_cos_generate(in irr_glsl_AnisotropicViewSurfaceInteraction interaction, in vec3 u)
22+
{
23+
vec3 L = irr_glsl_projected_sphere_generate(u);
24+
25+
irr_glsl_BSDFSample s;
26+
s.L = irr_glsl_getTangentFrame(interaction) * L;
27+
s.TdotL = L.x;
28+
s.BdotL = L.y;
29+
s.NdotL = L.z;
30+
/* Undefined
31+
s.TdotH = H.x;
32+
s.BdotH = H.y;
33+
s.NdotH = H.z;
34+
s.VdotH = VdotH;*/
35+
36+
return s;
37+
}
38+
39+
float irr_glsl_lambertian_transmitter_cos_remainder_and_pdf(out float pdf, in irr_glsl_BSDFSample s, in irr_glsl_IsotropicViewSurfaceInteraction interaction)
40+
{
41+
return irr_glsl_projected_sphere_remainder_and_pdf(pdf,abs(s.NdotL));
42+
}
43+
44+
#endif
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#ifndef _IRR_BXDF_COS_WEIGHTED_SAMPLE_INCLUDED_
2+
#define _IRR_BXDF_COS_WEIGHTED_SAMPLE_INCLUDED_
3+
4+
#include <irr/builtin/glsl/bxdf/common_samples.glsl>
5+
6+
vec3 irr_glsl_projected_hemisphere_generate(in vec2 _sample)
7+
{
8+
vec2 p = irr_glsl_concentricMapping(_sample);
9+
10+
float z = sqrt(max(0.0, 1.0 - p.x*p.x - p.y*p.y));
11+
12+
return vec3(p.x,p.y,z);
13+
}
14+
15+
float irr_glsl_projected_hemisphere_remainder_and_pdf(out float pdf, in float L_z)
16+
{
17+
pdf = L_z*irr_glsl_RECIPROCAL_PI;
18+
return 1.0;
19+
}
20+
float irr_glsl_projected_hemisphere_remainder_and_pdf(out float pdf, in vec3 L)
21+
{
22+
return irr_glsl_projected_hemisphere_remainder_and_pdf(pdf,L.z);
23+
}
24+
25+
vec3 irr_glsl_projected_sphere_generate(in vec3 _sample)
26+
{
27+
vec3 retval = irr_glsl_projected_hemisphere_generate(_sample.xy);
28+
retval.z = _sample.z>0.5 ? (-retval.z):retval.z;
29+
return retval;
30+
}
31+
32+
float irr_glsl_projected_sphere_remainder_and_pdf(out float pdf, in float L_z)
33+
{
34+
float retval = irr_glsl_projected_hemisphere_remainder_and_pdf(pdf,L_z);
35+
pdf *= 0.5;
36+
return retval;
37+
}
38+
float irr_glsl_projected_sphere_remainder_and_pdf(out float pdf, in vec3 L)
39+
{
40+
return irr_glsl_projected_sphere_remainder_and_pdf(pdf,L.z);
41+
}
42+
43+
#endif

src/irr/builtin/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ set(irr_resources_to_embed
5757
"irr/builtin/glsl/bxdf/common.glsl"
5858
"irr/builtin/glsl/bxdf/common_samples.glsl"
5959
"irr/builtin/glsl/bxdf/fresnel.glsl"
60-
"irr/builtin/glsl/bxdf/brdf/cos_weighted_sample.glsl"
60+
"irr/builtin/glsl/bxdf/cos_weighted_sample.glsl"
6161
"irr/builtin/glsl/bxdf/brdf/diffuse/lambert.glsl"
6262
"irr/builtin/glsl/bxdf/brdf/diffuse/oren_nayar.glsl"
6363
"irr/builtin/glsl/bxdf/brdf/specular/ndf/ggx.glsl"
@@ -68,6 +68,7 @@ set(irr_resources_to_embed
6868
"irr/builtin/glsl/bxdf/brdf/specular/ndf/beckmann.glsl"
6969
"irr/builtin/glsl/bxdf/brdf/specular/beckmann_smith.glsl"
7070
"irr/builtin/glsl/bxdf/brdf/diffuse/fresnel_correction.glsl"
71+
"irr/builtin/glsl/bxdf/bsdf/diffuse/lambert.glsl"
7172
"irr/builtin/glsl/bxdf/bsdf/specular/dielectric.glsl"
7273
# ext shouldn't be built into the engine, but there's no harm including some non-dynamic GLSL source to make life easier
7374
#"irr/builtin/glsl/ext/.glsl"

0 commit comments

Comments
 (0)