diff options
author | Mai Lavelle <mai.lavelle@gmail.com> | 2017-07-12 11:36:46 +0300 |
---|---|---|
committer | Mai Lavelle <mai.lavelle@gmail.com> | 2017-07-12 11:40:24 +0300 |
commit | 87164114a306d5dc9f609695c0c6a8e36d79673d (patch) | |
tree | a5933da69292dffe264a1a9853b1141343626da7 /intern | |
parent | 8603424d0ae46873a04f01288f2adbb14152383e (diff) |
Cycles: Enable SSS from Principled BSDF only when actually in use
This gives speed up for the split kernel in scenes using the principled BSDF
but without subsurface scattering.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/render/nodes.cpp | 6 | ||||
-rw-r--r-- | intern/cycles/render/nodes.h | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index 166156f7ac3..86e25df1da3 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -2337,6 +2337,12 @@ PrincipledBsdfNode::PrincipledBsdfNode() distribution_orig = NBUILTIN_CLOSURES; } +bool PrincipledBsdfNode::has_surface_bssrdf() +{ + ShaderInput *subsurface_in = input("Subsurface"); + return (subsurface_in->link != NULL || subsurface > CLOSURE_WEIGHT_CUTOFF); +} + void PrincipledBsdfNode::attributes(Shader *shader, AttributeRequestSet *attributes) { if(shader->has_surface) { diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h index c6ab47fcc84..c0271a3c8eb 100644 --- a/intern/cycles/render/nodes.h +++ b/intern/cycles/render/nodes.h @@ -374,7 +374,7 @@ public: SHADER_NODE_CLASS(PrincipledBsdfNode) bool has_spatial_varying() { return true; } - bool has_surface_bssrdf() { return true; } + bool has_surface_bssrdf(); bool has_bssrdf_bump(); void compile(SVMCompiler& compiler, ShaderInput *metallic, ShaderInput *subsurface, ShaderInput *subsurface_radius, ShaderInput *specular, ShaderInput *roughness, ShaderInput *specular_tint, ShaderInput *anisotropic, |