26 return (1.0f - u -
v) * f0 + u * f1 +
v * f2;
62 const float w = 1.0f - u -
v;
63 *
P = (
w * v0 + u * v1 +
v *
v2);
170 const float3 N = (1.0f - u -
v) * n0 + u * n1 +
v * n2;
208 return du.dx * f1 + dv.dx * f2 - (du.dx + dv.dx) * f0;
219 return du.dy * f1 + dv.dy * f2 - (du.dy + dv.dy) * f0;
228 const bool dx =
false,
229 const bool dy =
false)
247 const int tri = desc.
offset + sd->prim * 3;
253 const int tri = desc.
offset + sd->prim * 3;
259#ifdef __RAY_DIFFERENTIALS__
268 result.val = sd->u * f1 + sd->v * f2 + (1.0f - sd->u - sd->v) * f0;
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
#define kernel_data_fetch(name, index)
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define CCL_NAMESPACE_END
CCL_NAMESPACE_BEGIN ccl_device_inline T triangle_interpolate(const float u, const float v, const T f0, const T f1, const T f2)
ccl_device_inline float3 triangle_normal(KernelGlobals kg, ccl_private ShaderData *sd)
ccl_device_inline T triangle_attribute_dfdy(const ccl_private differential &du, const ccl_private differential &dv, const ccl_private T &f0, const ccl_private T &f1, const ccl_private T &f2)
ccl_device_inline T triangle_attribute_dfdx(const ccl_private differential &du, const ccl_private differential &dv, const ccl_private T &f0, const ccl_private T &f1, const ccl_private T &f2)
ccl_device dual< T > triangle_attribute(KernelGlobals kg, const ccl_private ShaderData *sd, const AttributeDescriptor desc, const bool dx=false, const bool dy=false)
ccl_device_inline void triangle_dPdudv(KernelGlobals kg, const int prim, ccl_private float3 *dPdu, ccl_private float3 *dPdv)
ccl_device_inline void triangle_vertices(KernelGlobals kg, const int prim, float3 P[3])
ccl_device_inline float3 triangle_smooth_normal(KernelGlobals kg, const float3 Ng, const int prim, const float u, float v)
ccl_device_inline void triangle_vertices_and_normals(KernelGlobals kg, const int prim, float3 P[3], float3 N[3])
ccl_device_inline void triangle_point_normal(KernelGlobals kg, const int object, const int prim, const float u, const float v, ccl_private float3 *P, ccl_private float3 *Ng, ccl_private int *shader)
ccl_device_inline float3 triangle_smooth_normal_unnormalized(KernelGlobals kg, const ccl_private ShaderData *sd, const float3 Ng, const int prim, const float u, float v)
VecBase< float, D > normalize(VecOp< float, D >) RET
VecBase< float, 3 > cross(VecOp< float, 3 >, VecOp< float, 3 >) RET
ccl_device_inline T attribute_data_fetch_bytecolor(KernelGlobals, int)
ccl_device_inline T attribute_data_fetch(KernelGlobals kg, int offset)
ccl_device_inline bool object_negative_scale_applied(const int object_flag)
ccl_device_inline void object_inverse_normal_transform(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private float3 *N)
@ SD_OBJECT_TRANSFORM_APPLIED
@ ATTR_ELEMENT_CORNER_BYTE
@ ATTR_ELEMENT_VERTEX_MOTION
ccl_device_inline T make_zero()
ccl_device_inline bool is_zero(const float2 a)
ccl_device_inline float2 safe_normalize(const float2 a)