[Bf-blender-cvs] [1643dc5b886] soc-2018-hair-shader: Cleanup: code style fixes, tweak comments and variable naming.

Brecht Van Lommel noreply at git.blender.org
Sun Jul 15 16:58:03 CEST 2018


Commit: 1643dc5b88644b8efba82884f8ffdfbb6654f745
Author: Brecht Van Lommel
Date:   Sun Jul 15 15:51:17 2018 +0200
Branches: soc-2018-hair-shader
https://developer.blender.org/rB1643dc5b88644b8efba82884f8ffdfbb6654f745

Cleanup: code style fixes, tweak comments and variable naming.

===================================================================

M	intern/cycles/kernel/closure/bsdf_hair_principled.h
M	intern/cycles/kernel/kernel_compat_opencl.h
M	intern/cycles/kernel/osl/osl_closures.cpp
M	intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
M	intern/cycles/kernel/svm/svm_closure.h
M	intern/cycles/render/nodes.cpp
M	intern/cycles/render/nodes.h
M	source/blender/blenkernel/BKE_node.h
M	source/blender/nodes/NOD_static_types.h
M	source/blender/nodes/shader/nodes/node_shader_bsdf_hair_principled.c

===================================================================

diff --git a/intern/cycles/kernel/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h
index fc08eeaeee8..71f6f4d16c8 100644
--- a/intern/cycles/kernel/closure/bsdf_hair_principled.h
+++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h
@@ -67,8 +67,12 @@ ccl_device_inline float delta_phi(int p, float gamma_o, float gamma_t)
 /* Remaps the given angle to [-pi, pi]. */
 ccl_device_inline float wrap_angle(float a)
 {
-	while(a > M_PI_F) a -= M_2PI_F;
-	while(a < -M_PI_F) a += M_2PI_F;
+	while(a > M_PI_F) {
+		a -= M_2PI_F;
+	}
+	while(a < -M_PI_F) {
+		a += M_2PI_F;
+	}
 	return a;
 }
 
@@ -83,9 +87,13 @@ ccl_device_inline float logistic(float x, float s)
 ccl_device_inline float logistic_cdf(float x, float s)
 {
 	float arg = -x/s;
-	// exp overflows if arg >= 89.0f
-	if(arg > 88.0f) return 0.0f;
-	return 1.0f / (1.0f + expf(arg));
+	/* expf() overflows if arg >= 89.0. */
+	if(arg > 88.0f) {
+		return 0.0f;
+	}
+	else {
+		return 1.0f / (1.0f + expf(arg));
+	}
 }
 
 /* Numerical approximation to the Bessel function of the first kind. */
@@ -99,7 +107,9 @@ ccl_device_inline float bessel_I0(float x)
 	for(int i = 2; i < 10; i++) {
 		i_fac_2 *= i*i;
 		float newval = val + pow_x_2i / (pow_4_i * i_fac_2);
-		if(val == newval) return val;
+		if(val == newval) {
+			return val;
+		}
 		val = newval;
 		pow_x_2i *= x;
 		pow_4_i *= 4;
@@ -111,8 +121,8 @@ ccl_device_inline float bessel_I0(float x)
 ccl_device_inline float log_bessel_I0(float x)
 {
 	if (x > 12.0f) {
-		// log(1/x) == -log(x) iff x > 0.
-		// This is only used with positive cosines
+		/* log(1/x) == -log(x) iff x > 0.
+		 * This is only used with positive cosines */
 		return x + 0.5f * (1.f / (8.0f * x) - M_LN_2PI_F - logf(x));
 	}
 	else {
@@ -193,7 +203,7 @@ ccl_device int bsdf_principled_hair_setup(ShaderData *sd, PrincipledHairBSDF *bs
 	bsdf->v = sqr(0.726f*bsdf->v + 0.812f*sqr(bsdf->v) + 3.700f*pow20(bsdf->v));
 	bsdf->s =    (0.265f*bsdf->s + 1.194f*sqr(bsdf->s) + 5.372f*pow22(bsdf->s))*M_SQRT_PI_8_F;
 	bsdf->m0_roughness = sqr(0.726f*bsdf->m0_roughness + 0.812f*sqr(bsdf->m0_roughness) + 3.700f*pow20(bsdf->m0_roughness));
-	
+
 	/* Compute local frame, aligned to curve tangent and ray direction. */
 	float3 X = safe_normalize(sd->dPdu);
 	float3 Y = safe_normalize(cross(X, sd->I));
@@ -412,13 +422,19 @@ ccl_device int bsdf_principled_hair_sample(KernelGlobals *kg, const ShaderClosur
 
 	int p = 0;
 	for(; p < 3; p++) {
-		if(u[0].x < Ap[p].w) break;
+		if(u[0].x < Ap[p].w) {
+			break;
+		}
 		u[0].x -= Ap[p].w;
 	}
 
 	float v = bsdf->v;
-	if(p == 1) v *= 0.25f;
-	if(p >= 2) v *= 4.0f;
+	if(p == 1) {
+		v *= 0.25f;
+	}
+	if(p >= 2) {
+		v *= 4.0f;
+	}
 
 	u[1].x = max(u[1].x, 1e-5f);
 	float fac = 1.0f + v*logf(u[1].x + (1.0f - u[1].x)*expf(-2.0f/v));
diff --git a/intern/cycles/kernel/kernel_compat_opencl.h b/intern/cycles/kernel/kernel_compat_opencl.h
index 8cb4a57d5b9..3f7e264fbee 100644
--- a/intern/cycles/kernel/kernel_compat_opencl.h
+++ b/intern/cycles/kernel/kernel_compat_opencl.h
@@ -123,7 +123,7 @@
 #define fmaxf(x, y) fmax(((float)(x)), ((float)(y)))
 #define fminf(x, y) fmin(((float)(x)), ((float)(y)))
 #define fmodf(x, y) fmod((float)(x), (float)(y))
-#define sinhf(x)sinh(((float)(x)))
+#define sinhf(x) sinh(((float)(x)))
 
 #ifndef __CL_USE_NATIVE__
 #  define sinf(x) native_sin(((float)(x)))
diff --git a/intern/cycles/kernel/osl/osl_closures.cpp b/intern/cycles/kernel/osl/osl_closures.cpp
index 00c9d9198ae..e8a720ad91d 100644
--- a/intern/cycles/kernel/osl/osl_closures.cpp
+++ b/intern/cycles/kernel/osl/osl_closures.cpp
@@ -4,7 +4,7 @@
  * Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al.
  * All Rights Reserved.
  *
- * Modifications Copyright 2011, 2018, Blender Foundation.
+ * Modifications Copyright 2011-2018, Blender Foundation.
  * 
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
diff --git a/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl b/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
index 907d2f190db..1004e545c08 100644
--- a/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
+++ b/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
@@ -16,17 +16,21 @@
 
 #include "stdosl.h"
 
-color log3 (color a) {
+color log3(color a)
+{
 	return color(log(a[0]), log(a[1]), log(a[2]));
 }
 
-color sigma_from_concentration(float Eumelanin, float Pheomelanin) {
-	return Eumelanin*color(0.506, 0.841, 1.653) + Pheomelanin*color(0.343, 0.733, 1.924);
+color sigma_from_concentration(float eumelanin, float pheomelanin)
+{
+	return eumelanin*color(0.506, 0.841, 1.653) + pheomelanin*color(0.343, 0.733, 1.924);
 }
 
-color sigma_from_reflectance(color Color, float AzimuthalRoughness) {
-	float roughness_fac = (((((0.245*AzimuthalRoughness) + 5.574)*AzimuthalRoughness - 10.73)*AzimuthalRoughness + 2.532)*AzimuthalRoughness - 0.215)*AzimuthalRoughness + 5.969;
-	return log3(Color)/roughness_fac;
+color sigma_from_reflectance(color c, float azimuthal_roughness)
+{
+	float roughness_fac = (((((0.245*azimuthal_roughness) + 5.574)*azimuthal_roughness - 10.73)*azimuthal_roughness + 2.532)*azimuthal_roughness - 0.215)*azimuthal_roughness + 5.969;
+	color sigma = log3(c) / roughness_fac;
+	return sigma * sigma;
 }
 
 shader node_principled_hair_bsdf(
@@ -49,7 +53,7 @@ shader node_principled_hair_bsdf(
 
 	output closure color BSDF = 0)
 {
-	color sigma;
+	/* Get random value from curve in none is specified. */
 	float random_value = 0.0;
 
 	if (AttrRandom != "none") {
@@ -59,36 +63,44 @@ shader node_principled_hair_bsdf(
 		random_value = Random;
 	}
 
-	float factor_random_color = 1.0 + 2.0*(random_value - 0.5)*RandomColor;
+	/* Compute roughness. */
 	float factor_random_roughness = 1.0 + 2.0*(random_value - 0.5)*RandomRoughness;
 	float m0_roughness = 1.0 - clamp(Coat, 0.0, 1.0);
+	float roughness = Roughness*factor_random_roughness;
+	float radial_roughness = RadialRoughness*factor_random_roughness;
 
-	float adjusted_roughness = Roughness*factor_random_roughness;
-	float adjusted_radial_roughness = RadialRoughness*factor_random_roughness;
-	float melanin_qty = -log(max(1.0 - Melanin*factor_random_color, 0.0001));
-	float adjusted_eumelanin = melanin_qty*(1.0-MelaninRedness);
-	float adjusted_pheomelanin = melanin_qty*MelaninRedness;
+	/* Compute absorption. */
+	color sigma;
 
 	if (parametrization == "Absorption coefficient") {
 		sigma = AbsorptionCoefficient;
 	}
 	else if (parametrization == "Melanin concentration") {
-		color melanin_sigma = sigma_from_concentration(adjusted_eumelanin, adjusted_pheomelanin);
-		color tint_sigma = sigma_from_reflectance(Tint, adjusted_radial_roughness);
-		tint_sigma *= tint_sigma;
+		/* Randomize melanin. */
+		float factor_random_color = 1.0 + 2.0*(random_value - 0.5) * RandomColor;
+		float melanin = Melanin * factor_random_color;
+
+		/* Map melanin 0..inf from more perceptually linear 0..1. */
+		melanin = -log(max(1.0 - melanin, 0.0001));
+
+		/* Benedikt Bitterli's melanin ratio remapping. */
+		float eumelanin = melanin * (1.0 - MelaninRedness);
+		float pheomelanin = melanin * MelaninRedness;
+		color melanin_sigma = sigma_from_concentration(eumelanin, pheomelanin);
+
+		/* Optional tint. */
+		color tint_sigma = sigma_from_reflectance(Tint, radial_roughness);
 		sigma = melanin_sigma + tint_sigma;
 	}
 	else if (parametrization == "Direct coloring"){
-		sigma = sigma_from_reflectance(Color, adjusted_radial_roughness);
-		sigma *= sigma;
+		sigma = sigma_from_reflectance(Color, radial_roughness);
 	}
 	else {
-		// Falling back to Benedikt Bitterli's brownish hair with Tungsten (via PHEOmelanin concentration)
-		// This gives the exact amount set as default above
+		/* Fallback to brownish hair, same as defaults for melanin. */
 		sigma = sigma_from_concentration(0.0, 0.8054375);
 	}
 
 	//printf("Info: color %f, incoming eumelanin %f, incoming pheomelanin %f, incoming sigma %f, incoming color range %f, incoming normal %f, parametrization %s, resulting sigma %f, Longitudinal %f, Azimuthal %f, roughness range %f, Scale deviation %f, IOR %f\n", Color, Melanin, MelaninRedness, AbsorptionCoefficient, Normal, parametrization, sigma, RandomColor, Roughness, RadialRoughness, RandomRoughness, Offset, IOR);
 
-	BSDF = principled_hair(Normal, sigma, adjusted_roughness, adjusted_radial_roughness, m0_roughness, Offset, IOR);
+	BSDF = principled_hair(Normal, sigma, roughness, radial_roughness, m0_roughness, Offset, IOR);
 }
diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h
index 9df3a74d7be..8404fb8715d 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -16,7 +16,7 @@
 
 CCL_NAMESPACE_BEGIN
 
-/* Helper functions */
+/* Hair Melanin */
 
 ccl_device_inline float3 sigma_from_concentration(float eumelanin, float pheomelanin)
 {
@@ -26,7 +26,8 @@ ccl_device_inline float3 sigma_from_concentration(float eumelanin, float pheomel
 ccl_device_inline float3 sigma_from_reflectance(float3 color, float azimuthal_roughness)
 {
 	float roughness_fac = (((((0.245f*azimuthal_roughness) + 5.574f)*azimuthal_roughness - 10.73f)*azimuthal_roughness + 2.532f)*azimuthal_roughness - 0.215f)*azimuthal_roughness + 5.969f;
-	return log3(color) / roughness_fac;
+	float3 sigma = log3(color) / roughness_fac;
+	return sigma * sigma;
 }
 
 /* Closure Nodes */
@@ -256,7 +257,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 					float3 spec_weight = weight * specular_weight;
 
 					MicrofacetBsdf *bsdf = (MicrofacetBsdf*)bsdf_alloc(sd, sizeof(MicrofacetBsdf), spec_weight);
-					if(!bsdf){
+					if(!bsdf) {
 						break;
 					}
 
@@ -746,21 +747,12 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 			decode_node_uchar4(data_node.y, &offset_ofs, &ior_ofs, &color_ofs, &parametrization);
 			float alpha = (stack_valid(offset_ofs))? stack_load_float(stack, offset_ofs): __uint_as_float(data_node.z);
 			float ior = (stack_valid(ior_ofs))? stack_load_float(stack, ior_ofs): __uint_as_float(data_node.w);
-			float3 color = stack_load_float3(s

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list