From 87164114a306d5dc9f609695c0c6a8e36d79673d Mon Sep 17 00:00:00 2001 From: Mai Lavelle Date: Wed, 12 Jul 2017 04:36:46 -0400 Subject: [PATCH] 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. --- intern/cycles/render/nodes.cpp | 6 ++++++ intern/cycles/render/nodes.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) 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,