9#if BVH_FEATURE(BVH_HAIR)
10# define NODE_INTERSECT bvh_node_intersect
12# define NODE_INTERSECT bvh_aligned_node_intersect
33 const uint visibility,
55 float tmin = ray->tmin;
62 const float tmax = ray->tmax;
63 float tmax_hits = tmax;
67 *r_num_recorded_hits = 0;
75 int node_addr_child1, traverse_mask;
94 if (traverse_mask == 3) {
96 bool is_closest_child1 = (dist[1] < dist[0]);
97 if (is_closest_child1) {
99 node_addr = node_addr_child1;
100 node_addr_child1 = tmp;
109 if (traverse_mask == 2) {
110 node_addr = node_addr_child1;
112 else if (traverse_mask == 0) {
125 if (prim_addr >= 0) {
134 for (; prim_addr < prim_addr2; prim_addr++) {
152#ifdef __SHADOW_LINKING__
161 kg, &isect,
P, dir, tmin, tmax, visibility, prim_object, prim, prim_addr);
164#if BVH_FEATURE(BVH_MOTION)
180#if BVH_FEATURE(BVH_HAIR) && defined(__HAIR__)
187 if (ray->time < prim_time.
x || ray->time > prim_time.
y) {
194 hit = curve_intersect(
195 kg, &isect,
P, dir, tmin, tmax, prim_object, prim, ray->time, curve_type);
200#if BVH_FEATURE(BVH_POINTCLOUD) && defined(__POINTCLOUD__)
205 if (ray->time < prim_time.
x || ray->time > prim_time.
y) {
212 hit = point_intersect(
213 kg, &isect,
P, dir, tmin, tmax, prim_object, prim, ray->time, point_type);
238 bool record_intersection =
true;
243 kg, isect.object, isect.prim, isect.type, isect.u);
249 record_intersection =
false;
253 if (record_intersection) {
258 ++(*r_num_recorded_hits);
261 if (*r_num_recorded_hits <= max_record_hits || isect.t < tmax_hits) {
264 if (*r_num_recorded_hits >= max_record_hits) {
269 for (
uint i = 1; i < max_record_hits; ++i) {
271 if (isect_t > tmax_hits) {
278 isect_index = *r_num_recorded_hits;
289#if BVH_FEATURE(BVH_MOTION)
290 bvh_instance_motion_push(kg,
object, ray, &
P, &dir, &idir);
304 if (stack_ptr >= 0) {
322 const uint visibility,
328 kg, ray,
state, visibility, max_hits, num_recorded_hits, throughput);
331#undef BVH_FUNCTION_NAME
332#undef BVH_FUNCTION_FEATURES
ccl_device_forceinline int intersection_get_shader_flags(KernelGlobals kg, const int prim, const int type)
ccl_device_inline bool intersection_skip_shadow_link(KernelGlobals kg, ccl_ray_data const RaySelfPrimitives &self, const int isect_object)
#define CURVE_SHADOW_TRANSPARENCY_CUTOFF
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 bool intersection_skip_self_shadow(ccl_ray_data const RaySelfPrimitives &self, const int object, const int prim)
BLI_Stack * traversal_stack
#define kernel_assert(cond)
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
#define ccl_optional_struct_init
#define ccl_device_inline
#define BVH_FUNCTION_NAME
#define ENTRYPOINT_SENTINEL
#define BVH_FUNCTION_FULL_NAME(prefix)
ccl_device_inline void bvh_instance_push(KernelGlobals kg, int object, ccl_private const Ray *ray, ccl_private float3 *P, ccl_private float3 *dir, ccl_private float3 *idir)
ccl_device_inline float3 bvh_clamp_direction(float3 dir)
ccl_device_inline void bvh_instance_pop(ccl_private const Ray *ray, ccl_private float3 *P, ccl_private float3 *dir, ccl_private float3 *idir)
ccl_device_inline float3 bvh_inverse_direction(float3 dir)
@ SD_HAS_TRANSPARENT_SHADOW
@ PRIMITIVE_MOTION_CURVE_RIBBON
@ PRIMITIVE_MOTION_TRIANGLE
@ PRIMITIVE_MOTION_CURVE_THICK
#define INTEGRATOR_SHADOW_ISECT_SIZE
ccl_device_inline bool motion_triangle_intersect(KernelGlobals kg, ccl_private Intersection *isect, float3 P, float3 dir, float tmin, float tmax, float time, uint visibility, int object, int prim, int prim_addr)
IntegratorShadowStateCPU *ccl_restrict IntegratorShadowState
#define INTEGRATOR_STATE_ARRAY(state, nested_struct, array_index, member)
ccl_device_forceinline void integrator_state_write_shadow_isect(IntegratorShadowState state, ccl_private const Intersection *ccl_restrict isect, const int index)
CCL_NAMESPACE_BEGIN ccl_device_inline bool triangle_intersect(KernelGlobals kg, ccl_private Intersection *isect, float3 P, float3 dir, float tmin, float tmax, uint visibility, int object, int prim, int prim_addr)