diff options
author | Brecht Van Lommel <brecht@blender.org> | 2021-07-13 12:28:26 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2021-07-14 14:54:52 +0300 |
commit | 765406cb5115c191114753a2dbed74d53ddcb3a1 (patch) | |
tree | c1f3dc230f7ff4c745f3eb6f3240aa716994ba78 /intern/cycles/kernel/svm | |
parent | 2761679180c37ffddfeef213dd5b5b0d6290395c (diff) |
Fix T88088: Cycles and Eevee Vector Rotate node inconsistent with zero axis
Pass along the unmodified vector in this case.
Diffstat (limited to 'intern/cycles/kernel/svm')
-rw-r--r-- | intern/cycles/kernel/svm/svm_vector_rotate.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/intern/cycles/kernel/svm/svm_vector_rotate.h b/intern/cycles/kernel/svm/svm_vector_rotate.h index 79a4ec2c40e..50045752484 100644 --- a/intern/cycles/kernel/svm/svm_vector_rotate.h +++ b/intern/cycles/kernel/svm/svm_vector_rotate.h @@ -50,24 +50,29 @@ ccl_device void svm_node_vector_rotate(ShaderData *sd, } else { float3 axis; + float axis_length; switch (type) { case NODE_VECTOR_ROTATE_TYPE_AXIS_X: axis = make_float3(1.0f, 0.0f, 0.0f); + axis_length = 1.0f; break; case NODE_VECTOR_ROTATE_TYPE_AXIS_Y: axis = make_float3(0.0f, 1.0f, 0.0f); + axis_length = 1.0f; break; case NODE_VECTOR_ROTATE_TYPE_AXIS_Z: axis = make_float3(0.0f, 0.0f, 1.0f); + axis_length = 1.0f; break; default: - axis = normalize(stack_load_float3(stack, axis_stack_offset)); + axis = stack_load_float3(stack, axis_stack_offset); + axis_length = len(axis); break; } float angle = stack_load_float(stack, angle_stack_offset); angle = invert ? -angle : angle; - result = (len_squared(axis) != 0.0f) ? - rotate_around_axis(vector - center, axis, angle) + center : + result = (axis_length != 0.0f) ? + rotate_around_axis(vector - center, axis / axis_length, angle) + center : vector; } |