[Bf-blender-cvs] [d96320c2da6] microfacet_hair: Cleanup: pass pointer of variable that will be modified
Weizhen Huang
noreply at git.blender.org
Mon Dec 19 20:12:04 CET 2022
Commit: d96320c2da6a20f332612220c69e2a13eaee3853
Author: Weizhen Huang
Date: Mon Dec 19 20:08:36 2022 +0100
Branches: microfacet_hair
https://developer.blender.org/rBd96320c2da6a20f332612220c69e2a13eaee3853
Cleanup: pass pointer of variable that will be modified
===================================================================
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 44755372159..04d9837365e 100644
--- a/intern/cycles/kernel/closure/bsdf_hair_microfacet.h
+++ b/intern/cycles/kernel/closure/bsdf_hair_microfacet.h
@@ -277,7 +277,7 @@ ccl_device float D(const bool beckmann, const float roughness, const float3 m, c
/* Compute fresnel reflection. Also return the dot product of the refracted ray and the normal as
* `cos_theta_t`, as it is used when computing the direction of the refracted ray. */
-ccl_device float fresnel(float cos_theta_i, float eta, ccl_private float &cos_theta_t)
+ccl_device float fresnel(float cos_theta_i, float eta, ccl_private float *cos_theta_t)
{
kernel_assert(!isnan_safe(cos_theta_i));
@@ -294,7 +294,7 @@ ccl_device float fresnel(float cos_theta_i, float eta, ccl_private float &cos_th
/* Using Snell's law, calculate the squared cosine of the angle between the surface normal and
* the transmitted ray. */
float cos_theta_t_sqr = 1.f - (1.f - cos_theta_i * cos_theta_i) / (eta * eta);
- cos_theta_t = safe_sqrtf(cos_theta_t_sqr);
+ *cos_theta_t = safe_sqrtf(cos_theta_t_sqr);
if (cos_theta_t_sqr <= 0) {
/* Total internal reflection. */
@@ -302,13 +302,13 @@ ccl_device float fresnel(float cos_theta_i, float eta, ccl_private float &cos_th
}
/* Amplitudes of reflected waves. */
- float a_s = (cos_theta_i - eta * cos_theta_t) / (cos_theta_i + eta * cos_theta_t);
- float a_p = (cos_theta_t - eta * cos_theta_i) / (cos_theta_t + eta * cos_theta_i);
+ float a_s = (cos_theta_i - eta * (*cos_theta_t)) / (cos_theta_i + eta * (*cos_theta_t));
+ float a_p = (*cos_theta_t - eta * cos_theta_i) / (*cos_theta_t + eta * cos_theta_i);
float r = .5f * (sqr(a_s) + sqr(a_p));
/* Adjust the sign of the transmitted direction to be relative to the surface normal. */
- cos_theta_t = -cos_theta_t;
+ *cos_theta_t = -(*cos_theta_t);
return r;
}
@@ -480,7 +480,7 @@ ccl_device float3 bsdf_microfacet_hair_eval_tt_trt_circular(KernelGlobals kg,
}
float cos_theta_t1;
- const float T1 = 1.f - fresnel(dot_wi_wh1, eta, cos_theta_t1);
+ const float T1 = 1.f - fresnel(dot_wi_wh1, eta, &cos_theta_t1);
/* refraction at the first interface */
const float3 wt = -refract_angle(wi, wh1, cos_theta_t1, inv_eta);
@@ -689,7 +689,7 @@ ccl_device int bsdf_microfacet_hair_sample_circular(const KernelGlobals kg,
float3 TRT = zero_float3();
float cos_theta_t1;
- float R1 = fresnel(dot(wi, wh1), *eta, cos_theta_t1);
+ float R1 = fresnel(dot(wi, wh1), *eta, &cos_theta_t1);
float3 R = make_float3(bsdf->extra->R * R1);
/* sample TT lobe */
@@ -718,7 +718,7 @@ ccl_device int bsdf_microfacet_hair_sample_circular(const KernelGlobals kg,
const float3 A_t = exp(-mu_a * (2.f * cos_gamma_t / cos_theta_wt));
float cos_theta_t2;
- const float R2 = fresnel(dot(-wt, wh2), inv_eta, cos_theta_t2);
+ const float R2 = fresnel(dot(-wt, wh2), inv_eta, &cos_theta_t2);
const float3 T1 = make_float3(1.f - R1);
const float3 T2 = make_float3(1.f - R2);
@@ -736,7 +736,7 @@ ccl_device int bsdf_microfacet_hair_sample_circular(const KernelGlobals kg,
wh3 = sample_wh(kg, beckmann, roughness, wtr, wmtr, sample_h3);
float cos_theta_t3;
- const float R3 = fresnel(dot(wtr, wh3), inv_eta, cos_theta_t3);
+ const float R3 = fresnel(dot(wtr, wh3), inv_eta, &cos_theta_t3);
wtrt = -refract_angle(wtr, wh3, cos_theta_t3, *eta);
@@ -983,7 +983,7 @@ ccl_device float3 bsdf_microfacet_hair_eval_tt_trt_elliptic(KernelGlobals kg,
}
float cos_theta_t1;
- const float T1 = 1.f - fresnel(dot_wi_wh1, eta, cos_theta_t1);
+ const float T1 = 1.f - fresnel(dot_wi_wh1, eta, &cos_theta_t1);
/* refraction at the first interface */
const float3 wt = -refract_angle(wi, wh1, cos_theta_t1, inv_eta);
@@ -1236,7 +1236,7 @@ ccl_device int bsdf_microfacet_hair_sample_elliptic(const KernelGlobals kg,
float3 TRT = zero_float3();
float cos_theta_t1;
- const float R1 = fresnel(dot(wi, wh1), *eta, cos_theta_t1);
+ const float R1 = fresnel(dot(wi, wh1), *eta, &cos_theta_t1);
float3 R = make_float3(bsdf->extra->R * R1);
/* sample TT lobe */
@@ -1264,7 +1264,7 @@ ccl_device int bsdf_microfacet_hair_sample_elliptic(const KernelGlobals kg,
const float3 A_t = exp(-mu_a * len(pi - pt) / cos_theta(wt));
float cos_theta_t2;
- const float R2 = fresnel(dot(-wt, wh2), inv_eta, cos_theta_t2);
+ const float R2 = fresnel(dot(-wt, wh2), inv_eta, &cos_theta_t2);
const float3 T1 = make_float3(1.f - R1);
const float3 T2 = make_float3(1.f - R2);
@@ -1283,7 +1283,7 @@ ccl_device int bsdf_microfacet_hair_sample_elliptic(const KernelGlobals kg,
wh3 = sample_wh(kg, beckmann, roughness, wtr, wmtr, sample_h3);
float cos_theta_t3;
- const float R3 = fresnel(dot(wtr, wh3), inv_eta, cos_theta_t3);
+ const float R3 = fresnel(dot(wtr, wh3), inv_eta, &cos_theta_t3);
wtrt = -refract_angle(wtr, wh3, cos_theta_t3, *eta);
More information about the Bf-blender-cvs
mailing list