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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to