// RTVolume any-hit shader (runs in TRACE on every candidate sphere hit, // because the geometry is registered non-opaque). Punches a spherical // checkerboard of holes: for half the cells it returns RT_ANYHIT_IGNORE, // so the ray passes straight through and the background / spheres behind // show through. Returning RT_ANYHIT_ACCEPT keeps the hit. This is the // visible proof the any-hit path runs — with it the spheres are perforated, // without it they would be solid. fn anyhit_main(ray: RayDesc, hit: HitInfo, payload: ptr) -> u32 { // Object-space hit point on the unit sphere → its normal/direction. let posObj = hit.objectRayOrigin + hit.objectRayDirection * hit.t; let n = normalize(posObj); let PI = 3.14159265; let longitude = atan2(n.z, n.x); // [-PI, PI] let latitude = asin(clamp(n.y, -1.0, 1.0)); // [-PI/2, PI/2] let cu = i32(floor((longitude + PI) / PI * 6.0)); let cv = i32(floor((latitude + PI * 0.5) / PI * 6.0)); if (((cu + cv) & 1) == 0) { return RT_ANYHIT_IGNORE; // cut-out cell — see through } return RT_ANYHIT_ACCEPT; }