MCPcopy Create free account
hub / github.com/RenderKit/embree / DielectricMaterial__sample

Function DielectricMaterial__sample

tutorials/pathtracer/pathtracer_device.cpp:725–749  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

723}
724
725Vec3fa DielectricMaterial__sample(ISPCDielectricMaterial* material, const BRDF& brdf, const Vec3fa& Lw, const Vec3fa& wo, const DifferentialGeometry& dg, Sample3f& wi_o, Medium& medium, const Vec2f& s)
726{
727 float eta = 0.0f;
728 Medium mediumOutside = make_Medium(Vec3fa((Vec3fa)material->transmissionOutside),material->etaOutside);
729 Medium mediumInside = make_Medium(Vec3fa((Vec3fa)material->transmissionInside ),material->etaInside );
730 Medium mediumFront, mediumBack;
731 if (eq(medium,mediumInside)) {
732 eta = material->etaInside/material->etaOutside;
733 mediumFront = mediumInside;
734 mediumBack = mediumOutside;
735 }
736 else {
737 eta = material->etaOutside/material->etaInside;
738 mediumFront = mediumOutside;
739 mediumBack = mediumInside;
740 }
741
742 float cosThetaO = clamp(dot(wo,dg.Ns));
743 float cosThetaI; Sample3f wit = refract(wo,dg.Ns,eta,cosThetaO,cosThetaI);
744 Sample3f wis = make_Sample3f(reflect(wo,dg.Ns),1.0f);
745 float R = fresnelDielectric(cosThetaO,cosThetaI,eta);
746 Vec3fa cs = Vec3fa(R);
747 Vec3fa ct = Vec3fa(1.0f-R);
748 return sample_component2(cs,wis,mediumFront,ct,wit,mediumBack,Lw,wi_o,medium,s.x);
749}
750
751////////////////////////////////////////////////////////////////////////////////
752// ThinDielectric Material //

Callers 1

Material__sampleFunction · 0.85

Calls 10

make_MediumFunction · 0.85
refractFunction · 0.85
make_Sample3fFunction · 0.85
reflectFunction · 0.85
fresnelDielectricFunction · 0.85
sample_component2Function · 0.85
eqFunction · 0.70
Vec3faClass · 0.50
clampFunction · 0.50
dotFunction · 0.50

Tested by

no test coverage detected