Skip to content

Commit cb68928

Browse files
committed
fixes iridescent fresnel under transmission
1 parent 6971906 commit cb68928

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

include/nbl/builtin/hlsl/bxdf/fresnel.hlsl

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ struct iridescent_helper
563563

564564
if (hlsl::any(notTIR))
565565
{
566-
Dielectric<vector_type>::__polarized(eta12, hlsl::promote<vector_type>(cosTheta_1), R12p, R12s);
566+
Dielectric<vector_type>::__polarized(eta12 * eta12, hlsl::promote<vector_type>(cosTheta_1), R12p, R12s);
567567

568568
// Reflected part by the base
569569
// if kappa==0, base material is dielectric
@@ -741,7 +741,6 @@ struct Iridescent<T, true, Colorspace NBL_PARTIAL_REQ_BOT(concepts::FloatingPoin
741741
retval.ior1 = params.ior1;
742742
retval.ior2 = params.ior2;
743743
retval.ior3 = params.ior3;
744-
retval.iork3 = params.iork3;
745744
retval.eta12 = params.ior2/params.ior1;
746745
retval.eta23 = params.ior3/params.ior2;
747746
return retval;
@@ -753,11 +752,11 @@ struct Iridescent<T, true, Colorspace NBL_PARTIAL_REQ_BOT(concepts::FloatingPoin
753752
base_type::eta12, base_type::eta23, getEtak23(), clampedCosTheta);
754753
}
755754

756-
scalar_type getRefractionOrientedEta() NBL_CONST_MEMBER_FUNC { return base_type::eta23[0]; }
755+
scalar_type getRefractionOrientedEta() NBL_CONST_MEMBER_FUNC { return base_type::ior1[0] / base_type::ior3[0]; }
757756
OrientedEtaRcps<eta_type> getOrientedEtaRcps() NBL_CONST_MEMBER_FUNC
758757
{
759758
OrientedEtaRcps<eta_type> rcpEta;
760-
rcpEta.value = hlsl::promote<eta_type>(1.0) / base_type::eta23[0];
759+
rcpEta.value = base_type::ior1[0] / base_type::ior3[0];
761760
rcpEta.value2 = rcpEta.value * rcpEta.value;
762761
return rcpEta;
763762
}
@@ -767,9 +766,9 @@ struct Iridescent<T, true, Colorspace NBL_PARTIAL_REQ_BOT(concepts::FloatingPoin
767766
const bool flip = NdotI < scalar_type(0.0);
768767
this_t orientedFresnel;
769768
orientedFresnel.D = base_type::D;
770-
orientedFresnel.ior1 = base_type::ior3;
769+
orientedFresnel.ior1 = hlsl::mix(base_type::ior1, base_type::ior3, flip);
771770
orientedFresnel.ior2 = base_type::ior2;
772-
orientedFresnel.ior3 = base_type::ior1;
771+
orientedFresnel.ior3 = hlsl::mix(base_type::ior3, base_type::ior1, flip);
773772
orientedFresnel.eta12 = hlsl::mix(base_type::eta12, hlsl::promote<vector_type>(1.0)/base_type::eta23, flip);
774773
orientedFresnel.eta23 = hlsl::mix(base_type::eta23, hlsl::promote<vector_type>(1.0)/base_type::eta12, flip);
775774
return orientedFresnel;

0 commit comments

Comments
 (0)