Commit: f15010bbe65fee41306358b8405ba97bd244cdc8 Author: Weizhen Huang Date: Thu Dec 15 16:16:13 2022 +0100 Branches: microfacet_hair https://developer.blender.org/rBf15010bbe65fee41306358b8405ba97bd244cdc8
Remove unnecessary Jacobians =================================================================== M intern/cycles/kernel/closure/bsdf_hair_microfacet.h =================================================================== diff --git a/intern/cycles/kernel/closure/bsdf_hair_microfacet.h b/intern/cycles/kernel/closure/bsdf_hair_microfacet.h index b5e88464776..794c6930b96 100644 --- a/intern/cycles/kernel/closure/bsdf_hair_microfacet.h +++ b/intern/cycles/kernel/closure/bsdf_hair_microfacet.h @@ -415,12 +415,11 @@ ccl_device float3 bsdf_microfacet_hair_eval_r_circular(ccl_private const ShaderC const float phi_m = phi_m_min + i * res; const float3 wm = sph_dir(tilt, phi_m); - const float J = fmaxf(cos(phi_i - phi_m), 0.f); if (microfacet_visible(wi, wo, make_float3(wm.x, 0.f, wm.z), wh)) { const float weight = (i == 0 || i == intervals - 1) ? 0.5f : (i % 2 + 1); integral += weight * D(beckmann, roughness, wm, wh) * - G(beckmann, roughness, wi, wo, wm, wh) * J; + G(beckmann, roughness, wi, wo, wm, wh); } } integral *= (2.f / 3.f * res); @@ -475,7 +474,6 @@ ccl_device float3 bsdf_microfacet_hair_eval_tt_trt_circular(KernelGlobals kg, const float phi_mi = phi_m_min + i * res; const float3 wmi = sph_dir(tilt, phi_mi); - const float J = fmaxf(cos(phi_i - phi_mi), 0.f); /* sample wh1 */ const float2 sample1 = make_float2(lcg_step_float(&rng_quadrature), @@ -524,7 +522,7 @@ ccl_device float3 bsdf_microfacet_hair_eval_tt_trt_circular(KernelGlobals kg, const float3 result = T1 * T2 * D2 * A_t * dot_wt_wh2 * dot(wo, wh2) * sqr(rcp_norm_wh2) / dot(wt, wmi) * weight * - smith_g1(beckmann, roughness, -wt, wmi, wh1) * dot(wi, wmi) * J; + smith_g1(beckmann, roughness, -wt, wmi, wh1) * dot(wi, wmi); if (isfinite_safe(result)) S_tt += bsdf->extra->TT * result; @@ -579,7 +577,7 @@ ccl_device float3 bsdf_microfacet_hair_eval_tt_trt_circular(KernelGlobals kg, A_tr * weight / (dot(wt, wmi) * dot(wtr, wmt)) * smith_g1(beckmann, roughness, -wt, wmi, wh1) * smith_g1(beckmann, roughness, -wtr, wmt, wh2) * dot(wi, wmi) * - dot(wt, wmt) * J; + dot(wt, wmt); if (isfinite_safe(result)) S_trt += bsdf->extra->TRT * result; @@ -615,13 +613,7 @@ ccl_device Spectrum bsdf_microfacet_hair_eval_circular(KernelGlobals kg, /* TODO: better estimation of the pdf */ *pdf = 1.f; - // original from Huang's EGSR 2022 return rgb_to_spectrum(R / cos_theta(wi)); - - // correction: the extra cos_theta(wo) corresponds to the lack of consideration of Zinke's - // cos_theta_i^2 in the BCSDF; for instance eq[2] in Huang's should include an extra cos_theta_i - // (plus here remember wi and wo meanings are flipped) - /* return rgb_to_spectrum(R / (cos_theta(wi) * cos_theta(wo))); */ } ccl_device int bsdf_microfacet_hair_sample_circular(const KernelGlobals kg, @@ -813,14 +805,8 @@ ccl_device int bsdf_microfacet_hair_sample_circular(const KernelGlobals kg, label |= LABEL_TRANSMIT; } - // original from Huang's EGSR 2022 *eval *= visibility; - // correction: the extra cos_theta(wo) corresponds to the lack of consideration of Zinke's - // cos_theta_i^2 in the BCSDF; for instance eq[2] in Huang's should include an extra cos_theta_i - // (plus here remember wi and wo meanings are flipped) - /* *eval *= visibility / cos_theta(wo); */ - *omega_in = wo.x * X + wo.y * Y + wo.z * Z; /* correction of the cosine foreshortening term @@ -911,14 +897,13 @@ ccl_device float3 bsdf_microfacet_hair_eval_r_elliptic(ccl_private const ShaderC const float gamma_m = gamma_m_min + i * res; const float3 wm = sphg_dir(tilt, gamma_m, a, b); - const float J = fmaxf(cos(gamma_i - gamma_m), 0.f); if (microfacet_visible(wi, wo, make_float3(wm.x, 0.f, wm.z), wh)) { const float weight = (i == 0 || i == intervals - 1) ? .5f : (i % 2 + 1); const float arc_length = sqrtf(1.f - e2 * sqr(sinf(gamma_m))); integral += weight * D(beckmann, roughness, wm, wh) * - G(beckmann, roughness, wi, wo, wm, wh) * arc_length * J; + G(beckmann, roughness, wi, wo, wm, wh) * arc_length; } } @@ -990,7 +975,6 @@ ccl_device float3 bsdf_microfacet_hair_eval_tt_trt_elliptic(KernelGlobals kg, for (size_t i = 0; i < intervals; i++) { const float gamma_mi = gamma_m_min + i * res; - const float J = fmaxf(cos(gamma_i - gamma_mi), 0.f); const float3 wmi = sphg_dir(tilt, gamma_mi, a, b); const float3 wmi_ = sphg_dir(0.f, gamma_mi, a, b); @@ -1046,7 +1030,7 @@ ccl_device float3 bsdf_microfacet_hair_eval_tt_trt_elliptic(KernelGlobals kg, const float3 result = T1 * T2 * D2 * A_t * dot_wt_wh2 * dot(wo, wh2) * sqr(rcp_norm_wh2) / dot(wt, wmi) * weight * - smith_g1(beckmann, roughness, -wt, wmi, wh1) * dot(wi, wmi) * J; + smith_g1(beckmann, roughness, -wt, wmi, wh1) * dot(wi, wmi); if (isfinite_safe(result)) { const float arc_length = sqrtf(1.f - e2 * sqr(sinf(gamma_mt))); @@ -1107,7 +1091,7 @@ ccl_device float3 bsdf_microfacet_hair_eval_tt_trt_elliptic(KernelGlobals kg, A_tr * weight / (dot(wt, wmi) * dot(wtr, wmt)) * smith_g1(beckmann, roughness, -wt, wmi, wh1) * smith_g1(beckmann, roughness, -wtr, wmt, wh2) * dot(wi, wmi) * - dot(wt, wmt) * J; + dot(wt, wmt); if (isfinite_safe(result)) { const float arc_length = sqrtf(1.f - e2 * sqr(sin(gamma_mtr))); @@ -1155,11 +1139,7 @@ ccl_device Spectrum bsdf_microfacet_hair_eval_elliptic(KernelGlobals kg, *pdf = 1.f; - return rgb_to_spectrum(R / cos_theta(wi)); // original from Huang's EGSR 2022 - /* return rgb_to_spectrum(R / (cos_theta(wi) * cos_theta(wo))); */ - // correction: the extra cos_theta(wo) corresponds to the lack of consideration of Zinke's - // cos_theta_i^2 in the BCSDF; for instance eq[2] in Huang's should include an extra cos_theta_i - // (plus here remember wi and wo meanings are flipped) + return rgb_to_spectrum(R / cos_theta(wi)); } ccl_device int bsdf_microfacet_hair_sample_elliptic(const KernelGlobals kg, @@ -1373,11 +1353,7 @@ ccl_device int bsdf_microfacet_hair_sample_elliptic(const KernelGlobals kg, label |= LABEL_TRANSMIT; } - *eval *= visibility; // original from Huang's EGSR 2022 - /* *eval *= visibility / cos_theta(wo); */ - // correction: the extra cos_theta(wo) corresponds to the lack of consideration of Zinke's - // cos_theta_i^2 in the BCSDF; for instance eq[2] in Huang's should include an extra cos_theta_i - // (plus here remember wi and wo meanings are flipped) + *eval *= visibility; *omega_in = wo.x * X + wo.y * Y + wo.z * Z; /* correction of the cosine foreshortening term _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs