diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-02-12 23:08:59 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-02-12 23:08:59 +0300 |
commit | fc99eed5be3f34fca8633b780d3637c2e45a9891 (patch) | |
tree | d4e41428d3c3b7c7cd4ec1d9f518f3e75717c8ca /intern | |
parent | b37dff923919623b1ea6dc66f9fe6dfcf8639a45 (diff) |
Fix random walk SSS issues with different base and subsurface color.
Burley SSS uses a bit of strange thing where the albedo and closure weight are
different, which makes the subsurface color act a bit like a subsurface radius
indirectly by the way the Burley SSS profile works.
This can't work for random walk SSS though, and it's not clear to me that this
is actually a good idea since it's really the subsurface radius that is supposed
to control this. For now I'll leave Burley SSS working the same to not break
backwards compatibility.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/kernel/shaders/node_principled_bsdf.osl | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_closure.h | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/intern/cycles/kernel/shaders/node_principled_bsdf.osl b/intern/cycles/kernel/shaders/node_principled_bsdf.osl index fc0a1c894da..6f54ba3a462 100644 --- a/intern/cycles/kernel/shaders/node_principled_bsdf.osl +++ b/intern/cycles/kernel/shaders/node_principled_bsdf.osl @@ -63,7 +63,7 @@ shader node_principled_bsdf( BSDF = mixed_ss_base_color * bssrdf("principled", Normal, Subsurface * SubsurfaceRadius, SubsurfaceColor, "roughness", Roughness); } else { - BSDF = mixed_ss_base_color * bssrdf("principled_random_walk", Normal, Subsurface * SubsurfaceRadius, SubsurfaceColor, "roughness", Roughness); + BSDF = mixed_ss_base_color * bssrdf("principled_random_walk", Normal, Subsurface * SubsurfaceRadius, mixed_ss_base_color, "roughness", Roughness); } } else { diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h index fa43e1b60d0..5398f36c267 100644 --- a/intern/cycles/kernel/svm/svm_closure.h +++ b/intern/cycles/kernel/svm/svm_closure.h @@ -187,7 +187,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * if(bssrdf) { bssrdf->radius = subsurface_radius * subsurface; - bssrdf->albedo = subsurface_color; + bssrdf->albedo = (subsurface_method == CLOSURE_BSSRDF_PRINCIPLED_ID)? subsurface_color: mixed_ss_base_color; bssrdf->texture_blur = 0.0f; bssrdf->sharpness = 0.0f; bssrdf->N = N; |