[Bf-blender-cvs] [765406cb511] master: Fix T88088: Cycles and Eevee Vector Rotate node inconsistent with zero axis

Brecht Van Lommel noreply at git.blender.org
Wed Jul 14 13:55:04 CEST 2021


Commit: 765406cb5115c191114753a2dbed74d53ddcb3a1
Author: Brecht Van Lommel
Date:   Tue Jul 13 11:28:26 2021 +0200
Branches: master
https://developer.blender.org/rB765406cb5115c191114753a2dbed74d53ddcb3a1

Fix T88088: Cycles and Eevee Vector Rotate node inconsistent with zero axis

Pass along the unmodified vector in this case.

===================================================================

M	intern/cycles/kernel/svm/svm_vector_rotate.h

===================================================================

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;
     }



More information about the Bf-blender-cvs mailing list