| 552 | } |
| 553 | |
| 554 | Vec3fa OBJMaterial__eval(ISPCOBJMaterial* material, const BRDF& brdf, const Vec3fa& wo, const DifferentialGeometry& dg, const Vec3fa& wi) |
| 555 | { |
| 556 | Vec3fa R = Vec3fa(0.0f); |
| 557 | const float Md = max(max(brdf.Kd.x,brdf.Kd.y),brdf.Kd.z); |
| 558 | const float Ms = max(max(brdf.Ks.x,brdf.Ks.y),brdf.Ks.z); |
| 559 | const float Mt = max(max(brdf.Kt.x,brdf.Kt.y),brdf.Kt.z); |
| 560 | if (Md > 0.0f) { |
| 561 | R = R + (1.0f/float(M_PI)) * clamp(dot(wi,dg.Ns)) * brdf.Kd; |
| 562 | } |
| 563 | if (Ms > 0.0f) { |
| 564 | const Sample3f refl = make_Sample3f(reflect(wo,dg.Ns),1.0f); |
| 565 | if (dot(refl.v,wi) > 0.0f) |
| 566 | R = R + (brdf.Ns+2) * float(one_over_two_pi) * powf(max(1e-10f,dot(refl.v,wi)),brdf.Ns) * clamp(dot(wi,dg.Ns)) * brdf.Ks; |
| 567 | } |
| 568 | if (Mt > 0.0f) { |
| 569 | } |
| 570 | return R; |
| 571 | } |
| 572 | |
| 573 | Vec3fa OBJMaterial__sample(ISPCOBJMaterial* material, const BRDF& brdf, const Vec3fa& Lw, const Vec3fa& wo, const DifferentialGeometry& dg, Sample3f& wi_o, Medium& medium, const Vec2f& s) |
| 574 | { |
no test coverage detected