Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-05-09 03:39:31 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-05-09 03:39:31 +0400
commitc8cbe63947f6ba05584b5dc6d298dd7301e5dbc0 (patch)
tree6a030c8fb79c0908dc4d94fe3e3cdd5b819faefa /intern
parentf33080532cbefe3837a5dec0613b1fd803ac072e (diff)
Cycles: fix issues with texture coordinates and object scale. Auto texture
space size and location were outdated often, and already computed on demand by blender internal, now do that through RNA as well.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/kernel/kernel_light.h2
-rw-r--r--intern/cycles/kernel/kernel_object.h10
-rw-r--r--intern/cycles/kernel/svm/svm_tex_coord.h6
3 files changed, 14 insertions, 4 deletions
diff --git a/intern/cycles/kernel/kernel_light.h b/intern/cycles/kernel/kernel_light.h
index c2cf293cab3..cd9557bd0bf 100644
--- a/intern/cycles/kernel/kernel_light.h
+++ b/intern/cycles/kernel/kernel_light.h
@@ -268,7 +268,7 @@ __device void triangle_light_sample(KernelGlobals *kg, int prim, int object,
Transform itfm = object_fetch_transform(kg, ls->object, time, OBJECT_INVERSE_TRANSFORM);
ls->P = transform_point(&tfm, ls->P);
- ls->Ng = transform_direction_transposed(&itfm, ls->Ng);
+ ls->Ng = normalize(transform_direction_transposed(&itfm, ls->Ng));
}
#endif
}
diff --git a/intern/cycles/kernel/kernel_object.h b/intern/cycles/kernel/kernel_object.h
index 4a3ef55e8cb..abe427d8345 100644
--- a/intern/cycles/kernel/kernel_object.h
+++ b/intern/cycles/kernel/kernel_object.h
@@ -77,6 +77,16 @@ __device_inline void object_position_transform(KernelGlobals *kg, ShaderData *sd
#endif
}
+__device_inline void object_inverse_position_transform(KernelGlobals *kg, ShaderData *sd, float3 *P)
+{
+#ifdef __MOTION__
+ *P = transform_point(&sd->ob_itfm, *P);
+#else
+ Transform tfm = object_fetch_transform(kg, sd->object, TIME_INVALID, OBJECT_INVERSE_TRANSFORM);
+ *P = transform_point(&tfm, *P);
+#endif
+}
+
__device_inline void object_inverse_normal_transform(KernelGlobals *kg, ShaderData *sd, float3 *N)
{
#ifdef __MOTION__
diff --git a/intern/cycles/kernel/svm/svm_tex_coord.h b/intern/cycles/kernel/svm/svm_tex_coord.h
index 169307574a2..aa924bcc38b 100644
--- a/intern/cycles/kernel/svm/svm_tex_coord.h
+++ b/intern/cycles/kernel/svm/svm_tex_coord.h
@@ -57,7 +57,7 @@ __device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, float *stack
case NODE_TEXCO_OBJECT: {
if(sd->object != ~0) {
data = sd->P;
- object_position_transform(kg, sd, &data);
+ object_inverse_position_transform(kg, sd, &data);
}
else
data = sd->P;
@@ -106,7 +106,7 @@ __device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, floa
case NODE_TEXCO_OBJECT: {
if(sd->object != ~0) {
data = sd->P + sd->dP.dx;
- object_position_transform(kg, sd, &data);
+ object_inverse_position_transform(kg, sd, &data);
}
else
data = sd->P + sd->dP.dx;
@@ -158,7 +158,7 @@ __device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, floa
case NODE_TEXCO_OBJECT: {
if(sd->object != ~0) {
data = sd->P + sd->dP.dy;
- object_position_transform(kg, sd, &data);
+ object_inverse_position_transform(kg, sd, &data);
}
else
data = sd->P + sd->dP.dy;