71 const float int_scale = 256.0f;
73 (
int)(int_scale * Ng.
x), (
int)(int_scale * Ng.
y), (
int)(int_scale * Ng.
z));
79 const float origin = 1.0f / 32.0f;
80 const float float_scale = 1.0f / 65536.0f;
82 fabsf(
P.y) < origin ?
P.y + float_scale * Ng.
y : p_i.
y,
83 fabsf(
P.z) < origin ?
P.z + float_scale * Ng.
z : p_i.
z);
92 if (isect_a->
t < isect_b->
t) {
95 if (isect_a->
t > isect_b->
t) {
111 for (
uint j = 0; j < num_hits - 1; ++j) {
112 if (hits[j].t > hits[j + 1].t) {
115 hits[j] = hits[j + 1];
117 hits[j + 1] = tmp_hit;
153 const int isect_type)
195 while (attr_map.
id !=
id) {
201 attr_offset = attr_map.
offset;
216#define CURVE_SHADOW_TRANSPARENCY_CUTOFF 0.001f
219 KernelGlobals kg,
const int object,
const int prim,
const int type,
const float u)
231 const int k1 = k0 + 1;
236 return (1.0f - u) * f0 + u * f1;
243 return (
self.prim == prim) && (
self.object == object);
250 return ((
self.prim == prim) && (
self.object ==
object)) ||
251 ((
self.light_prim == prim) && (
self.light_object == object));
257 return (
self.prim == prim);
260#ifdef __SHADOW_LINKING__
274 const int isect_object)
276#ifdef __SHADOW_LINKING__
281 const uint64_t set_membership = ray_get_shadow_set_membership(kg,
self);
302 for (
int i = 0;
i < num_recorded_hits; ++
i) {
305 if (
object == isect_object && prim == isect_prim) {
unsigned long long int uint64_t
ccl_device_forceinline int intersection_get_shader_flags(KernelGlobals kg, const int prim, const int type)
ccl_device_forceinline bool intersection_skip_shadow_already_recoded(IntegratorShadowState state, const int object, const int prim, const int num_hits)
ccl_device_inline bool intersection_skip_shadow_link(KernelGlobals kg, const ccl_ray_data RaySelfPrimitives &self, const int isect_object)
ccl_device_inline void sort_intersections_and_normals(ccl_private Intersection *hits, ccl_private float3 *Ng, uint num_hits)
ccl_device_inline bool intersection_skip_self_shadow(const ccl_ray_data RaySelfPrimitives &self, const int object, const int prim)
ccl_device_inline bool intersection_skip_self(const ccl_ray_data RaySelfPrimitives &self, const int object, const int prim)
CCL_NAMESPACE_BEGIN ccl_device_inline bool intersection_ray_valid(const ccl_private Ray *ray)
ccl_device_forceinline float intersection_t_offset(const float t)
ccl_device int intersections_compare(const void *a, const void *b)
ccl_device_inline float intersection_curve_shadow_transparency(KernelGlobals kg, const int object, const int prim, const int type, const float u)
ccl_device_inline int intersection_find_attribute(KernelGlobals kg, const int object, const uint id)
ccl_device_forceinline int intersection_get_shader(KernelGlobals kg, const ccl_private Intersection *ccl_restrict isect)
ccl_device_inline float3 ray_offset(const float3 P, const float3 Ng)
ccl_device_forceinline int intersection_get_object_flags(KernelGlobals kg, const ccl_private Intersection *ccl_restrict isect)
ccl_device_forceinline int intersection_get_shader_from_isect_prim(KernelGlobals kg, const int prim, const int isect_type)
ccl_device_inline bool intersection_skip_self_local(const ccl_ray_data RaySelfPrimitives &self, const int prim)
#define kernel_assert(cond)
#define ccl_device_forceinline
#define kernel_data_fetch(name, index)
#define PRIMITIVE_UNPACK_SEGMENT(type)
#define INTEGRATOR_SHADOW_ISECT_SIZE
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define KERNEL_FEATURE_SHADOW_LINKING
#define LIGHT_LINK_MASK_ALL
#define CCL_NAMESPACE_END
@ ATTR_STD_SHADOW_TRANSPARENCY
ccl_device_inline bool isfinite_safe(const float f)
ccl_device_inline float len_squared(const float2 a)
IntegratorShadowStateCPU * IntegratorShadowState
#define INTEGRATOR_STATE_ARRAY(state, nested_struct, array_index, member)