# Blacksite Solari Patch Boundary

Base: `bevy_solari` 0.19.0.

Blacksite-owned changes are deliberately limited to the scene module and dependency manifest:

- extract either `MeshMaterial3d<StandardMaterial>` or `MeshMaterial3d<SurfaceMaterial>`;
- pack the Surface ABI v1 uniform lanes, UV transforms, and eight texture bindings into Solari's
  scene material buffer;
- rebuild the embedded scene shader library from the active, validated `SurfaceEvaluatorRegistry`;
- namespace evaluator/helper functions by stable shader ID and use the same evaluator for ray-hit
  shading and cutout candidate acceptance;
- build shared mesh BLAS geometry as non-opaque so per-instance cutout materials can reject hits;
- retain standard Bevy materials and reject blended material modes from the ray scene.

The `game_hot` bridge owns eligibility and diagnostics. Until an instance-owned post-morph/post-skin
vertex buffer can feed a dynamic BLAS, it removes `RaytracingMesh3d` from skinned or morphed entities
and reports them through `deformed_meshes_excluded`. Rigid animated descendants remain supported
because their geometry is static and their current/previous transforms are already extracted.

When rebasing, compare upstream changes only in `src/scene/` first. Preserve the evaluator-registry
extraction, GPU/WGSL material layouts, non-opaque BLAS flag, and candidate traversal as one atomic
unit; a layout mismatch can pass Rust compilation but corrupt GPU reads. Validate the generated WGSL
with Naga and run `cargo test -p game_hot --lib` after every rebase.
