render map objects: decode compiled W3DMesh art, skin and draw over terrain
Read the buildings and props a map places from its compiled art (the uncompressed worldbuilder stream + embedded DDS textures): - ra3.models: BAB asset-stream parser (lazy slices), W3DMesh + D3DHierarchy decode, DDS (DXT1/3/5 + uncompressed) decode, per-mesh bone remap and bind-pose single-joint skinning, flattened to one world-space triangle soup. - ra3.map: parse the ObjectsList chunk into (type, x, y, z, angle). - ra3.terrain: render3d rasterises the scene over the raymarched terrain with a z-buffer; gpu_terrain carries the scene for the GPU backends. - ra3.vulkan: second pipeline + depth attachment, terrain.frag writes gl_FragDepth, and a small depth bias keeps ground decals from z-fighting. - objects.fx shaders (compiled to SPIR-V), embedded like scene/terrain. Only opaque parts are drawn: FX-light billboards (DefaultW3D.fx / BasicW3D.fx) and damage-fill shells (BuildingsGenericDamageFill.fx) are skipped, since the latter paint the wrecked interior (e.g. orange CBBuilding_Wood) over the shell. Ground-decal meshes with no diffuse role and the Road templates themselves are still not drawn.
This commit is contained in:
+13
-9
@@ -79,7 +79,7 @@ umbrella module re-exports the SDK; applications import `ra3` only.
|
||||
```
|
||||
|
||||
The current concrete modules (`ra3.core`, `ra3.logic`, `ra3.data`,
|
||||
`ra3.skirmish`, `ra3.fs`, `ra3.map`, `ra3.terrain`, `ra3.render`, `ra3.ui.*`,
|
||||
`ra3.skirmish`, `ra3.fs`, `ra3.map`, `ra3.terrain`, `ra3.models`, `ra3.render`, `ra3.ui.*`,
|
||||
`ra3.vulkan.*`, `ra3.dx.*`, `ra3.webgpu.*`, `ra3.wasmgl.*`, `ra3.display`, `ra3.game`, `ra3.client`, and the
|
||||
vendored `ender.log`) are the **seeds** of the
|
||||
target modules below. `ra3.skirmish` and `ra3.game` will be absorbed into
|
||||
@@ -206,10 +206,11 @@ Mirrors SAGE `GameEngine/Common`. Everything else speaks this.
|
||||
- `[ ]` DDS / DXT compressed textures `(v0.5)`
|
||||
- `[ ]` atlas + mip generation, gutter padding (GPU) `[~]`
|
||||
- `[ ]` async upload / streaming `(v0.6)`
|
||||
- **F2 Models** `[ ]` `!!`
|
||||
- `[ ]` W3D container parse (chunks, hierarchy, meshes) `(v0.6)`
|
||||
- `[ ]` materials, shaders, texture references
|
||||
- `[ ]` LOD sets, collision meshes
|
||||
- **F2 Models** `[~]`
|
||||
- `[x]` compiled `W3DMesh` decode (vertex buffer + D3D9 declaration + triangle list) from the BAB static/worldbuilder stream
|
||||
- `[x]` embedded DDS textures (DXT1/3/5 + uncompressed RGB) → ARGB
|
||||
- `[x]` `W3DHierarchy` decode + static bind-pose skinning (bone-space vertices)
|
||||
- `[ ]` W3D container/hierarchy animation, LOD sets, collision meshes `!!` `(v0.6)`
|
||||
- **F3 Animation** `[ ]` `!!`
|
||||
- `[ ]` W3D animation chunks, bone poses `(v0.6)`
|
||||
- `[ ]` blend trees / transition animations
|
||||
@@ -533,8 +534,10 @@ Mirrors SAGE `GameEngine/Common`. Everything else speaks this.
|
||||
- **F3 Terrain render** `[~]`
|
||||
- `[x]` top-down software + GPU heightfield with blend ramp + gutter atlas
|
||||
- `[ ]` perspective terrain mesh, LOD, cliff, water `(v0.6)`
|
||||
- **F4 Model render** `[ ]` `!!`
|
||||
- `[ ]` W3D draw, skinning, materials, team colors `(v0.6)`
|
||||
- **F4 Model render** `[~]`
|
||||
- `[x]` static map-object triangle soup, world-space, depth-tested over the terrain (Vulkan + software)
|
||||
- `[x]` bind-pose skinning (bone-space vertices) + ground-decal depth bias
|
||||
- `[ ]` animated W3D draw, materials, team colors `!!` `(v0.6)`
|
||||
- `[ ]` shadows, decals, ground marks `(v0.6)`
|
||||
- **F5 VFX** `[ ]`
|
||||
- `[ ]` particle systems, beams, muzzle flashes, explosions `(v0.6)`
|
||||
@@ -575,8 +578,9 @@ Mirrors SAGE `GameEngine/Common`. Everything else speaks this.
|
||||
- `[ ]` formal RHI integration (see M16 F1) `(v0.6)`
|
||||
- **F2 Terrain presentation** `[D]`
|
||||
- `[x]` GPU heightfield raymarch, mipmapped atlas, gutter, retail blend ramp
|
||||
- **F3 Materials & pipelines** `[ ]`
|
||||
- `[ ]` model/particle/HUD pipelines `(v0.6)`
|
||||
- **F3 Materials & pipelines** `[~]`
|
||||
- `[x]` static-model pipeline (vertex/index buffers, texture array, depth test)
|
||||
- `[ ]` particle/HUD pipelines `(v0.6)`
|
||||
- **F4 Null fallback** `[D]`
|
||||
- `[x]` report failure when no Vulkan loader is present
|
||||
|
||||
|
||||
Reference in New Issue
Block a user