2026-06-02 22:09:30 +00:00
|
|
|
|
# RTVolume
|
|
|
|
|
|
|
2026-06-13 00:17:37 +00:00
|
|
|
|
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).
|
2026-06-02 22:09:30 +00:00
|
|
|
|
|
|
|
|
|
|
A 3×3×3 grid of unit boxes is registered as an AABB BLAS
|
2026-06-13 00:17:37 +00:00
|
|
|
|
(`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:
|
2026-06-02 22:09:30 +00:00
|
|
|
|
|
2026-06-13 00:17:37 +00:00
|
|
|
|
- `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.
|
2026-06-02 22:09:30 +00:00
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
2026-06-13 00:17:37 +00:00
|
|
|
|
WebGPU/DOM (free camera, WASD + mouse):
|
2026-06-02 22:09:30 +00:00
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
crafter-build --target=wasm32-wasip1 -r
|
|
|
|
|
|
```
|
2026-06-13 00:17:37 +00:00
|
|
|
|
|
|
|
|
|
|
Native Vulkan (fixed camera in raygen.glsl):
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
crafter-build -r
|
|
|
|
|
|
```
|