[Bf-blender-cvs] [663a750] master: Fix: cycles volume emission incorrectly enabling surface importance sampling.

Brecht Van Lommel noreply at git.blender.org
Sat Mar 29 15:33:11 CET 2014


Commit: 663a750c7fe3fdba0830e3054e98f8d3959f9ea3
Author: Brecht Van Lommel
Date:   Sat Mar 29 13:03:48 2014 +0100
https://developer.blender.org/rB663a750c7fe3fdba0830e3054e98f8d3959f9ea3

Fix: cycles volume emission incorrectly enabling surface importance sampling.

===================================================================

M	intern/cycles/render/osl.cpp
M	intern/cycles/render/svm.cpp

===================================================================

diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp
index d4ca014..b64a9e7 100644
--- a/intern/cycles/render/osl.cpp
+++ b/intern/cycles/render/osl.cpp
@@ -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
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp
index 538b1aa..377da67 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;
+			}
 		}
 	}




More information about the Bf-blender-cvs mailing list