diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-03-29 16:03:48 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-03-29 16:03:48 +0400 |
commit | 663a750c7fe3fdba0830e3054e98f8d3959f9ea3 (patch) | |
tree | b4cd2e141b274edf58743aec4304a021f8c7e006 /intern/cycles/render/svm.cpp | |
parent | a2e4ebd36a319dc18f362b1f75863b8ee93eed7d (diff) |
Fix: cycles volume emission incorrectly enabling surface importance sampling.
Diffstat (limited to 'intern/cycles/render/svm.cpp')
-rw-r--r-- | intern/cycles/render/svm.cpp | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp index 538b1aae313..377da67b5a4 100644 --- a/intern/cycles/render/svm.cpp +++ b/intern/cycles/render/svm.cpp @@ -489,14 +489,16 @@ void SVMCompiler::generate_closure(ShaderNode *node, set<ShaderNode*>& done) stack_clear_users(node, done); stack_clear_temporary(node); - if(node->has_surface_emission()) - current_shader->has_surface_emission = true; - if(node->has_surface_transparent()) - current_shader->has_surface_transparent = true; - if(node->has_surface_bssrdf()) { - current_shader->has_surface_bssrdf = true; - if(node->has_bssrdf_bump()) - current_shader->has_bssrdf_bump = true; + if(current_type == SHADER_TYPE_SURFACE) { + if(node->has_surface_emission()) + current_shader->has_surface_emission = true; + if(node->has_surface_transparent()) + current_shader->has_surface_transparent = true; + if(node->has_surface_bssrdf()) { + current_shader->has_surface_bssrdf = true; + if(node->has_bssrdf_bump()) + current_shader->has_bssrdf_bump = true; + } } /* end node is added outside of this */ @@ -554,14 +556,16 @@ void SVMCompiler::generate_multi_closure(ShaderNode *node, set<ShaderNode*>& don mix_weight_offset = SVM_STACK_INVALID; - if(node->has_surface_emission()) - current_shader->has_surface_emission = true; - if(node->has_surface_transparent()) - current_shader->has_surface_transparent = true; - if(node->has_surface_bssrdf()) { - current_shader->has_surface_bssrdf = true; - if(node->has_bssrdf_bump()) - current_shader->has_bssrdf_bump = true; + if(current_type == SHADER_TYPE_SURFACE) { + if(node->has_surface_emission()) + current_shader->has_surface_emission = true; + if(node->has_surface_transparent()) + current_shader->has_surface_transparent = true; + if(node->has_surface_bssrdf()) { + current_shader->has_surface_bssrdf = true; + if(node->has_bssrdf_bump()) + current_shader->has_bssrdf_bump = true; + } } } |