[Bf-blender-cvs] [ff6883fbc33] soc-2018-hair-shader: Fix sd->dPdu normalization, renamed dPdCD to Y, increase assert epsilon.
Brecht Van Lommel
noreply at git.blender.org
Sun May 27 01:40:44 CEST 2018
Commit: ff6883fbc330c5ac1333beaf38142d6b1d7728cf
Author: Brecht Van Lommel
Date: Sun May 27 00:39:32 2018 +0200
Branches: soc-2018-hair-shader
https://developer.blender.org/rBff6883fbc330c5ac1333beaf38142d6b1d7728cf
Fix sd->dPdu normalization, renamed dPdCD to Y, increase assert epsilon.
===================================================================
M intern/cycles/kernel/closure/bsdf_hair_principled.h
===================================================================
diff --git a/intern/cycles/kernel/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h
index a1feaf222f2..fe32e0c1ddb 100644
--- a/intern/cycles/kernel/closure/bsdf_hair_principled.h
+++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h
@@ -160,14 +160,15 @@ ccl_device int bsdf_principled_hair_setup(KernelGlobals *kg, ShaderData *sd, Pri
float curve_r;
float3 curve_P = curve_center(kg, sd, &curve_r);
- float3 dPdCD = normalize(cross(sd->dPdu, sd->I));
- float h = safe_divide(dot(dPdCD, sd->P - curve_P), curve_r);
+ float3 X = normalize(sd->dPdu);
+ float3 Y = normalize(cross(X, sd->I));
+ float h = safe_divide(dot(Y, sd->P - curve_P), curve_r);
- kernel_assert(isfinite3_safe(dPdCD));
+ kernel_assert(isfinite3_safe(Y));
kernel_assert(isfinite_safe(h));
kernel_assert(fabsf(h) <= 2.0f);
- bsdf->geom = make_float4(dPdCD.x, dPdCD.y, dPdCD.z, h);
+ bsdf->geom = make_float4(Y.x, Y.y, Y.z, h);
return SD_BSDF|SD_BSDF_HAS_EVAL|SD_BSDF_NEEDS_LCG;
}
@@ -224,15 +225,15 @@ ccl_device float3 bsdf_principled_hair_eval(const ShaderData *sd, const ShaderCl
kernel_assert(isfinite3_safe(sd->P) && isfinite_safe(sd->ray_length));
const PrincipledHairBSDF *bsdf = (const PrincipledHairBSDF*) sc;
- float3 dPdCD = float4_to_float3(bsdf->geom);
+ float3 Y = float4_to_float3(bsdf->geom);
- kernel_assert(fabsf(dot(sd->dPdu, dPdCD)) < 1e-5f);
- float3 Z = normalize(cross(sd->dPdu, dPdCD));
- float3 Y = dPdCD;
+ float3 X = normalize(sd->dPdu);
+ kernel_assert(fabsf(dot(X, Y)) < 1e-4f);
+ float3 Z = normalize(cross(X, Y));
- float3 wo = make_float3(dot(sd->I, sd->dPdu), dot(sd->I, Y), dot(sd->I, Z));
- float3 wi = make_float3(dot(omega_in, sd->dPdu), dot(omega_in, dPdCD), dot(omega_in, Z));
- //kernel_assert(fabsf(wo.y) < 1e-5f);
+ float3 wo = make_float3(dot(sd->I, X), dot(sd->I, Y), dot(sd->I, Z));
+ float3 wi = make_float3(dot(omega_in, X), dot(omega_in, Y), dot(omega_in, Z));
+ //kernel_assert(fabsf(wo.y) < 1e-4f);
//scanf("%d %d %d %d %d %d %d", &wo.x, &wo.y, &wo.z, &bsdf->geom.w, &wi.x, &wi.y, &wi.z);
float sin_theta_o = wo.x;
@@ -306,14 +307,14 @@ ccl_device int bsdf_principled_hair_sample(ShaderData *sd, const ShaderClosure *
#endif
const PrincipledHairBSDF *bsdf = (const PrincipledHairBSDF*) sc;
- float3 dPdCD = float4_to_float3(bsdf->geom);
+ float3 Y = float4_to_float3(bsdf->geom);
- kernel_assert(fabsf(dot(sd->dPdu, dPdCD)) < 1e-5f);
- float3 Z = normalize(cross(sd->dPdu, dPdCD));
- float3 Y = dPdCD;
+ float3 X = normalize(sd->dPdu);
+ kernel_assert(fabsf(dot(X, Y)) < 1e-4f);
+ float3 Z = normalize(cross(X, Y));
- float3 wo = make_float3(dot(sd->I, sd->dPdu), dot(sd->I, Y), dot(sd->I, Z));
- //kernel_assert(fabsf(wo.y) < 1e-5f);
+ float3 wo = make_float3(dot(sd->I, X), dot(sd->I, Y), dot(sd->I, Z));
+ //kernel_assert(fabsf(wo.y) < 1e-4f);
float2 u[2];
u[0] = make_float2(randu, randv);
@@ -415,7 +416,7 @@ ccl_device int bsdf_principled_hair_sample(ShaderData *sd, const ShaderClosure *
//printf("%f %f %f %f %f %f %f\n", (double)eval->x, (double)eval->y, (double)eval->z, (double)*pdf, (double)sin_theta_i, (double)cosf(phi_i), (double)sinf(phi_i));
- *omega_in = sd->dPdu*sin_theta_i + Y*cos_theta_i*cosf(phi_i) + Z*cos_theta_i*sinf(phi_i);
+ *omega_in = X*sin_theta_i + Y*cos_theta_i*cosf(phi_i) + Z*cos_theta_i*sinf(phi_i);
#ifdef __RAY_DIFFERENTIALS__
float3 N = normalize(sd->I + *omega_in);
More information about the Bf-blender-cvs
mailing list