| .. | ||
| aabbs.comp.glsl | ||
| aabbs.comp.wgsl | ||
| anyhit.glsl | ||
| anyhit.wgsl | ||
| closesthit.glsl | ||
| closesthit.wgsl | ||
| intersection.glsl | ||
| intersection.wgsl | ||
| main.cpp | ||
| miss.glsl | ||
| miss.wgsl | ||
| project.cpp | ||
| raygen.glsl | ||
| raygen.wgsl | ||
| README.md | ||
| resolve.wgsl | ||
RTVolume
Ray tracing of procedural (AABB) geometry with an any-hit cut-out on both backends — software WebGPU (issue #13) and native Vulkan hardware RT (issue #33).
A 3×3×3 grid of unit boxes is registered as an AABB BLAS
(Mesh::BuildProcedural — VK_GEOMETRY_TYPE_AABBS_KHR on Vulkan, the
software AABB-leaf path on WebGPU). The hit group is procedural
(RTShaderGroupType::ProceduralHitGroup /
VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR) carrying:
intersection.wgsl/intersection.glsl— analytic ray–sphere test that turns each box into a radius-1 sphere (runs once per box the ray enters);anyhit.wgsl/anyhit.glsl— ignores the intersection for half the cells of a spherical checkerboard, so the ray passes through and the background / spheres behind show through (the visible proof any-hit runs);closesthit.wgsl/closesthit.glsl— normal-based Lambert shading, tinted per instance.
The geometry is registered non-opaque and the instances clear their
force-opaque flag, which is what lets the any-hit shader run. Flip the
instance flag to kRTGeometryInstanceForceOpaque (or build the mesh with
opaque = true) to skip any-hit and see solid spheres.
WebGPU/DOM (free camera, WASD + mouse):
crafter-build --target=wasm32-wasip1 -r
Native Vulkan (fixed camera in raygen.glsl):
crafter-build -r