forked from bartvdbraak/blender
Fix: cycles volume emission incorrectly enabling surface importance sampling.
This commit is contained in:
parent
a2e4ebd36a
commit
663a750c7f
@ -543,7 +543,7 @@ void OSLCompiler::add(ShaderNode *node, const char *name, bool isfilepath)
|
||||
/* test if we shader contains specific closures */
|
||||
OSLShaderInfo *info = ((OSLShaderManager*)manager)->shader_loaded_info(name);
|
||||
|
||||
if(info) {
|
||||
if(info && current_type == SHADER_TYPE_SURFACE) {
|
||||
if(info->has_surface_emission)
|
||||
current_shader->has_surface_emission = true;
|
||||
if(info->has_surface_transparent)
|
||||
@ -708,14 +708,16 @@ void OSLCompiler::generate_nodes(const set<ShaderNode*>& nodes)
|
||||
node->compile(*this);
|
||||
done.insert(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;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user