[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