@@ -183,11 +183,17 @@ struct SCookTorrance
183
183
}
184
184
scalar_type pdf (NBL_CONST_REF_ARG (sample_type) _sample, NBL_CONST_REF_ARG (isotropic_interaction_type) interaction, NBL_CONST_REF_ARG (isocache_type) cache)
185
185
{
186
- return __pdf<isotropic_interaction_type, isocache_type>(_sample, interaction, cache);
186
+ if (IsBSDF || (_sample.getNdotL () > numeric_limits<scalar_type>::min && interaction.getNdotV () > numeric_limits<scalar_type>::min ))
187
+ return __pdf<isotropic_interaction_type, isocache_type>(_sample, interaction, cache);
188
+ else
189
+ return scalar_type (0.0 );
187
190
}
188
191
scalar_type pdf (NBL_CONST_REF_ARG (sample_type) _sample, NBL_CONST_REF_ARG (anisotropic_interaction_type) interaction, NBL_CONST_REF_ARG (anisocache_type) cache)
189
192
{
190
- return __pdf<anisotropic_interaction_type, anisocache_type>(_sample, interaction, cache);
193
+ if (IsBSDF || (_sample.getNdotL () > numeric_limits<scalar_type>::min && interaction.getNdotV () > numeric_limits<scalar_type>::min ))
194
+ return __pdf<anisotropic_interaction_type, anisocache_type>(_sample, interaction, cache);
195
+ else
196
+ return scalar_type (0.0 );
191
197
}
192
198
193
199
template<class Interaction, class MicrofacetCache>
@@ -196,17 +202,14 @@ struct SCookTorrance
196
202
scalar_type _pdf = __pdf<Interaction, MicrofacetCache>(_sample, interaction, cache);
197
203
198
204
spectral_type quo = hlsl::promote<spectral_type>(0.0 );
199
- if (IsBSDF || (_sample.getNdotL () > numeric_limits<scalar_type>::min && interaction.getNdotV () > numeric_limits<scalar_type>::min ))
200
- {
201
- using g2g1_query_type = typename N::g2g1_query_type;
202
-
203
- g2g1_query_type gq = ndf.template createG2G1Query<sample_type, Interaction>(_sample, interaction);
204
- scalar_type G2_over_G1 = ndf.template G2_over_G1<sample_type, Interaction, MicrofacetCache>(gq, _sample, interaction, cache);
205
- NBL_IF_CONSTEXPR (IsBSDF)
206
- quo = hlsl::promote<spectral_type>(G2_over_G1);
207
- else
208
- quo = fresnel (cache.getVdotH ()) * G2_over_G1;
209
- }
205
+
206
+ using g2g1_query_type = typename N::g2g1_query_type;
207
+ g2g1_query_type gq = ndf.template createG2G1Query<sample_type, Interaction>(_sample, interaction);
208
+ scalar_type G2_over_G1 = ndf.template G2_over_G1<sample_type, Interaction, MicrofacetCache>(gq, _sample, interaction, cache);
209
+ NBL_IF_CONSTEXPR (IsBSDF)
210
+ quo = hlsl::promote<spectral_type>(G2_over_G1);
211
+ else
212
+ quo = fresnel (cache.getVdotH ()) * G2_over_G1;
210
213
211
214
return quotient_pdf_type::create (quo, _pdf);
212
215
}
0 commit comments