forked from bartvdbraak/blender
Cycles: principled absorption color now has more effect at lower values.
This commit is contained in:
parent
4762c099d7
commit
8cc7f48581
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user