feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API
Extends the cross-backend RT type surface for procedural geometry + any-hit on the WebGPU path: - RTShaderGroupType::ProceduralHitGroup + RTShaderGroup::intersectionShader (mirror VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR). - WebGPURTStage::Intersection for AABB intersection shaders. - Mesh::BuildProcedural(span<RTAabb>, opaque) — the WebGPU analog of a VK_GEOMETRY_TYPE_AABBS_KHR geometry. - wgpuRegisterMeshBLAS gains geomType / opaqueFlag / primCount. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
d7b9a41b4f
commit
321fe596a7
4 changed files with 66 additions and 15 deletions
|
|
@ -87,6 +87,17 @@ export namespace Crafter {
|
|||
};
|
||||
static_assert(sizeof(BVHNode) == 32);
|
||||
|
||||
// One procedural primitive's axis-aligned bounding box, in object
|
||||
// space. The analog of VkAabbPositionsKHR — the BLAS stores these
|
||||
// instead of triangles and an intersection shader (registered in the
|
||||
// hit group as a ProceduralHitGroup) reports the actual surface hit
|
||||
// for each AABB the ray enters.
|
||||
struct RTAabb {
|
||||
float min[3];
|
||||
float max[3];
|
||||
};
|
||||
static_assert(sizeof(RTAabb) == 24);
|
||||
|
||||
class Mesh {
|
||||
public:
|
||||
// BLAS "handle": opaque identity that goes into
|
||||
|
|
@ -119,6 +130,19 @@ export namespace Crafter {
|
|||
// as `vertexAttribs : array<u32>` with a per-mesh u32-word offset.
|
||||
void Build(const ::Crafter::CompressedMeshAsset& asset,
|
||||
WebGPUCommandEncoderRef cmd = 0);
|
||||
|
||||
// Build an AABB (procedural) BLAS from a list of object-space boxes
|
||||
// — the WebGPU analog of a VK_GEOMETRY_TYPE_AABBS_KHR geometry. The
|
||||
// hit group bound to instances of this mesh must be a
|
||||
// ProceduralHitGroup carrying an intersection shader; that shader is
|
||||
// invoked for each box the ray enters and reports the surface hit.
|
||||
// `opaque` is the geometry's opaque bit: pass false to let any-hit
|
||||
// shaders run (the default for procedural geometry, which is usually
|
||||
// transparent / volumetric). The `cmd` parameter is unused on
|
||||
// WebGPU — kept for API symmetry with the triangle path.
|
||||
void BuildProcedural(std::span<const RTAabb> aabbs,
|
||||
bool opaque = false,
|
||||
WebGPUCommandEncoderRef cmd = 0);
|
||||
};
|
||||
}
|
||||
#endif // CRAFTER_GRAPHICS_WINDOW_DOM
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue