35 return du.dx * (f1 - f0);
44 return du.dy * (f1 - f0);
53 const bool dx =
false,
54 const bool dy =
false)
60 const int k1 = k0 + 1;
65# ifdef __RAY_DIFFERENTIALS__
67 result.dx = curve_attribute_dfdx(sd->du, f0, f1);
70 result.dy = curve_attribute_dfdy(sd->du, f0, f1);
99 const int k1 = k0 + 1;
103# ifdef __OBJECT_MOTION__
105 motion_curve_keys_linear(kg, sd->object, sd->time, k0, k1, P_curve);
114 float r = 2.0f * ((P_curve[1].
w - P_curve[0].
w) * sd->u + P_curve[0].
w);
120 const float normalized_r = r * (1.0f /
M_SQRT3_F);
144 const int k1 = k0 + 1;
162 tgN = -(-sd->wi - sd->dPdu * (
dot(sd->dPdu, -sd->wi) /
len_squared(sd->dPdu)));
187 float halfdiscroot = (p2 * p2 - 3 * p3 * p1);
194 *lower = (p0 + p1) + (p2 + p3);
198 if (*lower >= *upper) {
203 if (halfdiscroot >= 0) {
204 const float inv3p3 = (1.0f / 3.0f) / p3;
205 halfdiscroot =
sqrtf(halfdiscroot);
206 ta = (-p2 - halfdiscroot) * inv3p3;
207 tb = (-p2 + halfdiscroot) * inv3p3;
213 if (ta > 0.0f && ta < 1.0f) {
217 *extrema = p3 * t3 + p2 * t2 + p1 * ta + p0;
219 *upper =
fmaxf(*extrema, *upper);
220 *lower =
fminf(*extrema, *lower);
223 if (tb > 0.0f && tb < 1.0f) {
227 *extremb = p3 * t3 + p2 * t2 + p1 * tb + p0;
229 *upper =
fmaxf(*extremb, *upper);
230 *lower =
fminf(*extremb, *lower);
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
#define kernel_data_fetch(name, index)
#define PRIMITIVE_UNPACK_SEGMENT(type)
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define CCL_NAMESPACE_END
VecBase< float, D > normalize(VecOp< float, D >) RET
ccl_device_inline T attribute_data_fetch(KernelGlobals kg, int offset)
ccl_device_inline void object_dir_transform(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private float3 *D)
@ SD_OBJECT_TRANSFORM_APPLIED
@ ATTR_ELEMENT_CURVE_KEY_MOTION
ccl_device_inline T make_zero()
ccl_device_inline float len_squared(const float2 a)
CCL_NAMESPACE_BEGIN void curvebounds(float *lower, float *upper, float3 *p, const int dim)
static bool find_attribute(const std::string &attributes, const char *search_attribute)