[Bf-blender-cvs] [8cc7f48581d] master: Cycles: principled absorption color now has more effect at lower values.
Brecht Van Lommel
noreply at git.blender.org
Wed Feb 28 21:34:50 CET 2018
Commit: 8cc7f48581d5702925b6bb9c53dee74c5c2742a4
Author: Brecht Van Lommel
Date: Wed Feb 28 04:36:55 2018 +0100
Branches: master
https://developer.blender.org/rB8cc7f48581d5702925b6bb9c53dee74c5c2742a4
Cycles: principled absorption color now has more effect at lower values.
===================================================================
M intern/cycles/kernel/shaders/node_principled_volume.osl
M intern/cycles/kernel/svm/svm_closure.h
M intern/cycles/util/util_math_float3.h
===================================================================
diff --git a/intern/cycles/kernel/shaders/node_principled_volume.osl b/intern/cycles/kernel/shaders/node_principled_volume.osl
index 609fb95866d..ea8d6ab12c5 100644
--- a/intern/cycles/kernel/shaders/node_principled_volume.osl
+++ b/intern/cycles/kernel/shaders/node_principled_volume.osl
@@ -51,7 +51,8 @@ shader node_principled_volume(
/* Add scattering and absorption closures. */
color scatter_coeff = scatter_color;
- color absorption_coeff = max(1.0 - scatter_color, 0.0) * max(1.0 - AbsorptionColor, 0.0);
+ color absorption_color = sqrt(max(AbsorptionColor, 0.0));
+ color absorption_coeff = max(1.0 - scatter_color, 0.0) * max(1.0 - absorption_color, 0.0);
Volume = scatter_coeff * density * henyey_greenstein(Anisotropy) +
absorption_coeff * density * absorption();
}
diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h
index 819b256bde0..a54095ed127 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -893,7 +893,7 @@ ccl_device void svm_node_principled_volume(KernelGlobals *kg, ShaderData *sd, fl
/* Add extinction weight. */
float3 zero = make_float3(0.0f, 0.0f, 0.0f);
float3 one = make_float3(1.0f, 1.0f, 1.0f);
- float3 absorption_color = stack_load_float3(stack, absorption_color_offset);
+ float3 absorption_color = max(sqrt(stack_load_float3(stack, absorption_color_offset)), zero);
float3 absorption = max(one - color, zero) * max(one - absorption_color, zero);
volume_extinction_setup(sd, (color + absorption) * density);
}
diff --git a/intern/cycles/util/util_math_float3.h b/intern/cycles/util/util_math_float3.h
index e0a89b539b0..a0a62ae95df 100644
--- a/intern/cycles/util/util_math_float3.h
+++ b/intern/cycles/util/util_math_float3.h
@@ -57,6 +57,7 @@ ccl_device_inline float3 clamp(const float3& a, const float3& mn, const float3&
ccl_device_inline float3 fabs(const float3& a);
ccl_device_inline float3 mix(const float3& a, const float3& b, float t);
ccl_device_inline float3 rcp(const float3& a);
+ccl_device_inline float3 sqrt(const float3& a);
#endif /* !__KERNEL_OPENCL__ */
ccl_device_inline float min3(float3 a);
@@ -270,6 +271,15 @@ ccl_device_inline float3 fabs(const float3& a)
#endif
}
+ccl_device_inline float3 sqrt(const float3& a)
+{
+#ifdef __KERNEL_SSE__
+ return float3(_mm_sqrt_ps(a));
+#else
+ return make_float3(sqrtf(a.x), sqrtf(a.y), sqrtf(a.z));
+#endif
+}
+
ccl_device_inline float3 mix(const float3& a, const float3& b, float t)
{
return a + t*(b - a);
More information about the Bf-blender-cvs
mailing list