23 const float3 tmp = ray_D /
dot(ray_D, surface_Ng);
24 const float3 tmpx = ray_dP.
dx + ray_t * ray_dD.
dx;
25 const float3 tmpy = ray_dP.
dy + ray_t * ray_dD.
dy;
27 surface_dP->dx = tmpx -
dot(tmpx, surface_Ng) * tmp;
28 surface_dP->dy = tmpy -
dot(tmpy, surface_Ng) * tmp;
52 const float xn =
fabsf(Ng.
x);
53 const float yn =
fabsf(Ng.
y);
54 const float zn =
fabsf(Ng.
z);
56 if (zn < xn || zn < yn) {
57 if (yn < xn || yn < zn) {
77 float det = (dPdu.
x * dPdv.
y - dPdv.
x * dPdu.
y);
83 du->dx = (dP.
dx.
x * dPdv.
y - dP.
dx.
y * dPdv.
x) * det;
84 dv->dx = (dP.
dx.
y * dPdu.
x - dP.
dx.
x * dPdu.
y) * det;
86 du->dy = (dP.
dy.
x * dPdv.
y - dP.
dy.
y * dPdv.
x) * det;
87 dv->dy = (dP.
dy.
y * dPdu.
x - dP.
dy.
x * dPdu.
y) * det;
130 return 0.5f * (
len(
D.dx) +
len(
D.dy));
143 return ray_dP + ray_t * ray_dD;
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
#define ccl_device_forceinline
#define CCL_NAMESPACE_END
ccl_device_forceinline float differential_make_compact(const float dD)
ccl_device_forceinline float differential_transfer_compact(const float ray_dP, const float3, const float ray_dD, const float ray_t)
ccl_device void differential_dudv(ccl_private differential *du, ccl_private differential *dv, float3 dPdu, float3 dPdv, differential3 dP, const float3 Ng)
ccl_device_forceinline float differential_incoming_compact(const float dD)
ccl_device differential differential_zero()
ccl_device void differential_dudv_compact(ccl_private differential *du, ccl_private differential *dv, const float3 dPdu, const float3 dPdv, const float dP, const float3 Ng)
ccl_device differential3 differential3_zero()
ccl_device_forceinline differential3 differential_from_compact(const float3 D, const float dD)
CCL_NAMESPACE_BEGIN ccl_device void differential_transfer(ccl_private differential3 *surface_dP, const differential3 ray_dP, const float3 ray_D, const differential3 ray_dD, const float3 surface_Ng, const float ray_t)
ccl_device_forceinline float differential_zero_compact()
ccl_device void differential_incoming(ccl_private differential3 *dI, const differential3 dD)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
ccl_device_inline void make_orthonormals(const float3 N, ccl_private float3 *a, ccl_private float3 *b)