     bool onDisk = radius2 <= 1;
 
     float factor;
-    vec3 hitPoint = vec3(0.), rotatedHitPoint = vec3(0.);
+    vec3 hitPoint = vec3(0.), rotatedHitPoint = vec3(0.), diffrotatedHitPoint = vec3(0.);;
 
     if (onDisk) {
         hitPoint = vec3(up1.x, up1.y, sqrt(1. - radius2));
-        rotatedHitPoint = rotate_vector_inverse(cameraDifferenceRotationQuat, hitPoint);
+        rotatedHitPoint = differential(rotate_vector_inverse(cameraDifferenceRotationQuat, hitPoint), 0);
+        diffrotatedHitPoint = differential(rotate_vector_inverse(diffcameraDifferenceRotationQuat, hitPoint), 0);
         factor = 1.;
         gl_FragDepth = 0.5 - hitPoint.z * CLIP_SCALE_NARROW;
     } else {


float intersectPlane(const vec4 quat, const vec4 vecin, bool hideBack) {
    vec3 altnormal = rotate_vector(quat, vec3(0., 0., 1.));


    vec2 difftexcoord;
    if (isdifference != NODIFFERENCE) {
        if (/*radius2 >= 1. ||*/ diffrotatedHitPoint.z <= 0.) {
            hitPoint = vec3(up1.x, up1.y, intersectPlane(diffcameraDifferenceRotationQuat, up1, onDisk));
            diffrotatedHitPoint = rotate_vector_inverse(diffcameraDifferenceRotationQuat, hitPoint);
