[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