[Bf-blender-cvs] [f1bcaabb8ad] soc-2018-hair-shader: Add random number socket
L. E. Segovia
noreply at git.blender.org
Tue Jun 5 15:53:58 CEST 2018
Commit: f1bcaabb8ad141356aa217bd3f0b49b684a23f5b
Author: L. E. Segovia
Date: Tue Jun 5 13:53:43 2018 +0000
Branches: soc-2018-hair-shader
https://developer.blender.org/rBf1bcaabb8ad141356aa217bd3f0b49b684a23f5b
Add random number socket
This is not yet used, but I wanted to get it in place first.
Ref T54796
===================================================================
M intern/cycles/kernel/closure/bsdf_hair_principled.h
M intern/cycles/kernel/osl/osl_closures.cpp
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/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h
index 7943b64bc00..81ac68c4a9e 100644
--- a/intern/cycles/kernel/closure/bsdf_hair_principled.h
+++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h
@@ -36,6 +36,7 @@ typedef ccl_addr_space struct PrincipledHairBSDF {
float alpha;
float eta;
float m0_roughness;
+ float random;
PrincipledHairExtra *extra;
} PrincipledHairBSDF;
diff --git a/intern/cycles/kernel/osl/osl_closures.cpp b/intern/cycles/kernel/osl/osl_closures.cpp
index ee0e5533b4f..15b7dcfda9c 100644
--- a/intern/cycles/kernel/osl/osl_closures.cpp
+++ b/intern/cycles/kernel/osl/osl_closures.cpp
@@ -234,6 +234,7 @@ static ClosureParam *bsdf_principled_hair_params()
CLOSURE_FLOAT_PARAM(PrincipledHairClosure, params.m0_roughness),
CLOSURE_FLOAT_PARAM(PrincipledHairClosure, params.alpha),
CLOSURE_FLOAT_PARAM(PrincipledHairClosure, params.eta),
+ CLOSURE_FLOAT_PARAM(PrincipledHairClosure, params.random),
CLOSURE_STRING_KEYPARAM(PrincipledHairClosure, label, "label"),
CLOSURE_FINISH_PARAM(PrincipledHairClosure)
};
diff --git a/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl b/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
index d3e4f01808f..23f6d21f23c 100644
--- a/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
+++ b/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
@@ -33,6 +33,7 @@ shader node_principled_hair_bsdf(
float RoughnessV = 0.3,
float PrimaryReflectionRoughness = 1.0,
float IOR = 1.55,
+ float Random = 0.0,
output closure color BSDF = 0)
{
@@ -62,7 +63,7 @@ shader node_principled_hair_bsdf(
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);
+ //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, random value %f\n", Color, Melanin, MelaninRedness, AbsorptionCoefficient, Normal, parametrization, Sigma, RoughnessU, RoughnessV, Offset, IOR, Random);
- BSDF = principled_hair(Normal, Sigma, RoughnessU, RoughnessV, PrimaryReflectionRoughness, Offset, IOR);
+ BSDF = principled_hair(Normal, Sigma, RoughnessU, RoughnessV, PrimaryReflectionRoughness, Offset, IOR, Random);
}
diff --git a/intern/cycles/kernel/shaders/stdosl.h b/intern/cycles/kernel/shaders/stdosl.h
index 3a6343bc368..be97480a8a3 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 primary_reflection_roughness, float alpha, float eta, float random_number) 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 3f287433e8b..9ed39bf5485 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -741,8 +741,9 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
float eumelanin = (stack_valid(eumelanin_ofs)) ? stack_load_float(stack, eumelanin_ofs) : __uint_as_float(data_node2.z);
float pheomelanin = (stack_valid(pheomelanin_ofs)) ? stack_load_float(stack, pheomelanin_ofs) : __uint_as_float(data_node2.w);
- uint tint_ofs;
- decode_node_uchar4(data_node3.x, &tint_ofs, NULL, NULL, NULL);
+ uint tint_ofs, random_ofs;
+ decode_node_uchar4(data_node3.x, &tint_ofs, &random_ofs, NULL, NULL);
+ float random = (stack_valid(random_ofs)) ? stack_load_float(stack, random_ofs) : data_node3.y;
PrincipledHairBSDF *bsdf = (PrincipledHairBSDF*)bsdf_alloc(sd, sizeof(PrincipledHairBSDF), weight);
if(bsdf) {
@@ -757,6 +758,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
bsdf->m0_roughness = m0_roughness;
bsdf->alpha = alpha;
bsdf->eta = ior;
+ bsdf->random = random;
bsdf->extra = extra;
float3 color = stack_load_float3(stack, color_ofs);
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 8529b14aa3e..76bac130d1b 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -3063,6 +3063,8 @@ NODE_DEFINE(PrincipledHairBsdfNode)
SOCKET_IN_FLOAT(primary_reflection_roughness, "Primary Reflection Roughness", 1.0f);
SOCKET_IN_FLOAT(ior, "IOR", 1.55f);
+ SOCKET_IN_FLOAT(random, "Random", 0.0f);
+
SOCKET_OUT_CLOSURE(BSDF, "BSDF");
return type;
@@ -3090,6 +3092,8 @@ void PrincipledHairBsdfNode::compile(SVMCompiler& compiler)
int tint_ofs = compiler.stack_assign(input("Tint"));
int absorption_coefficient_ofs = compiler.stack_assign(input("Absorption Coefficient"));
+ ShaderInput *random_in = input("Random");
+
compiler.add_node(NODE_CLOSURE_BSDF,
compiler.encode_uchar4(closure,
compiler.stack_assign_if_linked(roughness_u_in),
@@ -3120,10 +3124,10 @@ void PrincipledHairBsdfNode::compile(SVMCompiler& compiler)
compiler.add_node(
compiler.encode_uchar4(
tint_ofs,
- SVM_STACK_INVALID,
+ compiler.stack_assign_if_linked(random_in),
SVM_STACK_INVALID,
SVM_STACK_INVALID),
- SVM_STACK_INVALID,
+ __float_as_int(random),
SVM_STACK_INVALID,
SVM_STACK_INVALID);
}
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 9c938fbe89e..e7d844e0444 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -619,6 +619,7 @@ public:
float3 normal;
float surface_mix_weight;
+ float random;
NodePrincipledHairParametrization parametrization;
};
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 81117398747..d878ef78fb4 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
@@ -42,6 +42,7 @@ static bNodeSocketTemplate sh_node_bsdf_hair_principled_in[] = {
{ 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},
+ { SOCK_FLOAT, 1, N_("Random")},
{ -1, 0, "" },
};
More information about the Bf-blender-cvs
mailing list