[Bf-blender-cvs] [8c227ad] master: Fix T41783: Cycles baking ignores displacement

Dalai Felinto noreply at git.blender.org
Tue Nov 11 21:22:26 CET 2014


Commit: 8c227adb8cf880a13081eac06f4c79c108e7bb5b
Author: Dalai Felinto
Date:   Tue Nov 11 18:21:56 2014 -0200
Branches: master
https://developer.blender.org/rB8c227adb8cf880a13081eac06f4c79c108e7bb5b

Fix T41783: Cycles baking ignores displacement

Create unique flag for output shaders with displacement data and use it
to calculate transformed normal. Implementation suggested by Brecht Van
Lommel.

Reviewers: brecht

Differential Revision: https://developer.blender.org/D890

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

M	intern/cycles/kernel/kernel_bake.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/render/shader.cpp

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

diff --git a/intern/cycles/kernel/kernel_bake.h b/intern/cycles/kernel/kernel_bake.h
index 96be065..e80bfb3 100644
--- a/intern/cycles/kernel/kernel_bake.h
+++ b/intern/cycles/kernel/kernel_bake.h
@@ -253,6 +253,10 @@ ccl_device void kernel_bake_evaluate(KernelGlobals *kg, ccl_global uint4 *input,
 		/* data passes */
 		case SHADER_EVAL_NORMAL:
 		{
+			if ((sd.flag & SD_HAS_BUMP)) {
+				shader_eval_surface(kg, &sd, 0.f, 0, SHADER_CONTEXT_MAIN);
+			}
+
 			/* compression: normal = (2 * color) - 1 */
 			out = sd.N * 0.5f + make_float3(0.5f, 0.5f, 0.5f);
 			break;
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index a7d269a..65297ec 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -617,19 +617,20 @@ enum ShaderDataFlag {
 	SD_VOLUME_EQUIANGULAR     = (1 << 17),  /* use equiangular sampling */
 	SD_VOLUME_MIS             = (1 << 18),  /* use multiple importance sampling */
 	SD_VOLUME_CUBIC           = (1 << 19),  /* use cubic interpolation for voxels */
+	SD_HAS_BUMP               = (1 << 20),  /* has data connected to the displacement input */
 
 	SD_SHADER_FLAGS = (SD_USE_MIS|SD_HAS_TRANSPARENT_SHADOW|SD_HAS_VOLUME|
 	                   SD_HAS_ONLY_VOLUME|SD_HETEROGENEOUS_VOLUME|
 	                   SD_HAS_BSSRDF_BUMP|SD_VOLUME_EQUIANGULAR|SD_VOLUME_MIS|
-	                   SD_VOLUME_CUBIC),
+	                   SD_VOLUME_CUBIC | SD_HAS_BUMP),
 
 	/* object flags */
-	SD_HOLDOUT_MASK             = (1 << 20),  /* holdout for camera rays */
-	SD_OBJECT_MOTION            = (1 << 21),  /* has object motion blur */
-	SD_TRANSFORM_APPLIED        = (1 << 22),  /* vertices have transform applied */
-	SD_NEGATIVE_SCALE_APPLIED   = (1 << 23),  /* vertices have negative scale applied */
-	SD_OBJECT_HAS_VOLUME        = (1 << 24),  /* object has a volume shader */
-	SD_OBJECT_INTERSECTS_VOLUME = (1 << 25),  /* object intersects AABB of an object with volume shader */
+	SD_HOLDOUT_MASK             = (1 << 21),  /* holdout for camera rays */
+	SD_OBJECT_MOTION            = (1 << 22),  /* has object motion blur */
+	SD_TRANSFORM_APPLIED        = (1 << 23),  /* vertices have transform applied */
+	SD_NEGATIVE_SCALE_APPLIED   = (1 << 24),  /* vertices have negative scale applied */
+	SD_OBJECT_HAS_VOLUME        = (1 << 25),  /* object has a volume shader */
+	SD_OBJECT_INTERSECTS_VOLUME = (1 << 26),  /* object intersects AABB of an object with volume shader */
 
 	SD_OBJECT_FLAGS = (SD_HOLDOUT_MASK|SD_OBJECT_MOTION|SD_TRANSFORM_APPLIED|
 	                   SD_NEGATIVE_SCALE_APPLIED|SD_OBJECT_HAS_VOLUME|
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index 2a3969b..5c30d19 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -359,6 +359,8 @@ void ShaderManager::device_update_common(Device *device, DeviceScene *dscene, Sc
 			flag |= SD_VOLUME_MIS;
 		if(shader->volume_interpolation_method == VOLUME_INTERPOLATION_CUBIC)
 			flag |= SD_VOLUME_CUBIC;
+		if(shader->graph_bump)
+			flag |= SD_HAS_BUMP;
 
 		/* regular shader */
 		shader_flag[i++] = flag;




More information about the Bf-blender-cvs mailing list