Skip to content

Commit 64ac715

Browse files
fixed dielectric.glsl
1 parent 7a6a277 commit 64ac715

File tree

5 files changed

+56
-105
lines changed

5 files changed

+56
-105
lines changed

examples_tests/42.FragmentShaderPathTracer/common.glsl

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -331,12 +331,16 @@ void missProgram()
331331
#include <irr/builtin/glsl/bxdf/brdf/specular/beckmann.glsl>
332332
#include <irr/builtin/glsl/bxdf/brdf/specular/ggx.glsl>
333333
#include <irr/builtin/glsl/bxdf/bsdf/diffuse/lambert.glsl>
334-
//#include <irr/builtin/glsl/bxdf/bsdf/specular/dielectric.glsl>
334+
#include <irr/builtin/glsl/bxdf/bsdf/specular/dielectric.glsl>
335335
//#include <irr/builtin/glsl/bxdf/bsdf/specular/beckmann.glsl>
336336
irr_glsl_LightSample irr_glsl_bsdf_cos_generate(in irr_glsl_AnisotropicViewSurfaceInteraction interaction, in vec3 u, in BSDFNode bsdf, in float monochromeEta, out irr_glsl_AnisotropicMicrofacetCache _cache)
337337
{
338338
const float a = BSDFNode_getRoughness(bsdf);
339339
const mat2x3 ior = BSDFNode_getEta(bsdf);
340+
341+
// fresnel stuff for dielectrics
342+
float orientedEta, rcpOrientedEta;
343+
const bool viewerInsideMedium = irr_glsl_getOrientedEtas(orientedEta,rcpOrientedEta,interaction.isotropic.NdotV,monochromeEta);
340344

341345
irr_glsl_LightSample smpl;
342346
irr_glsl_AnisotropicMicrofacetCache dummy;
@@ -349,7 +353,7 @@ irr_glsl_LightSample irr_glsl_bsdf_cos_generate(in irr_glsl_AnisotropicViewSurfa
349353
smpl = irr_glsl_ggx_cos_generate(interaction,u.xy,a,a,_cache);
350354
break;
351355
default:
352-
smpl = irr_glsl_beckmann_cos_generate(interaction,u.xy,a,a,_cache);
356+
smpl = irr_glsl_smooth_dielectric_cos_generate(interaction,u,monochromeEta);
353357
//smpl = irr_glsl_beckmann_dielectric_cos_generate(interaction,u,a,a,monochromeEta,_cache);
354358
break;
355359
}
@@ -363,25 +367,25 @@ vec3 irr_glsl_bsdf_cos_remainder_and_pdf(out float pdf, in irr_glsl_LightSample
363367

364368
// is the BSDF or BRDF, if it is then we make the dot products `abs` before `max(,0.0)`
365369
const bool transmissive = BSDFNode_isBSDF(bsdf);
366-
367-
// obtain stuff for transmissive parts of BSDFs
368-
float orientedEta, rcpOrientedEta;
369-
const bool viewerInsideMedium = irr_glsl_getOrientedEtas(orientedEta,rcpOrientedEta,interaction.isotropic.NdotV,monochromeEta);
370+
const float clampedNdotL = irr_glsl_conditionalAbsOrMax(transmissive,_sample.NdotL,0.0);
371+
const float clampedNdotV = irr_glsl_conditionalAbsOrMax(transmissive,interaction.isotropic.NdotV,0.0);
370372

371373
vec3 remainder;
372-
if (transmissive || !transmitted)
374+
375+
const float minimumProjVectorLen = 0.00000001;
376+
if (clampedNdotV>minimumProjVectorLen && clampedNdotL>minimumProjVectorLen)
373377
{
374-
//
378+
// fresnel stuff for conductors (but reflectance also doubles as albedo)
375379
const mat2x3 ior = BSDFNode_getEta(bsdf);
376380
const vec3 reflectance = BSDFNode_getReflectance(bsdf,_cache.isotropic.VdotH);
377381

382+
// fresnel stuff for dielectrics
383+
float orientedEta, rcpOrientedEta;
384+
const bool viewerInsideMedium = irr_glsl_getOrientedEtas(orientedEta,rcpOrientedEta,interaction.isotropic.NdotV,monochromeEta);
385+
378386
//
379387
const float VdotL = dot(interaction.isotropic.V.dir,_sample.L);
380388

381-
// is the BSDF or BRDF, if it is then we make the dot products `abs` before `max(,0.0)`
382-
const float clampedNdotL = irr_glsl_conditionalAbsOrMax(transmissive,_sample.NdotL,0.0);
383-
const float clampedNdotV = irr_glsl_conditionalAbsOrMax(transmissive,interaction.isotropic.NdotV,0.0);
384-
385389
//
386390
const float a = max(BSDFNode_getRoughness(bsdf),0.01); // TODO: @Crisspl 0-roughness still doesn't work! Also Beckmann has a weird dark rim instead as fresnel!?
387391
const float a2 = a*a;
@@ -395,8 +399,7 @@ vec3 irr_glsl_bsdf_cos_remainder_and_pdf(out float pdf, in irr_glsl_LightSample
395399
remainder = irr_glsl_ggx_cos_remainder_and_pdf_wo_clamps(pdf,irr_glsl_ggx_trowbridge_reitz(a2,_cache.isotropic.NdotH2),clampedNdotL,_sample.NdotL2,clampedNdotV,interaction.isotropic.NdotV_squared,reflectance,a2);
396400
break;
397401
default:
398-
remainder = irr_glsl_beckmann_cos_remainder_and_pdf_wo_clamps(pdf,irr_glsl_beckmann(a2,_cache.isotropic.NdotH2),_sample.NdotL2,clampedNdotV,interaction.isotropic.NdotV_squared,reflectance,a2);
399-
//remainder = vec3(irr_glsl_lambertian_transmitter_cos_remainder_and_pdf(pdf,_sample));
402+
remainder = vec3(irr_glsl_smooth_dielectric_cos_remainder_and_pdf(pdf,_sample,interaction.isotropic,monochromeEta));
400403
//remainder = vec3(irr_glsl_beckmann_dielectric_cos_remainder_and_pdf(pdf, _sample, interaction.isotropic, monochromeEta, a2));
401404
break;
402405
}

examples_tests/42.FragmentShaderPathTracer/litBySphere.frag

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,12 @@ void closestHitProgram(in ImmutableRay_t _immutable, inout irr_glsl_xoroshiro64s
172172
);
173173
throughput *= lightRemainder;
174174
}
175+
176+
bool validPath = true;
175177
const vec3 throughputCIE_Y = transpose(irr_glsl_sRGBtoXYZ)[1]*throughput;
176178
const float monochromeEta = dot(throughputCIE_Y,BSDFNode_getEta(bsdf)[0])/(throughputCIE_Y.r+throughputCIE_Y.g+throughputCIE_Y.b);
177179
if (doNEE)
178-
{
179-
const bool validPath = irr_glsl_calcAnisotropicMicrofacetCache(_cache,interaction,_sample,monochromeEta);
180-
throughput = validPath ? throughput:vec3(0.0);
181-
}
180+
validPath = irr_glsl_calcAnisotropicMicrofacetCache(_cache,interaction,_sample,monochromeEta);
182181
else
183182
{
184183
maxT = FLT_MAX;
@@ -188,7 +187,10 @@ void closestHitProgram(in ImmutableRay_t _immutable, inout irr_glsl_xoroshiro64s
188187
// do a cool trick and always compute the bsdf parts this way! (no divergence)
189188
float bsdfPdf;
190189
// the value of the bsdf divided by the probability of the sample being generated
191-
throughput *= irr_glsl_bsdf_cos_remainder_and_pdf(bsdfPdf,_sample,interaction,bsdf,monochromeEta,_cache);
190+
if (validPath)
191+
throughput *= irr_glsl_bsdf_cos_remainder_and_pdf(bsdfPdf,_sample,interaction,bsdf,monochromeEta,_cache);
192+
else
193+
throughput = vec3(0.0);
192194

193195
// OETF smallest perceptible value
194196
const float bsdfPdfThreshold = getLuma(irr_glsl_eotf_sRGB(vec3(1.0)/255.0));

include/irr/builtin/glsl/bxdf/bsdf/specular/dielectric.glsl

Lines changed: 23 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
#define _IRR_BSDF_DIELECTRIC_INCLUDED_
33

44
#include <irr/builtin/glsl/math/functions.glsl>
5+
#include <irr/builtin/glsl/bxdf/common.glsl>
56
#include <irr/builtin/glsl/bxdf/common_samples.glsl>
67
#include <irr/builtin/glsl/bxdf/fresnel.glsl>
78

89
// usually `luminosityContributionHint` would be the Rec.709 luma coefficients (the Y row of the RGB to CIE XYZ matrix)
910
// its basically a set of weights that determine
1011
// assert(1.0==luminosityContributionHint.r+luminosityContributionHint.g+luminosityContributionHint.b);
1112
// `remainderMetadata` is a variable in which the generator function returns byproducts of sample generation that would otherwise have to be redundantly calculated in `remainder_and_pdf`
12-
irr_glsl_LightSample irr_glsl_thin_smooth_dielectric_cos_generate_wo_clamps(in vec3 V, in vec3 N, in float NdotV, in float absNdotV, vec3 u, in vec3 eta2, in vec3 luminosityContributionHint, out vec3 remainderMetadata)
13+
irr_glsl_LightSample irr_glsl_thin_smooth_dielectric_cos_generate_wo_clamps(in vec3 V, in vec3 T, in vec3 B, in vec3 N, in float NdotV, in float absNdotV, vec3 u, in vec3 eta2, in vec3 luminosityContributionHint, out vec3 remainderMetadata)
1314
{
1415
// we will only ever intersect from the outside
1516
const vec3 reflectance = irr_glsl_thindielectric_infinite_scatter(irr_glsl_fresnel_dielectric_common(eta2,absNdotV));
@@ -20,34 +21,22 @@ irr_glsl_LightSample irr_glsl_thin_smooth_dielectric_cos_generate_wo_clamps(in v
2021
float rcpChoiceProb;
2122
const bool transmitted = irr_glsl_partitionRandVariable(reflectionProb, u.z, rcpChoiceProb);
2223
remainderMetadata = (transmitted ? (vec3(1.0)-reflectance):reflectance)*rcpChoiceProb;
23-
24-
irr_glsl_BxDFSample smpl;
25-
smpl.L = (transmitted ? vec3(0.0):N*2.0*NdotV)-V;
26-
/* Undefined
27-
s.TdotL = L.x;
28-
s.BdotL = L.y;
29-
s.NdotL = L.z;
30-
s.TdotH = H.x;
31-
s.BdotH = H.y;
32-
s.NdotH = H.z;
33-
s.VdotH = VdotH;
34-
s.LdotH = LdotH;*/
35-
return smpl;
24+
25+
const vec3 L = (transmitted ? vec3(0.0):N*2.0*NdotV)-V;
26+
return irr_glsl_createLightSample(L,dot(V,L),T,B,N);
3627
}
3728

3829

3930

40-
irr_glsl_LightSample irr_glsl_thin_smooth_dielectric_cos_generate_wo_clamps(in vec3 V, in vec3 N, in float NdotV, in float absNdotV, vec3 u, in vec3 eta2, in vec3 luminosityContributionHint)
31+
irr_glsl_LightSample irr_glsl_thin_smooth_dielectric_cos_generate_wo_clamps(in vec3 V, in vec3 T, in vec3 B, in vec3 N, in float NdotV, in float absNdotV, vec3 u, in vec3 eta2, in vec3 luminosityContributionHint)
4132
{
4233
vec3 dummy;
43-
irr_glsl_BxDFSample smpl = irr_glsl_thin_smooth_dielectric_cos_generate_wo_clamps(V,N,NdotV,absNdotV,u,eta2,luminosityContributionHint,dummy);
44-
smpl.NdotL = dot(N,smpl.L);
45-
return smpl;
34+
return irr_glsl_thin_smooth_dielectric_cos_generate_wo_clamps(V,T,B,N,NdotV,absNdotV,u,eta2,luminosityContributionHint,dummy);
4635
}
4736

4837
irr_glsl_LightSample irr_glsl_thin_smooth_dielectric_cos_generate(in irr_glsl_AnisotropicViewSurfaceInteraction interaction, vec3 u, in vec3 eta2, in vec3 luminosityContributionHint)
4938
{
50-
return irr_glsl_thin_smooth_dielectric_cos_generate_wo_clamps(interaction.isotropic.V.dir,interaction.isotropic.N,interaction.isotropic.NdotV,abs(interaction.isotropic.NdotV),u,eta2,luminosityContributionHint);
39+
return irr_glsl_thin_smooth_dielectric_cos_generate_wo_clamps(interaction.isotropic.V.dir,interaction.T,interaction.B,interaction.isotropic.N,interaction.isotropic.NdotV,abs(interaction.isotropic.NdotV),u,eta2,luminosityContributionHint);
5140
}
5241

5342

@@ -69,7 +58,7 @@ vec3 irr_glsl_thin_smooth_dielectric_cos_remainder_and_pdf_wo_clamps(out float p
6958
return irr_glsl_thin_smooth_dielectric_cos_remainder_and_pdf_wo_clamps(pdf, sampleValue / sampleProb);
7059
}
7160

72-
vec3 irr_glsl_thin_smooth_dielectric_cos_remainder_and_pdf(out float pdf, in irr_glsl_BxDFSample _sample, in irr_glsl_IsotropicViewSurfaceInteraction interaction, in vec3 eta2, in vec3 luminosityContributionHint)
61+
vec3 irr_glsl_thin_smooth_dielectric_cos_remainder_and_pdf(out float pdf, in irr_glsl_LightSample _sample, in irr_glsl_IsotropicViewSurfaceInteraction interaction, in vec3 eta2, in vec3 luminosityContributionHint)
7362
{
7463
const bool transmitted = irr_glsl_isTransmissionPath(interaction.NdotV,_sample.NdotL);
7564
return irr_glsl_thin_smooth_dielectric_cos_remainder_and_pdf_wo_clamps(pdf,transmitted,abs(interaction.NdotV),eta2,luminosityContributionHint);
@@ -78,45 +67,34 @@ vec3 irr_glsl_thin_smooth_dielectric_cos_remainder_and_pdf(out float pdf, in irr
7867

7968

8069

81-
irr_glsl_LightSample irr_glsl_smooth_dielectric_cos_generate_wo_clamps(in vec3 V, in vec3 N, in bool backside, in float NdotV, in float absNdotV, in float NdotV2, vec3 u, in float rcpOrientedEta, in float orientedEta2, in float rcpOrientedEta2, out bool transmitted)
70+
irr_glsl_LightSample irr_glsl_smooth_dielectric_cos_generate_wo_clamps(in vec3 V, in vec3 T, in vec3 B, in vec3 N, in bool backside, in float NdotV, in float absNdotV, in float NdotV2, vec3 u, in float rcpOrientedEta, in float orientedEta2, in float rcpOrientedEta2, out bool transmitted)
8271
{
8372
const float reflectance = irr_glsl_fresnel_dielectric_common(orientedEta2,absNdotV);
8473

8574
float rcpChoiceProb;
8675
transmitted = irr_glsl_partitionRandVariable(reflectance, u.z, rcpChoiceProb);
8776

88-
irr_glsl_BxDFSample smpl;
89-
smpl.L = irr_glsl_reflect_refract(transmitted, V, N, backside, NdotV, NdotV2, rcpOrientedEta, rcpOrientedEta2);
90-
/* Undefined
91-
s.TdotL = L.x;
92-
s.BdotL = L.y;
93-
s.NdotL = L.z;
94-
s.TdotH = H.x;
95-
s.BdotH = H.y;
96-
s.NdotH = H.z;
97-
s.VdotH = VdotH;*/
98-
return smpl;
77+
const vec3 L = irr_glsl_reflect_refract(transmitted, V, N, backside, NdotV, NdotV2, rcpOrientedEta, rcpOrientedEta2);
78+
return irr_glsl_createLightSample(L,dot(V,L),T,B,N);
9979
}
10080

101-
irr_glsl_BxDFSample irr_glsl_smooth_dielectric_cos_generate(in irr_glsl_AnisotropicViewSurfaceInteraction interaction, vec3 u, in float eta)
81+
irr_glsl_LightSample irr_glsl_smooth_dielectric_cos_generate(in irr_glsl_AnisotropicViewSurfaceInteraction interaction, vec3 u, in float eta)
10282
{
103-
float rcpOrientedEta, orientedEta2, rcpOrientedEta2;
104-
const bool backside = irr_glsl_getOrientedEtas(rcpOrientedEta, orientedEta2, rcpOrientedEta2, interaction.isotropic.NdotV, eta);
83+
float orientedEta, rcpOrientedEta;
84+
const bool backside = irr_glsl_getOrientedEtas(orientedEta, rcpOrientedEta, interaction.isotropic.NdotV, eta);
10585

10686
bool dummy;
107-
irr_glsl_BxDFSample smpl = irr_glsl_smooth_dielectric_cos_generate_wo_clamps(
87+
return irr_glsl_smooth_dielectric_cos_generate_wo_clamps(
10888
interaction.isotropic.V.dir,
109-
interaction.isotropic.N,
89+
interaction.T,interaction.B,interaction.isotropic.N,
11090
backside,
11191
interaction.isotropic.NdotV,
11292
abs(interaction.isotropic.NdotV),
11393
interaction.isotropic.NdotV*interaction.isotropic.NdotV,
11494
u,
115-
rcpOrientedEta, orientedEta2, rcpOrientedEta2,
95+
rcpOrientedEta, orientedEta*orientedEta, rcpOrientedEta*rcpOrientedEta,
11696
dummy
11797
);
118-
smpl.NdotL = dot(interaction.isotropic.N,smpl.L);
119-
return smpl;
12098
}
12199

122100

@@ -126,46 +104,14 @@ float irr_glsl_smooth_dielectric_cos_remainder_and_pdf(out float pdf, in bool tr
126104
return transmitted ? rcpOrientedEta2:1.0;
127105
}
128106

129-
float irr_glsl_smooth_dielectric_cos_remainder_and_pdf(out float pdf, in irr_glsl_BxDFSample _sample, in irr_glsl_IsotropicViewSurfaceInteraction interaction, in float eta)
107+
float irr_glsl_smooth_dielectric_cos_remainder_and_pdf(out float pdf, in irr_glsl_LightSample _sample, in irr_glsl_IsotropicViewSurfaceInteraction interaction, in float eta)
130108
{
131109
const bool transmitted = irr_glsl_isTransmissionPath(interaction.NdotV,_sample.NdotL);
132-
float dummy0,dummy1,rcpOrientedEta2;
133-
irr_glsl_getOrientedEtas(dummy0,dummy1,rcpOrientedEta2,interaction.NdotV,eta);
134-
return irr_glsl_smooth_dielectric_cos_remainder_and_pdf(pdf,transmitted,rcpOrientedEta2);
135-
}
136-
137-
138-
139-
#if 0 // TODO: Pseudo-spectral rendering.
140-
//this is probably wrong so not touching it
141-
vec3 wavelen;
142-
irr_glsl_BSDFSample irr_glsl_smooth_dielectric_cos_generate(in irr_glsl_AnisotropicViewSurfaceInteraction interaction, vec3 u, in vec3 eta, )
143-
{
144-
float NdotV = interaction.isotropic.NdotV;
145-
vec3 Fr = irr_glsl_fresnel_dielectric(eta, NdotV);
146-
float reflectionProb = dot(vec3(1.0/3.0),Fr);//dot(Fr, luminosityContributionHint);
147-
148-
const bool refracted = irr_glsl_partitionRandVariable(reflectionProb, u.z, throuhgput);
149-
150-
float _eta = u.z < 0.5 ? mix(eta.r, eta.g, u.z * 2.0) : mix(eta.g, eta.b, u.z * 2.0 - 1.0);
151-
wavelen = u.z<0.5 ? mix(vec3(4.0,0.0,0.0),vec3(0.0,2.0,0.0),u.z*2.0):mix(vec3(0.0,2.0,0.0),vec3(0.0,0.0,4.0),u.z*2.0-1.0);
152-
153-
irr_glsl_BSDFSample smpl;
154-
smpl.L = irr_glsl_reflect_refract(refracted, interaction.isotropic.V.dir, interaction.isotropic.N, NdotV, NdotV*NdotV, _eta);
155-
return smpl;
156-
}
110+
111+
float dummy, rcpOrientedEta;
112+
const bool backside = irr_glsl_getOrientedEtas(dummy, rcpOrientedEta, interaction.NdotV, eta);
157113

158-
vec3 irr_glsl_smooth_dielectric_cos_remainder_and_pdf(out float pdf, in irr_glsl_BSDFSample _sample, in irr_glsl_IsotropicViewSurfaceInteraction interaction, in vec3 eta)
159-
{
160-
pdf = 1.0/0.0; // should be reciprocal probability of the fresnel choice divided by 0.0, but still an INF.
161-
vec3 retval = vec3(1.0);
162-
return wavelen;
114+
return irr_glsl_smooth_dielectric_cos_remainder_and_pdf(pdf,transmitted,rcpOrientedEta);
163115
}
164-
vec3 irr_glsl_smooth_dielectric_cos_remainder_and_pdf(out float pdf, in irr_glsl_BSDFSample _sample, in irr_glsl_IsotropicViewSurfaceInteraction interaction, in vec3 eta, in float throughput)
165-
{
166-
return irr_glsl_smooth_dielectric_cos_remainder_and_pdf(pdf,_sample,interaction,eta);
167-
}
168-
#endif
169-
170116

171117
#endif

include/irr/builtin/glsl/bxdf/common.glsl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ irr_glsl_LightSample irr_glsl_createLightSampleTangentSpace(in vec3 tangentSpace
7171
}
7272

7373
//
74-
irr_glsl_LightSample irr_glsl_createLightSample(in vec3 L, in float VdotL, in irr_glsl_IsotropicViewSurfaceInteraction interaction)
74+
irr_glsl_LightSample irr_glsl_createLightSample(in vec3 L, in float VdotL, in vec3 N)
7575
{
7676
irr_glsl_LightSample s;
7777

@@ -80,32 +80,32 @@ irr_glsl_LightSample irr_glsl_createLightSample(in vec3 L, in float VdotL, in ir
8080

8181
s.TdotL = irr_glsl_FLT_NAN;
8282
s.BdotL = irr_glsl_FLT_NAN;
83-
s.NdotL = dot(interaction.N,L);
83+
s.NdotL = dot(N,L);
8484
s.NdotL2 = s.NdotL*s.NdotL;
8585

8686
return s;
8787
}
8888
irr_glsl_LightSample irr_glsl_createLightSample(in vec3 L, in irr_glsl_IsotropicViewSurfaceInteraction interaction)
8989
{
90-
return irr_glsl_createLightSample(L,dot(interaction.V.dir,L),interaction);
90+
return irr_glsl_createLightSample(L,dot(interaction.V.dir,L),interaction.N);
9191
}
92-
irr_glsl_LightSample irr_glsl_createLightSample(in vec3 L, in float VdotL, in irr_glsl_AnisotropicViewSurfaceInteraction interaction)
92+
irr_glsl_LightSample irr_glsl_createLightSample(in vec3 L, in float VdotL, in vec3 T, in vec3 B, in vec3 N)
9393
{
9494
irr_glsl_LightSample s;
9595

9696
s.L = L;
9797
s.VdotL = VdotL;
9898

99-
s.TdotL = dot(interaction.T,L);
100-
s.BdotL = dot(interaction.B,L);
101-
s.NdotL = dot(interaction.isotropic.N,L);
99+
s.TdotL = dot(T,L);
100+
s.BdotL = dot(B,L);
101+
s.NdotL = dot(N,L);
102102
s.NdotL2 = s.NdotL*s.NdotL;
103103

104104
return s;
105105
}
106106
irr_glsl_LightSample irr_glsl_createLightSample(in vec3 L, in irr_glsl_AnisotropicViewSurfaceInteraction interaction)
107107
{
108-
return irr_glsl_createLightSample(L,dot(interaction.isotropic.V.dir,L),interaction);
108+
return irr_glsl_createLightSample(L,dot(interaction.isotropic.V.dir,L),interaction.T,interaction.B,interaction.isotropic.N);
109109
}
110110

111111
//TODO move to different glsl header @Crisspl (The code is not DRY, you have something similar in material compiler!)

include/irr/builtin/glsl/bxdf/common_samples.glsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
irr_glsl_LightSample irr_glsl_transmission_cos_generate(in irr_glsl_AnisotropicViewSurfaceInteraction interaction)
88
{
9-
return irr_glsl_createLightSample(-interaction.isotropic.V.dir,-1.0,interaction);
9+
return irr_glsl_createLightSample(-interaction.isotropic.V.dir,-1.0,interaction.T,interaction.B,interaction.isotropic.N);
1010
}
1111

1212
float irr_glsl_transmission_cos_remainder_and_pdf(out float pdf, in irr_glsl_LightSample s)

0 commit comments

Comments
 (0)