diff options
Diffstat (limited to 'intern/cycles/kernel/svm')
-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; } |