27 const float radius = point.
w;
29 const float rd2 = 1.0f /
dot(ray_D, ray_D);
31 const float3 c0 = center - ray_P;
32 const float projC0 =
dot(c0, ray_D) * rd2;
33 const float3 perp = c0 - projC0 * ray_D;
34 const float l2 =
dot(perp, perp);
35 const float r2 = radius * radius;
40 const float td =
sqrt((r2 - l2) * rd2);
41 const float t_front = projC0 - td;
42 const bool valid_front = (ray_tmin <= t_front) & (t_front <= ray_tmax);
46 const float t_back = projC0 + td;
47 const bool valid_back = (ray_tmin <= t_back) & (t_back <= ray_tmax);
50 const bool valid_first = valid_front | valid_back;
55 *t = (valid_front) ? t_front : t_back;
80 if (!point_intersect_test(point, ray_P, ray_D, ray_tmin, ray_tmax, &isect->t)) {
85 isect->object = object;
98 sd->P = ray->P + ray->D * isect->t;
108 motion_point(kg, sd->object, sd->prim, sd->time) :
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
#define ccl_device_forceinline
#define kernel_data_fetch(name, index)
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define CCL_NAMESPACE_END
VecBase< float, D > normalize(VecOp< float, D >) RET
#define object_position_transform_auto
@ SD_OBJECT_TRANSFORM_APPLIED