| 723 | } |
| 724 | |
| 725 | Vec3fa 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 // |
no test coverage detected