diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-10-13 16:11:01 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-10-13 16:11:01 +0400 |
commit | 51105bb2bd57b1a56517b30384304326b6bc75fb (patch) | |
tree | 385cc582092dc53042273f64ea9586754d4c2f8a /intern/cycles/kernel/svm/svm_geometry.h | |
parent | ee67123748c80463164278e1f295c5ae6ff728f7 (diff) |
Fix for wrong cycles tangent in some cases, was missing transform.
Diffstat (limited to 'intern/cycles/kernel/svm/svm_geometry.h')
-rw-r--r-- | intern/cycles/kernel/svm/svm_geometry.h | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/intern/cycles/kernel/svm/svm_geometry.h b/intern/cycles/kernel/svm/svm_geometry.h index 582c079fd6a..30afd6322a7 100644 --- a/intern/cycles/kernel/svm/svm_geometry.h +++ b/intern/cycles/kernel/svm/svm_geometry.h @@ -29,12 +29,18 @@ __device void svm_node_geometry(KernelGlobals *kg, ShaderData *sd, float *stack, case NODE_GEOM_N: data = sd->N; break; #ifdef __DPDU__ case NODE_GEOM_T: { - int attr_offset = find_attribute(kg, sd, ATTR_STD_TANGENT); - - if(attr_offset == ATTR_STD_NOT_FOUND) - data = normalize(sd->dPdu); + if(sd->object != ~0) { + int attr_offset = find_attribute(kg, sd, ATTR_STD_TANGENT); + + if(attr_offset != ATTR_STD_NOT_FOUND) { + data = triangle_attribute_float3(kg, sd, ATTR_ELEMENT_VERTEX, attr_offset, NULL, NULL); + object_normal_transform(kg, sd, &data); + } + else + data = normalize(sd->dPdu); + } else - data = triangle_attribute_float3(kg, sd, ATTR_ELEMENT_VERTEX, attr_offset, NULL, NULL); + data = normalize(sd->dPdu); break; } |