feat(render): apply placement in xy preview
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
| `RecordingBackend` | No | No | Optional CPU-side IDs only | `covered-planning` | Stable command capture for backend-neutral tests | Native window, Vulkan, GPU resource lifetime, pixels |
|
||||
| `NullBackend` | No | No | Optional CPU-side IDs only | Usually `covered` for validation-only rows | Command stream framing and bounds validation | Capture stability, GPU execution, pixels |
|
||||
| `VulkanAssetRenderer` | Yes | Yes | Yes | `covered-gpu` | Static original asset rendering: MSH/Texm/WEAR/MAT0/terrain through Vulkan | Animation/FX parity unless explicitly wired |
|
||||
| `fparkan-game --backend static-vulkan` | Yes, GOG `Autodemo.00` | Yes, full static AutoDemo preview | Eight mission objects, 66 MSH components, original diffuse TEXM and Land2 terrain base layer | `covered-gpu` for the bounded static-scene bridge | Captured legacy camera, placed translation/scale/Z Euler transform, fallback node hierarchy, source-world geometry, 32-bit GPU indices, diffuse descriptors, terrain base draws and synchronized teardown telemetry | Material phases, Land1 blend/microtexture/lightmaps, animated keys, FX, camera control and gameplay parity |
|
||||
| `fparkan-game --backend static-vulkan` | Yes, GOG `Autodemo.00` | Yes, full static AutoDemo preview | Eight mission objects, 66 MSH components, original diffuse TEXM and Land2 terrain base layer | `covered-gpu` for the bounded static-scene bridge | Diagnostic XY framing with recovered translation/scale/Z Euler placement, fallback node hierarchy, optional captured legacy camera, 32-bit GPU indices, diffuse descriptors, terrain base draws and synchronized teardown telemetry | Material phases, Land1 blend/microtexture/lightmaps, animated keys, FX, camera control and gameplay parity |
|
||||
| Future rendered `fparkan-game` mode | Yes | Yes | Yes | `covered-gpu` plus original-evidence IDs | Mission-driven render snapshot execution and pixel capture | Original-runtime parity for animation/FX/x87 without dedicated captures |
|
||||
|
||||
## Rules
|
||||
@@ -36,10 +36,11 @@
|
||||
synthetic window descriptor и `VulkanPlanningBackend`. Opt-in `--backend static-vulkan`
|
||||
создаёт native `winit` window. Для GOG `MISSIONS/Autodemo.00/data.tma` он уже
|
||||
рендерит весь статический набор из восьми mission objects и 66 MSH components с
|
||||
captured legacy camera, доказанным `Rz * Ry * Rx` placement transform,
|
||||
diagnostic XY camera (or an optional captured legacy camera), доказанным `Rz * Ry * Rx` placement transform,
|
||||
fallback node hierarchy и Land2 base terrain. Последний validation-clean
|
||||
трёхкадровый запуск имел 67 material descriptors, `clip_visible_vertices=3415`
|
||||
и readback hash `1275533143935640133`. Это `covered-gpu` для ограниченного
|
||||
текущий трёхкадровый запуск после применения placement transform в XY path
|
||||
имел 71 material descriptor, `clip_visible_vertices=75543` и readback hash
|
||||
`5444013368935681345`. Это `covered-gpu` для ограниченного
|
||||
static-scene bridge, но не pixel parity и не доказательство material phase,
|
||||
Land1 blend, microtexture, lightmap, dynamic animation, FX, live camera
|
||||
selection или gameplay rendering.
|
||||
|
||||
+18
-13
@@ -985,8 +985,11 @@ The bounded native preview now retains the already validated `Land.msh` inside
|
||||
runtime boundary instead of decoding archive formats a second time. It merges
|
||||
one terrain component with the first TMA root's 14 reachable MSH components in
|
||||
one explicit top-down XY frame. The frame is computed from terrain positions
|
||||
and the root models after applying only the decoded TMA `position` and `scale`.
|
||||
Raw TMA orientation is deliberately excluded: its convention is not proven.
|
||||
and the root models after applying decoded TMA placement: non-uniform `scale`,
|
||||
then the recovered `Rz * Ry * Rx` orientation, then `position`. The XY camera
|
||||
itself remains diagnostic; applying the established placement transform here
|
||||
prevents differently oriented mission objects from being framed or rasterized
|
||||
at a false location.
|
||||
|
||||
Terrain is assigned an explicit 1x1 white diagnostic texture, rather than a
|
||||
guessed terrain material. `Land.msh` slot selection, `material_tag`, masks,
|
||||
@@ -1004,10 +1007,11 @@ geometry and descriptor set changed; it is not an original-frame comparison.
|
||||
### Multiple static-preview roots
|
||||
|
||||
The native bridge now combines every mesh-backed visual of each selected root,
|
||||
using that root's preserved TMA `position` and `scale` in the shared diagnostic
|
||||
XY frame. It reports the actual selected root count as `preview_roots`, rather
|
||||
than implying that all mission objects are rendered. Raw orientation, original
|
||||
camera/frustum and visibility remain unresolved.
|
||||
using that root's recovered static TMA placement (`Rz * Ry * Rx` after scale)
|
||||
in the shared diagnostic XY frame. It reports the actual selected root count as
|
||||
`preview_roots`, rather than implying that all mission objects are rendered.
|
||||
The original camera/frustum, dynamic orientation ownership and visibility
|
||||
remain unresolved.
|
||||
|
||||
Fresh canonical GOG `Autodemo.00` evidence with `--preview-roots 2` completed
|
||||
in 59.7 seconds: 25 submitted MSH components, one terrain component and 26
|
||||
@@ -1430,13 +1434,14 @@ runtime wiring, not a claim of scene parity.
|
||||
|
||||
The geometry side of that handoff is also explicit. The static mesh adapter now
|
||||
has source-world projections for `Land.msh` and MSH: terrain positions retain
|
||||
all three decoded coordinates; model positions retain Z and apply only the
|
||||
already decoded mission translation and scale. These APIs preserve triangle
|
||||
order, batch ranges and packed UV decoding, but do not interpret the still
|
||||
unproven raw object orientation. The current game preview deliberately stays
|
||||
on its XY diagnostic projection until a runtime supplies a real legacy camera;
|
||||
selecting source-world coordinates with identity camera would be a misleading
|
||||
empty/off-screen viewer rather than a compatibility result.
|
||||
all three decoded coordinates; model positions retain Z and apply the recovered
|
||||
static mission placement. The diagnostic XY counterpart uses that same placement
|
||||
before normalizing X/Y, so it no longer silently omits authored object rotation.
|
||||
These APIs preserve triangle order, batch ranges and packed UV decoding. The
|
||||
current game preview deliberately stays on its XY diagnostic projection until a
|
||||
runtime supplies a real legacy camera; selecting source-world coordinates with
|
||||
identity camera would be a misleading empty/off-screen viewer rather than a
|
||||
compatibility result.
|
||||
|
||||
Static analysis of GOG `iron3d.dll` recovers the placement primitive at RVA
|
||||
`0x36610`: it evaluates a row-major affine `Rz(z) * Ry(y) * Rx(x)` and writes
|
||||
|
||||
Reference in New Issue
Block a user