render3d: the terrain as quantized tiles (LTT2) that every reader answers from, baked or cut
Heights as u16 over each 64 m tile's own minimum and step (a tile spanning 200 m steps 3 mm), normals octahedral 8 + 8, the photograph RGB8, and the coarse level (2048: heights f32, normals, photograph) - 30 + 32 + 48 + 16 + 8 + 12 MB, about 146 MB a map where the float tiles were 192 plus nothing coarse. The writer puts the whole copy back to the quantized values as it goes, so the build's own queries, the physics, the placements' bake and every machine read the same numbers; a tile read decodes them into the pools the queries and the page pool already use. terrain_tiles_bake(path, key, version, inputs_hash) writes a bake's file (ludic.base's LBAK header, the tiles as its payload) from a made map; terrain_from_baked(path, key, version, half, ox, oz) opens one at boot in place of terrain_use_dem / terrain_use_ortho, and terrain_init then generates nothing (and bakes the sun's shadow from the coarse level unless terrain_shadow_from_bytes gave it). Without a bake the cut writes the same format to <dir>/<key>.tiles and reads it back. The GPU's coarse level is made from the file's coarse sections (the blit from the whole maps is gone). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
883ea8d48a
commit
a12f1b1201
8 changed files with 397 additions and 149 deletions
|
|
@ -840,6 +840,11 @@ export state Render3dState {
|
|||
tt_h: floats = null # TT_SLOTS tiles of heights
|
||||
tt_o: words = null # ... and of photograph, 0xRRGGBB
|
||||
tt_nm: words = null # ... and of normals, RG16F in a word
|
||||
tt_tab: floats = null # per tile: its heights' minimum and step (terrain_ltt2_*.ludic)
|
||||
tt_scratch: []byte = null # one tile's bytes as read
|
||||
tt_cnoff: int = 0 # the coarse normals and photograph in the file
|
||||
tt_cooff: int = 0
|
||||
tt_baked: bool = false # the terrain came from a bake: nothing is generated or cut
|
||||
tt_coarse: floats = null # the heights at TT_COARSE a side, for terrain_height_near
|
||||
tt_slot_of: words = null # per tile: its slot, or -1
|
||||
tt_tile_in: words = null # per slot: its tile, or -1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue