[Bf-blender-cvs] [98e9dfa] temp-cycles-microdisplacement: Cycles: Transform undisplaced coordinates into world space for bump shader eval

Mai Lavelle noreply at git.blender.org
Wed Aug 31 02:30:24 CEST 2016


Commit: 98e9dfa2d63410673fbeee5ac0fadf222ebe9fa1
Author: Mai Lavelle
Date:   Tue Aug 30 20:26:49 2016 -0400
Branches: temp-cycles-microdisplacement
https://developer.blender.org/rB98e9dfa2d63410673fbeee5ac0fadf222ebe9fa1

Cycles: Transform undisplaced coordinates into world space for bump shader eval

Forgot to do this, shading should be correct now for transformed objects.

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

M	intern/cycles/kernel/osl/osl_shader.cpp
M	intern/cycles/kernel/svm/svm_bump.h

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

diff --git a/intern/cycles/kernel/osl/osl_shader.cpp b/intern/cycles/kernel/osl/osl_shader.cpp
index a67f014..09d9df1 100644
--- a/intern/cycles/kernel/osl/osl_shader.cpp
+++ b/intern/cycles/kernel/osl/osl_shader.cpp
@@ -202,9 +202,13 @@ void OSLShader::eval_surface(KernelGlobals *kg, ShaderData *sd, PathState *state
 			memcpy(&sd->dP.dx, data+3, sizeof(float)*3);
 			memcpy(&sd->dP.dy, data+6, sizeof(float)*3);
 
-			memcpy(&globals->P, data, sizeof(float)*3);
-			memcpy(&globals->dPdx, data+3, sizeof(float)*3);
-			memcpy(&globals->dPdy, data+6, sizeof(float)*3);
+			object_position_transform(kg, sd, &sd->P);
+			object_position_transform(kg, sd, &sd->dP.dx);
+			object_position_transform(kg, sd, &sd->dP.dy);
+
+			globals->P = TO_VEC3(sd->P);
+			globals->dPdx = TO_VEC3(sd->dP.dx);
+			globals->dPdy = TO_VEC3(sd->dP.dy);
 
 			sd->flag |= SD_IN_BUMP_EVAL;
 		}
diff --git a/intern/cycles/kernel/svm/svm_bump.h b/intern/cycles/kernel/svm/svm_bump.h
index fde8aaf..e99afc4 100644
--- a/intern/cycles/kernel/svm/svm_bump.h
+++ b/intern/cycles/kernel/svm/svm_bump.h
@@ -34,6 +34,10 @@ ccl_device void svm_node_enter_bump_eval(KernelGlobals *kg, ShaderData *sd, floa
 
 		ccl_fetch(sd, dP).dx = dPdx;
 		ccl_fetch(sd, dP).dy = dPdy;
+
+		object_position_transform(kg, sd, &ccl_fetch(sd, P));
+		object_position_transform(kg, sd, &ccl_fetch(sd, dP).dx);
+		object_position_transform(kg, sd, &ccl_fetch(sd, dP).dy);
 	}
 
 	ccl_fetch(sd, flag) |= SD_IN_BUMP_EVAL;




More information about the Bf-blender-cvs mailing list