18template<u
int node_feature_mask>
26 uint bump_state_offset;
31#ifdef __RAY_DIFFERENTIALS__
38 uint use_object_space;
55 if (use_object_space) {
77 const float det =
dot(dP.
dx, Rx);
78 const float3 surfgrad = (h_x - h_c) * Rx + (h_y - h_c) * Ry;
80 const float absdet =
fabsf(det);
89 strength =
max(strength, 0.0f);
99 scale *
signf(det) * surfgrad);
101 normal_out = normal_in;
104 normal_out =
normalize(strength * normal_out + (1.0f - strength) * normal_in);
107 if (use_object_space) {
123template<u
int node_feature_mask>
126 const uint fac_offset)
135template<u
int node_feature_mask>
144 uint midlevel_offset;
148 node.
y, &height_offset, &midlevel_offset, &scale_offset, &normal_offset);
155 const uint space = node.
w;
162 dP *= (height - midlevel) * scale;
167 dP *= (height - midlevel) * scale;
177template<u
int node_feature_mask>
186 uint midlevel_offset;
188 uint displacement_offset;
190 node.
y, &vector_offset, &midlevel_offset, &scale_offset, &displacement_offset);
194 const uint space = data_node.
x;
222 dP = tangent * dP.
x + normal * dP.
y + bitangent * dP.
z;
MINLINE float signf(float f)
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
ccl_device_inline float stack_load_float(const ccl_private float *stack, const uint a)
ccl_device_inline uint4 read_node(KernelGlobals kg, ccl_private int *const offset)
ccl_device_inline void stack_store_float3(ccl_private float *stack, const uint a, const float3 f)
ccl_device_forceinline void svm_unpack_node_uchar2(const uint i, ccl_private uint *x, ccl_private uint *y)
ccl_device_forceinline void svm_unpack_node_uchar4(const uint i, ccl_private uint *x, ccl_private uint *y, ccl_private uint *z, ccl_private uint *w)
ccl_device_inline bool stack_valid(const uint a)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(const ccl_private float *stack, const uint a)
#define IF_KERNEL_NODES_FEATURE(feature)
const ThreadKernelGlobalsCPU * KernelGlobals
#define SVM_STACK_INVALID
#define ccl_device_noinline
#define CCL_NAMESPACE_END
ccl_device_forceinline differential3 differential_from_compact(const float3 D, const float dD)
ccl_device void svm_node_set_displacement(ccl_private ShaderData *sd, ccl_private float *stack, const uint fac_offset)
ccl_device_noinline int svm_node_vector_displacement(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node, int offset)
CCL_NAMESPACE_BEGIN ccl_device_noinline int svm_node_set_bump(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node, int offset)
ccl_device_noinline void svm_node_displacement(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, const uint4 node)
VecBase< float, D > normalize(VecOp< float, D >) RET
VecBase< float, 3 > cross(VecOp< float, 3 >, VecOp< float, 3 >) RET
CCL_NAMESPACE_BEGIN ccl_device float invert(const float color, const float factor)
ccl_device_inline void object_dir_transform(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private float3 *D)
ccl_device_inline void object_normal_transform(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private float3 *N)
ccl_device_inline void object_inverse_dir_transform(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private float3 *D)
ccl_device_inline void object_inverse_normal_transform(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private float3 *N)
@ NODE_NORMAL_MAP_TANGENT
ccl_device_inline bool is_zero(const float2 a)
ccl_device_inline float2 safe_normalize(const float2 a)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
CCL_NAMESPACE_BEGIN ccl_device_forceinline dual< T > primitive_surface_attribute(KernelGlobals kg, const ccl_private ShaderData *sd, const AttributeDescriptor desc, const bool dx=false, const bool dy=false)
static bool find_attribute(const std::string &attributes, const char *search_attribute)