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 <brecht@blender.org>2021-07-13 12:28:26 +0300
committerBrecht Van Lommel <brecht@blender.org>2021-07-14 14:54:52 +0300
commit765406cb5115c191114753a2dbed74d53ddcb3a1 (patch)
treec1f3dc230f7ff4c745f3eb6f3240aa716994ba78 /intern
parent2761679180c37ffddfeef213dd5b5b0d6290395c (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')
-rw-r--r--intern/cycles/kernel/svm/svm_vector_rotate.h11
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;
}