@@ -332,7 +332,7 @@ struct Schlick
332332
333333 T operator ()(const scalar_type clampedCosTheta)
334334 {
335- assert (clampedCosTheta > scalar_type (0.0 ));
335+ assert (clampedCosTheta >= scalar_type (0.0 ));
336336 assert (hlsl::all (hlsl::promote<T>(0.02 ) < F0 && F0 <= hlsl::promote<T>(1.0 )));
337337 T x = 1.0 - clampedCosTheta;
338338 return F0 + (1.0 - F0) * x*x*x*x*x;
@@ -394,10 +394,11 @@ struct Dielectric
394394 using scalar_type = typename vector_traits<T>::scalar_type;
395395 using vector_type = T;
396396
397- static Dielectric<T> create (NBL_CONST_REF_ARG (T) eta )
397+ static Dielectric<T> create (NBL_CONST_REF_ARG (OrientedEtas<T>) orientedEta )
398398 {
399399 Dielectric<T> retval;
400- retval.orientedEta = OrientedEtas<T>::create (1.0 , eta);
400+ retval.orientedEta = orientedEta;
401+ retval.orientedEta2 = orientedEta.value * orientedEta.value;
401402 return retval;
402403 }
403404
@@ -417,34 +418,13 @@ struct Dielectric
417418
418419 T operator ()(const scalar_type clampedCosTheta)
419420 {
420- return __call (orientedEta.value * orientedEta.value, clampedCosTheta);
421- }
422-
423- OrientedEtas<T> orientedEta;
424- };
425-
426- template<typename T NBL_PRIMARY_REQUIRES (concepts::FloatingPointLikeVectorial<T>)
427- struct DielectricFrontFaceOnly
428- {
429- using scalar_type = typename vector_traits<T>::scalar_type;
430- using vector_type = T;
431-
432- static DielectricFrontFaceOnly<T> create (NBL_CONST_REF_ARG (T) eta)
433- {
434- Dielectric<T> retval;
435- retval.orientedEta = OrientedEtas<T>::create (1.0 , eta);
436- return retval;
437- }
438-
439- T operator ()(const scalar_type clampedCosTheta)
440- {
441- return Dielectric<T>::__call (orientedEta.value * orientedEta.value, clampedCosTheta);
421+ return __call (orientedEta2, clampedCosTheta);
442422 }
443423
444424 OrientedEtas<T> orientedEta;
425+ T orientedEta2;
445426};
446427
447-
448428// gets the sum of all R, T R T, T R^3 T, T R^5 T, ... paths
449429template<typename T NBL_FUNC_REQUIRES (concepts::FloatingPointLikeScalar<T> || concepts::FloatingPointLikeVectorial<T>)
450430T thinDielectricInfiniteScatter (const T singleInterfaceReflectance)
0 commit comments