BlueGit

golden-age paperdoll-renderer

design: narrower bounds-derived + configurable per-sex depth range (t984u)

timfa Grok Bot · pushed by timfa

Authored 2026-11-07 · 7 days ago

Hash
9805128d58205677de940b6e25cb9c901d808513
Parent
fa5dd5cd
Pipeline
Obsolete
1 file changed +4 −0
design.md +4 −0
@@ -405,6 +405,10 @@ Exports no longer pile up as `renders/run-<id>/` folders. Each result lives in `
405 405
406 406 Implementation (2026-11-07): the build folder is `renders/inprogress-<stamp>-<pid>-<sex>-<settype>/` (the only resumable kind). After `complete.json` the run is re-validated with `AtlasSet::open_run`, its lock released, the old result renamed to `.replaced-<name>-<stamp>`, the build renamed to `<sex>-<settype>-atlas`, then the old one removed (restored if the rename fails). `resume::recover` runs before every render: a `.replaced-*` folder is restored when its result folder is missing (else removed), and a completed, unlocked, validating `inprogress-*` folder is promoted. The 2D preview only opens `*-atlas` folders whose name matches their `.ppda` sex/settype; `run-*` folders are skipped with a notice; `inprogress-*`/`.replaced-*` are ignored silently.
407 407
408 ## Decision 2026-11-07 (Tim t984u): narrower, configurable depth range
409
410 Supersedes the `R = half render height + |pivot − centre|` rule. (1) The default per-sex depth range is derived from the model bounds around the pivot: the maximum distance of any body vertex from the pivot over all clips, frames and views (the 60 view rotations around the pivot), plus a small margin, giving roughly 0.6 m total for a human body (the old ~3.6 m range used only ~21 cm). Equipment is not part of this envelope; equipment geometry outside the range is clamped and reported (progress + `complete.json` `depth_clamped`), as before. (2) The range is configurable per sex in the `.ppd` (optional override of near/far in meters relative to the camera, or a total range in meters centred on the pivot) and editable in the GUI next to framing. It stays fixed for all frames, views and equipment of that sex, and is stored in `render.json` and `.ppda` `depth_near`/`depth_far`. Readers keep using the recorded values.
411
408 412 ## Decision 2026-11-07 (Tim t980u, amended t981u/t983u): depth bit depth + optional RGB band encoding
409 413
410 414 Two project settings in `.ppd`: `depth_bits` = **8 (default)** or 16, and the boolean `depth_rgb_bands`, default **off**. This changes the default export: depth becomes 8-bit unless 16 is chosen. Four combinations, with M = 2^bits − 1 (255 or 65535) and `t = (d − near)/(far − near)` clamped to 0..1:
@@ -405,6 +405,10 @@ Exports no longer pile up as `renders/run-<id>/` folders. Each result lives in `
405
405
406Implementation (2026-11-07): the build folder is `renders/inprogress-<stamp>-<pid>-<sex>-<settype>/` (the only resumable kind). After `complete.json` the run is re-validated with `AtlasSet::open_run`, its lock released, the old result renamed to `.replaced-<name>-<stamp>`, the build renamed to `<sex>-<settype>-atlas`, then the old one removed (restored if the rename fails). `resume::recover` runs before every render: a `.replaced-*` folder is restored when its result folder is missing (else removed), and a completed, unlocked, validating `inprogress-*` folder is promoted. The 2D preview only opens `*-atlas` folders whose name matches their `.ppda` sex/settype; `run-*` folders are skipped with a notice; `inprogress-*`/`.replaced-*` are ignored silently.
406Implementation (2026-11-07): the build folder is `renders/inprogress-<stamp>-<pid>-<sex>-<settype>/` (the only resumable kind). After `complete.json` the run is re-validated with `AtlasSet::open_run`, its lock released, the old result renamed to `.replaced-<name>-<stamp>`, the build renamed to `<sex>-<settype>-atlas`, then the old one removed (restored if the rename fails). `resume::recover` runs before every render: a `.replaced-*` folder is restored when its result folder is missing (else removed), and a completed, unlocked, validating `inprogress-*` folder is promoted. The 2D preview only opens `*-atlas` folders whose name matches their `.ppda` sex/settype; `run-*` folders are skipped with a notice; `inprogress-*`/`.replaced-*` are ignored silently.
407
407
408## Decision 2026-11-07 (Tim t984u): narrower, configurable depth range
409
410Supersedes the `R = half render height + |pivot − centre|` rule. (1) The default per-sex depth range is derived from the model bounds around the pivot: the maximum distance of any body vertex from the pivot over all clips, frames and views (the 60 view rotations around the pivot), plus a small margin, giving roughly 0.6 m total for a human body (the old ~3.6 m range used only ~21 cm). Equipment is not part of this envelope; equipment geometry outside the range is clamped and reported (progress + `complete.json` `depth_clamped`), as before. (2) The range is configurable per sex in the `.ppd` (optional override of near/far in meters relative to the camera, or a total range in meters centred on the pivot) and editable in the GUI next to framing. It stays fixed for all frames, views and equipment of that sex, and is stored in `render.json` and `.ppda` `depth_near`/`depth_far`. Readers keep using the recorded values.
411
408## Decision 2026-11-07 (Tim t980u, amended t981u/t983u): depth bit depth + optional RGB band encoding
412## Decision 2026-11-07 (Tim t980u, amended t981u/t983u): depth bit depth + optional RGB band encoding
409
413
410Two project settings in `.ppd`: `depth_bits` = **8 (default)** or 16, and the boolean `depth_rgb_bands`, default **off**. This changes the default export: depth becomes 8-bit unless 16 is chosen. Four combinations, with M = 2^bits − 1 (255 or 65535) and `t = (d − near)/(far − near)` clamped to 0..1:
414Two project settings in `.ppd`: `depth_bits` = **8 (default)** or 16, and the boolean `depth_rgb_bands`, default **off**. This changes the default export: depth becomes 8-bit unless 16 is chosen. Four combinations, with M = 2^bits − 1 (255 or 65535) and `t = (d − near)/(far − near)` clamped to 0..1: