[Bf-blender-cvs] [ed27553dc0e] soc-2018-hair-shader: Fix: Undercoat Roughness -> Coat

L. E. Segovia noreply at git.blender.org
Mon Jul 9 16:11:05 CEST 2018


Commit: ed27553dc0e6ed5dc6292d97f12dd3fd383cedc9
Author: L. E. Segovia
Date:   Mon Jul 9 14:07:04 2018 +0000
Branches: soc-2018-hair-shader
https://developer.blender.org/rBed27553dc0e6ed5dc6292d97f12dd3fd383cedc9

Fix: Undercoat Roughness -> Coat

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

M	intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
M	intern/cycles/kernel/shaders/stdosl.h
M	intern/cycles/kernel/svm/svm_closure.h
M	intern/cycles/render/nodes.cpp
M	intern/cycles/render/nodes.h
M	source/blender/nodes/shader/nodes/node_shader_bsdf_hair_principled.c

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

diff --git a/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl b/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
index 05fbba1747a..a4709702496 100644
--- a/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
+++ b/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
@@ -33,7 +33,7 @@ shader node_principled_hair_bsdf(
 	float Roughness = 0.3,
 	float RadialRoughness = 0.3,
 	float RandomRoughness = 0.0,
-	float UndercoatRoughness = 1.0,
+	float Coat = 0.0,
 	float IOR = 1.55,
 	string AttrRandom = "none",
 	float Random = 0.0,
@@ -53,6 +53,7 @@ shader node_principled_hair_bsdf(
 
 	float factor_random_color = 1.0 + 2.0*(random_value - 0.5)*RandomColor;
 	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 adjusted_roughness = Roughness*factor_random_roughness;
 	float adjusted_radial_roughness = RadialRoughness*factor_random_roughness;
@@ -82,5 +83,5 @@ shader node_principled_hair_bsdf(
 
 	//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, UndercoatRoughness, Offset, IOR);
+	BSDF = principled_hair(Normal, sigma, adjusted_roughness, adjusted_radial_roughness, m0_roughness, Offset, IOR);
 }
diff --git a/intern/cycles/kernel/shaders/stdosl.h b/intern/cycles/kernel/shaders/stdosl.h
index 2ba74edae55..df9c2010872 100644
--- a/intern/cycles/kernel/shaders/stdosl.h
+++ b/intern/cycles/kernel/shaders/stdosl.h
@@ -554,7 +554,7 @@ closure color bssrdf(string method, normal N, vector radius, color albedo) BUILT
 // Hair
 closure color hair_reflection(normal N, float roughnessu, float roughnessv, vector T, float offset) BUILTIN;
 closure color hair_transmission(normal N, float roughnessu, float roughnessv, vector T, float offset) BUILTIN;
-closure color principled_hair(normal N, color sigma, float roughnessu, float roughnessv, float primary_reflection_roughness, float alpha, float eta) BUILTIN;
+closure color principled_hair(normal N, color sigma, float roughnessu, float roughnessv, float coat, float alpha, float eta) BUILTIN;
 
 // Volume
 closure color henyey_greenstein(float g) BUILTIN;
diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h
index 18a36c53c31..c4f27bb5232 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -735,9 +735,9 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 			float ior = (stack_valid(ior_ofs))? stack_load_float(stack, ior_ofs): __uint_as_float(data_node.w);
 			float3 color = stack_load_float3(stack, color_ofs);
 
-			uint primary_reflection_roughness_ofs, melanin_qty_ofs, melanin_ratio_ofs, absorption_coefficient_ofs;
-			decode_node_uchar4(data_node2.x, &primary_reflection_roughness_ofs, &melanin_qty_ofs, &melanin_ratio_ofs, &absorption_coefficient_ofs);
-			float m0_roughness = (stack_valid(primary_reflection_roughness_ofs))? stack_load_float(stack, primary_reflection_roughness_ofs): __uint_as_float(data_node2.y);
+			uint coat_ofs, melanin_qty_ofs, melanin_ratio_ofs, absorption_coefficient_ofs;
+			decode_node_uchar4(data_node2.x, &coat_ofs, &melanin_qty_ofs, &melanin_ratio_ofs, &absorption_coefficient_ofs);
+			float coat = (stack_valid(coat_ofs))? stack_load_float(stack, coat_ofs): __uint_as_float(data_node2.y);
 			float melanin_qty = (stack_valid(melanin_qty_ofs)) ? stack_load_float(stack, melanin_qty_ofs) : __uint_as_float(data_node2.z);
 			float melanin_ratio = (stack_valid(melanin_ratio_ofs)) ? stack_load_float(stack, melanin_ratio_ofs) : __uint_as_float(data_node2.w);
 			float3 absorption_coefficient = stack_load_float3(stack, absorption_coefficient_ofs);
@@ -771,6 +771,9 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 				param1 *= factor_random_roughness;
 				param2 *= factor_random_roughness;
 
+				// Remap Coat value to [0, 100]% of Roughness.
+				float m0_roughness = 1.0f - clamp(coat, 0.0f, 1.0f);
+
 				bsdf->N = N;
 				bsdf->v = param1;
 				bsdf->s = param2;
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index b924660b786..b2deb4bd2ab 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -3088,7 +3088,7 @@ NODE_DEFINE(PrincipledHairBsdfNode)
 	SOCKET_IN_FLOAT(roughness_u, "Roughness", 0.3f);
 	SOCKET_IN_FLOAT(roughness_v, "Radial Roughness", 0.3f);
 	SOCKET_IN_FLOAT(random_roughness, "Random Roughness", 0.0f);
-	SOCKET_IN_FLOAT(primary_reflection_roughness, "Undercoat Roughness", 1.0f);
+	SOCKET_IN_FLOAT(coat, "Coat", 0.0f);
 	SOCKET_IN_FLOAT(ior, "IOR", 1.55f);
 
 	SOCKET_IN_FLOAT(random, "Random", 0.0f);
@@ -3123,7 +3123,7 @@ void PrincipledHairBsdfNode::compile(SVMCompiler& compiler)
 	ShaderInput *roughness_v_in = input("Radial Roughness");
 	ShaderInput *random_roughness_in = input("Random Roughness");
 	ShaderInput *offset_in = input("Offset");
-	ShaderInput *primary_reflection_roughness_in = input("Undercoat Roughness");
+	ShaderInput *coat_in = input("Coat");
 	ShaderInput *ior_in = input("IOR");
 	ShaderInput *melanin_in =  input("Melanin");
 	ShaderInput *melanin_redness_in = input("Melanin Redness");
@@ -3158,11 +3158,11 @@ void PrincipledHairBsdfNode::compile(SVMCompiler& compiler)
 
 	compiler.add_node(
 		compiler.encode_uchar4(
-			compiler.stack_assign_if_linked(primary_reflection_roughness_in),
+			compiler.stack_assign_if_linked(coat_in),
 			compiler.stack_assign_if_linked(melanin_in),
 			compiler.stack_assign_if_linked(melanin_redness_in),
 			absorption_coefficient_ofs),
-		__float_as_uint(primary_reflection_roughness),
+		__float_as_uint(coat),
 		__float_as_uint(melanin),
 		__float_as_uint(melanin_redness));
 
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index d2f8f96e005..de9e66f4326 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -619,7 +619,7 @@ public:
 	/* Randomization factor for roughnesses. */
 	float random_roughness;
 	/* Longitudinal roughness factor for only the diffuse bounce (shiny undercoat). */
-	float primary_reflection_roughness;
+	float coat;
 	/* Index of reflection. */
 	float ior;
 	/* Cuticle tilt angle. */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_principled.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_principled.c
index 0f8444a6178..1b2a86c0a4e 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_principled.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_principled.c
@@ -40,7 +40,7 @@ static bNodeSocketTemplate sh_node_bsdf_hair_principled_in[] = {
 	{	SOCK_VECTOR,	1, N_("Absorption Coefficient"),	0.245531f, 0.52f, 1.365f, 0.0f, 0.0f, 1000.0f},
 	{	SOCK_FLOAT,		1, N_("Roughness"),					0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
 	{	SOCK_FLOAT,		1, N_("Radial Roughness"),			0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
-	{	SOCK_FLOAT,		1, N_("Undercoat Roughness"),		1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
+	{	SOCK_FLOAT,		1, N_("Coat"),						0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
 	{	SOCK_FLOAT,		1, N_("IOR"),						1.55f, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f},
 	{	SOCK_FLOAT,		1, N_("Offset"),					2.f*((float)M_PI)/180.f, 0.0f, 0.0f, 0.0f, -M_PI_2, M_PI_2, PROP_ANGLE},
 	{	SOCK_FLOAT, 	1, N_("Random Color"),		0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},



More information about the Bf-blender-cvs mailing list