Rendering
- Source
docs/executable/rendering.md- SHA-256
d6d929dc…abedeac6
Starting points for tracing how the game produces its image, researched for R41 (../plan/R41-rendering-lab.md). This is a bounded static investigation, not a recovered battle rendering pipeline.
| Based on | Unpacked executable local/exe/Tactics Ogre Reborn.exe.unpacked.exe, SHA-256 7b0230a11498f40396c9048345e7cfe0ef442cb7ca8faffc6f197920d2669599; shader package; background sample. |
| Checked | 2026-10-15 |
| Method | Ghidra 12.1.4 through rea, batch_decompile at the addresses below; inspection of the saved Ghidra decompilations in local/exe/decomp/. No runtime capture or visual comparison. |
Focus and blur
The renderer survey locates BladeGraphicsManager. The shader package's layout and inventory remain in ARC.
| Finding | Confidence | Source |
|---|---|---|
Startup creates a FilterDrawable using the name psp_dof. |
likely | 0x140163d10; saved Ghidra analysis resolves the name pointer 0x140cac7b0. |
0x14016ce70 searches a filter's parameters for FocusPosY, copies the supplied values into its parameter storage, and queues a batch through 0x14018c7b0 with two input handles. |
likely | Fresh rea decompilation of 0x14016ce70. The supplied values' units and meaning are not established. |
0x14016d000 similarly writes vBlurSize, then queues a batch through 0x14018c740. |
likely | Fresh rea decompilation of 0x14016d000. |
0x140166720 constructs pairs of buffers named BlurHalf, BlurQuater and BlurOneEight, with dimensions divided by 2, 4 and 8, respectively. The spellings are the game's. |
likely | Fresh rea decompilation of 0x140166720; positive input dimensions, integer division. |
0x14016c580 takes two branches that queue 0x14016c8c0 twice, with direction arguments 0 and 1, then calls 0x14016ce70. |
likely | Fresh rea decompilation of 0x14016c580. This is a candidate blur/composite sequence; it does not establish when a battle uses it. |
The parameter name FocusPosY does not establish whether focus depends on screen height, world height, camera-space depth or another input. A conventional depth-based effect from another renderer is therefore only an approximation until the shader and its inputs are traced.
Local retained rea records: local/scratch/R41-rendering-rea-20261015.json (ev_42655017d8b968bfc9100eb01cf98aaba1fc9f36e4216b9a32bbc35fa07a057f) and local/scratch/R41-rendering-followup-rea-20261015.json (ev_137f83ed2e1a067851e7f2bca20d54e27cff95cf238efd9c57883ae5965ca34b). These contain decompiled game code and stay local.
Background loading leads
likely: the saved Ghidra analysis of 0x1402dd2f0 selects a path through 0x1402e0930 and bg_file_data, opens and unwraps the file, then calls 0x1402ddda0. A fresh rea decompilation of 0x1402ddda0 shows it taking the first pack entry, checking its u16 at +0x0C is zero, and passing it to 0x14037f4f0 and 0x140382bc0. The resource header's existing observations are in ashg; this does not establish that the background payload is an ashg sprite pack or a world-map BMAR model.
likely: 0x1402ddda0 also finds bg_common.dat entry ID 0xCC, selects a 0xC0-byte row using the background-file row index, and passes settings to graphics virtual calls at vftable offsets +0x2C8 and +0x2D0. This is a lead for scene-specific rendering settings; the fields and the calls' effects remain unresolved. Source: fresh rea decompilation and saved local/exe/decomp/0x1402da390.c.
Leads
- Disassemble and reflect
psp_dofand its vertex shader; identify texture inputs, constant-buffer fields, interpolation and focus formula. Follow the filter object from startup to the parameter updater. - Trace callers of
0x14016c580to establish when battles invoke the sequence and where focus values originate; compare the queued batches with a captured frame. - Recover the selected background's geometry, materials and grid relationship from the readers above.
0x14037f4f0,0x14037efc0,0x14037efe0and0x14037eb90are starting readers from the saved Ghidra analysis, not a decoded geometry contract. - Capture actual pass order, render-target formats, texture/sampler bindings, blend/depth state, camera matrices and output colour conversions. Renderer code and embedded shader names alone do not show which features a particular battle uses.