Commit: b891aa81094707c36504b28b40ace7996401be3c
Author: L. E. Segovia
Date: Mon Jun 4 20:50:42 2018 +0000
Branches: soc-2018-hair-shader
https://developer.blender.org/rBb891aa81094707c36504b28b40ace7996401be3c
Use Benedikt Bitterli's and PBRT's sane defaults
This should give brownish hair, implemented with pheomelanin.
Defaults:
- Color: Blender's default gray
- Melanin: Eumelanin 0, Pheomelanin 1.3
- Absorption coefficient: 1.3*d'Eon's pheomelanin mapping (brown hair)
- Offset: 2ยบ
- Roughness: 0.3 in both directions
- Primary Reflection Roughness: 1.0 (fully enabled)
- IOR: 1.55
Ref T54796
===================================================================
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 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 6831c6e3d2a..17bb43b22a6 100644
--- a/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
+++ b/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
@@ -22,14 +22,14 @@ color log3 (color a) {
shader node_principled_hair_bsdf(
color Color = 0.8,
- float Melanin = 0.0,
+ float Melanin = 1.3,
float MelaninRedness = 0.0,
- color AbsorptionCoefficient = 0.0,
+ color AbsorptionCoefficient = color(0.245531, 0.52, 1.365),
normal Normal = Ng,
string parametrization = "Absorption coefficient",
- float Offset = 0,
- float RoughnessU = 0.2,
- float RoughnessV = 0.2,
+ float Offset = radians(2),
+ float RoughnessU = 0.3,
+ float RoughnessV = 0.3,
float PrimaryReflectionRoughness = 1.0,
float IOR = 1.55,
@@ -46,11 +46,16 @@ shader node_principled_hair_bsdf(
else if (parametrization == "Melanin concentration") {
Sigma = Melanin*color(0.419, 0.697, 1.37) +
MelaninRedness*color(0.187, 0.4, 1.05);
}
- else {
+ else if (parametrization == "Direct coloring"){
float roughness_fac = (((((0.245*RoughnessU) +
5.574)*RoughnessU - 10.73)*RoughnessU + 2.532)*RoughnessU - 0.215)*RoughnessU +
5.969;
Sigma = log3(Color)/roughness_fac;
Sigma *= Sigma;
}
+ else {
+ // Falling back to Benedikt Bitterli's brownish hair with
Tungsten (via PHEOmelanin concentration)
+ // This gives the exact amount set as default above
+ Sigma = 0.0*color(0.419, 0.697, 1.37) + 1.3*color(0.187, 0.4,
1.05);
+ }
//printf("Info: color %f, incoming eumelanin %f, incoming pheomelanin
%f, incoming sigma %f, incoming normal %f, parametrization %s, resulting sigma
%f, Longitudinal %f, Azimuthal %f, Scale deviation %f, IOR %f\n", Color,
Melanin, MelaninRedness, AbsorptionCoefficient, Normal, parametrization, Sigma,
RoughnessU, RoughnessV, Offset, IOR);
diff --git a/intern/cycles/kernel/svm/svm_closure.h
b/intern/cycles/kernel/svm/svm_closure.h
index 7da0b3bee26..bf7b96bc7e7 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -767,15 +767,18 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg,
ShaderData *sd, float *
case
NODE_PRINCIPLED_HAIR_PIGMENT_CONCENTRATION:
bsdf->sigma =
eumelanin*make_float3(0.419f, 0.697f, 1.37f) + pheomelanin*make_float3(0.187f,
0.4f, 1.05f);
break;
- default:
- kernel_assert(!"Invalid
Principled Hair parametrization!");
- //fallthrough
case NODE_PRINCIPLED_HAIR_REFLECTANCE: {
float roughness_fac =
(((((0.245f*param2) + 5.574f)*param2 - 10.73f)*param2 + 2.532f)*param2 -
0.215f)*param2 + 5.969f;
bsdf->sigma =
log3(color)/roughness_fac;
bsdf->sigma *= bsdf->sigma;
break;
}
+ default: {
+ kernel_assert(!"Invalid
Principled Hair parametrization!");
+ // Falling back to Benedikt
Bitterli's brownish hair with Tungsten (via PHEOmelanin concentration)
+ bsdf->sigma =
0.0f*make_float3(0.419f, 0.697f, 1.37f) + 1.3f*make_float3(0.187f, 0.4f, 1.05f);
+ break;
+ }
}
sd->flag |= bsdf_principled_hair_setup(sd,
bsdf);
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 2dff177e7d4..25141bea38d 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -3043,9 +3043,9 @@ NODE_DEFINE(PrincipledHairBsdfNode)
NodeType* type = NodeType::add("principled_hair_bsdf", create,
NodeType::SHADER);
SOCKET_IN_COLOR(color, "Color", make_float3(0.8f, 0.8f, 0.8f));
- SOCKET_IN_FLOAT(eumelanin, "Melanin", 0.0f);
+ SOCKET_IN_FLOAT(eumelanin, "Melanin", 1.3f);
SOCKET_IN_FLOAT(pheomelanin, "Melanin Redness", 0.0f);
- SOCKET_IN_VECTOR(absorption_coefficient, "Absorption Coefficient",
make_float3(0.0f, 0.0f, 0.0f), SocketType::VECTOR);
+ SOCKET_IN_VECTOR(absorption_coefficient, "Absorption Coefficient",
1.3f*make_float3(0.187f, 0.4f, 1.05f), SocketType::VECTOR);
SOCKET_IN_NORMAL(normal, "Normal", make_float3(0.0f, 0.0f, 0.0f),
SocketType::LINK_NORMAL);
SOCKET_IN_FLOAT(surface_mix_weight, "SurfaceMixWeight", 0.0f,
SocketType::SVM_INTERNAL);
@@ -3056,9 +3056,9 @@ NODE_DEFINE(PrincipledHairBsdfNode)
parametrization_enum.insert("Melanin concentration",
NODE_PRINCIPLED_HAIR_PIGMENT_CONCENTRATION);
SOCKET_ENUM(parametrization, "Parametrization", parametrization_enum,
NODE_PRINCIPLED_HAIR_REFLECTANCE);
- SOCKET_IN_FLOAT(offset, "Offset", 0.0f);
- SOCKET_IN_FLOAT(roughness_u, "RoughnessU", 0.2f);
- SOCKET_IN_FLOAT(roughness_v, "RoughnessV", 0.2f);
+ SOCKET_IN_FLOAT(offset, "Offset", 2.f*M_PI/180.f);
+ SOCKET_IN_FLOAT(roughness_u, "RoughnessU", 0.3f);
+ SOCKET_IN_FLOAT(roughness_v, "RoughnessV", 0.3f);
SOCKET_IN_FLOAT(primary_reflection_roughness, "Primary Reflection
Roughness", 1.0f);
SOCKET_IN_FLOAT(ior, "IOR", 1.55f);
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 8821326c90c..be3c67a5d26 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
@@ -31,12 +31,14 @@
static bNodeSocketTemplate sh_node_bsdf_hair_principled_in[] = {
{ SOCK_RGBA, 1, N_("Color"),
0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
- { SOCK_FLOAT, 1, N_("Melanin"),
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f, PROP_FACTOR},
- { SOCK_FLOAT, 1, N_("Melanin Redness"),
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f, PROP_FACTOR},
- { SOCK_VECTOR, 1, N_("Absorption Coefficient"), 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 1000.0f, PROP_FACTOR},
- { SOCK_FLOAT, 1, N_("Offset"),
0.0f, 0.0f, 0.0f, 0.0f, -M_PI_2, M_PI_2, PROP_ANGLE},
- { SOCK_FLOAT, 1, N_("RoughnessU"),
0.2f, 0.2f, 0.2f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
- { SOCK_FLOAT, 1, N_("RoughnessV"),
0.2f, 0.2f, 0.2f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
+ { SOCK_FLOAT, 1, N_("Melanin"),
1.3f, 0.0f, 0.0f, 0.0f, 0.0f, 10.0f},
+ { SOCK_FLOAT, 1, N_("Melanin Redness"),
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 10.0f},
+ // Benedikt Bitterli's default brownish hair with PHEOmelanin
+ // The absorption coefficient below is 1.3f * pheomelanin mapping
+ { SOCK_VECTOR, 1, N_("Absorption Coefficient"),
0.245531f, 0.52f, 1.365f, 0.0f, 0.0f, 1000.0f},
+ { SOCK_FLOAT, 1, N_("Offset"),
2.f*M_PI/180.f, 0.0f, 0.0f, 0.0f, -M_PI_2, M_PI_2, PROP_ANGLE},
+ { SOCK_FLOAT, 1, N_("RoughnessU"),
0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
+ { SOCK_FLOAT, 1, N_("RoughnessV"),
0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
{ SOCK_FLOAT, 1, N_("Primary Reflection Roughness"), 1.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},
{ -1, 0, "" },
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs