Skip to content

Commit b01ebf7

Browse files
committed
pdf should also depend on surface interaction
1 parent ee864a6 commit b01ebf7

File tree

6 files changed

+33
-8
lines changed

6 files changed

+33
-8
lines changed

include/nbl/builtin/hlsl/bxdf/base/lambertian.hlsl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,17 @@ struct SLambertianBase
6060
return generate(anisotropic_interaction_type::create(interaction), u);
6161
}
6262

63-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample)
63+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
6464
{
6565
NBL_IF_CONSTEXPR (IsBSDF)
6666
return sampling::ProjectedSphere<scalar_type>::pdf(_sample.getNdotL(_clamp));
6767
else
6868
return sampling::ProjectedHemisphere<scalar_type>::pdf(_sample.getNdotL(_clamp));
6969
}
70+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
71+
{
72+
return pdf(_sample, interaction.isotropic);
73+
}
7074

7175
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
7276
{

include/nbl/builtin/hlsl/bxdf/base/oren_nayar.hlsl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,18 +95,22 @@ struct SOrenNayarBase
9595
return generate(anisotropic_interaction_type::create(interaction), u);
9696
}
9797

98-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample)
98+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
9999
{
100100
if (IsBSDF)
101101
return sampling::ProjectedSphere<scalar_type>::pdf(_sample.getNdotL(_clamp));
102102
else
103103
return sampling::ProjectedHemisphere<scalar_type>::pdf(_sample.getNdotL(_clamp));
104104
}
105+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
106+
{
107+
return pdf(_sample, interaction.isotropic);
108+
}
105109

106110
template<typename Query>
107111
quotient_pdf_type __quotient_and_pdf(NBL_CONST_REF_ARG(Query) query, NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
108112
{
109-
scalar_type _pdf = pdf(_sample);
113+
scalar_type _pdf = pdf(_sample, interaction);
110114
scalar_type q = __rec_pi_factored_out_wo_clamps(query.getVdotL(), _sample.getNdotL(_clamp), interaction.getNdotV(_clamp));
111115
return quotient_pdf_type::create(q, _pdf);
112116
}

include/nbl/builtin/hlsl/bxdf/common.hlsl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -900,7 +900,7 @@ NBL_CONCEPT_BEGIN(3)
900900
NBL_CONCEPT_END(
901901
((NBL_CONCEPT_REQ_TYPE_ALIAS_CONCEPT)(bxdf_common_typdefs, T))
902902
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((bxdf.eval(_sample, aniso)), ::nbl::hlsl::is_same_v, typename T::spectral_type))
903-
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((bxdf.pdf(_sample)), ::nbl::hlsl::is_same_v, typename T::scalar_type))
903+
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((bxdf.pdf(_sample, aniso)), ::nbl::hlsl::is_same_v, typename T::scalar_type))
904904
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((bxdf.quotient_and_pdf(_sample, aniso)), ::nbl::hlsl::is_same_v, typename T::quotient_pdf_type))
905905
((NBL_CONCEPT_REQ_TYPE_ALIAS_CONCEPT)(LightSample, typename T::sample_type))
906906
((NBL_CONCEPT_REQ_TYPE_ALIAS_CONCEPT)(concepts::FloatingPointLikeVectorial, typename T::spectral_type))
@@ -925,6 +925,7 @@ NBL_CONCEPT_END(
925925
((NBL_CONCEPT_REQ_TYPE_ALIAS_CONCEPT)(bxdf_common, T))
926926
((NBL_CONCEPT_REQ_TYPE)(T::isotropic_interaction_type))
927927
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((bxdf.eval(_sample, iso)), ::nbl::hlsl::is_same_v, typename T::spectral_type))
928+
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((bxdf.pdf(_sample, iso)), ::nbl::hlsl::is_same_v, typename T::scalar_type))
928929
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((bxdf.quotient_and_pdf(_sample, iso)), ::nbl::hlsl::is_same_v, typename T::quotient_pdf_type))
929930
((NBL_CONCEPT_REQ_TYPE_ALIAS_CONCEPT)(concepts::FloatingPointLikeVectorial, typename T::spectral_type))
930931
((NBL_CONCEPT_REQ_TYPE_ALIAS_CONCEPT)(surface_interactions::Isotropic, typename T::isotropic_interaction_type))

include/nbl/builtin/hlsl/bxdf/reflection/delta_distribution.hlsl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,11 @@ struct SDeltaDistribution
5252
return generate(anisotropic_interaction_type::create(interaction), u);
5353
}
5454

55-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample)
55+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
56+
{
57+
return 0;
58+
}
59+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
5660
{
5761
return 0;
5862
}

include/nbl/builtin/hlsl/bxdf/transmission/delta_distribution.hlsl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@ struct SDeltaDistribution
4949
return generate(anisotropic_interaction_type::create(interaction), u);
5050
}
5151

52-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample)
52+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
53+
{
54+
return 0;
55+
}
56+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
5357
{
5458
return 0;
5559
}

include/nbl/builtin/hlsl/bxdf/transmission/smooth_dielectric.hlsl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ struct SSmoothDielectric
5454
}
5555

5656
// eval and pdf return 0 because smooth dielectric/conductor BxDFs are dirac delta distributions, model perfectly specular objects that scatter light to only one outgoing direction
57-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample)
57+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
58+
{
59+
return 0;
60+
}
61+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
5862
{
5963
return 0;
6064
}
@@ -141,7 +145,11 @@ struct SThinSmoothDielectric
141145
return generate(anisotropic_interaction_type::create(interaction), u);
142146
}
143147

144-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample)
148+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
149+
{
150+
return 0;
151+
}
152+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
145153
{
146154
return 0;
147155
}

0 commit comments

Comments
 (0)