[Bf-blender-cvs] [c33fbdb9cc6] soc-2018-hair-shader: Fix interpolation in melanin randomization

L. E. Segovia noreply at git.blender.org
Wed Jun 6 16:34:04 CEST 2018


Commit: c33fbdb9cc68bc7dd8f7e14cba9eece4d1b19e12
Author: L. E. Segovia
Date:   Wed Jun 6 14:32:59 2018 +0000
Branches: soc-2018-hair-shader
https://developer.blender.org/rBc33fbdb9cc68bc7dd8f7e14cba9eece4d1b19e12

Fix interpolation in melanin randomization

It seems lerp =/= OSL's linearstep. Will revise this later.

Ref T54796

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

M	intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
M	intern/cycles/kernel/svm/svm_closure.h

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

diff --git a/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl b/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
index e10c4b9bd9a..8bf10b1267e 100644
--- a/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
+++ b/intern/cycles/kernel/shaders/node_principled_hair_bsdf.osl
@@ -41,8 +41,8 @@ shader node_principled_hair_bsdf(
 {
 	color Sigma;
 
-	float factor_random_color = linearstep(1.0-ColorRandomization, 1.0, Random);
-	float factor_random_roughness = linearstep(1.0-RoughnessRandomization, 1.0, Random);
+	float factor_random_color = (1.0-ColorRandomization) + Random*ColorRandomization;
+	float factor_random_roughness = (1.0-RoughnessRandomization) + Random*RoughnessRandomization;
 
 	float AdjustedRoughnessU = RoughnessU*factor_random_roughness;
 	float AdjustedRoughnessV = RoughnessV*factor_random_roughness;
@@ -54,7 +54,7 @@ shader node_principled_hair_bsdf(
 		Sigma = -log3(max(AbsorptionCoefficient, 1e-5));
 	}
 	else if (parametrization == "Melanin concentration") {
-		color Melanin_Sigma = Melanin * factor_random_color * color(0.419, 0.697, 1.37) + MelaninRedness * factor_random_color * color(0.187, 0.4, 1.05);
+		color Melanin_Sigma = Melanin*factor_random_color*color(0.419, 0.697, 1.37) + MelaninRedness*factor_random_color*color(0.187, 0.4, 1.05);
 		float roughness_fac = (((((0.245*RoughnessU) + 5.574)*RoughnessU - 10.73)*RoughnessU + 2.532)*RoughnessU - 0.215)*RoughnessU + 5.969;
 		color Tint_Sigma = log3(Tint)/roughness_fac;
 		Tint_Sigma *= Tint_Sigma;
diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h
index 3501fa7ba32..70248d8eacb 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -748,8 +748,8 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 			color_randomization = clamp(color_randomization, 0.0f, 1.0f);
 			float roughness_randomization = (stack_valid(roughness_randomization_ofs)) ? stack_load_float(stack, roughness_randomization_ofs) : __uint_as_float(data_node3.w);
 
-			float factor_random_color = lerp(1.0f-color_randomization, 1.0f, random);
-			float factor_random_roughness = lerp(1.0f-roughness_randomization, 1.0f, random);
+			float factor_random_color = (1.0f-color_randomization)+random*color_randomization;
+			float factor_random_roughness = (1.0f - roughness_randomization) + random*roughness_randomization;
 
 			PrincipledHairBSDF *bsdf = (PrincipledHairBSDF*)bsdf_alloc(sd, sizeof(PrincipledHairBSDF), weight);
 			if(bsdf) {
@@ -782,7 +782,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 						float roughness_fac = (((((0.245f*param2) + 5.574f)*param2 - 10.73f)*param2 + 2.532f)*param2 - 0.215f)*param2 + 5.969f;
 						float3 tint_sigma = log3(tint)/roughness_fac;
 						tint_sigma *= tint_sigma;
-						bsdf->sigma = melanin_sigma + tint_sigma;
+						bsdf->sigma = melanin_sigma+tint_sigma;
 						break;
 					}
 					case NODE_PRINCIPLED_HAIR_REFLECTANCE: {



More information about the Bf-blender-cvs mailing list