BlueGit

golden-age paperdoll-renderer

design: default depth range = T-pose arm span + arm margin each side, .ppd override (t985u)

timfa Grok Bot · pushed by timfa

Authored 2026-11-07 · 7 days ago

Hash
5f4672e72c754c5320e0e78e847640ddc0b32ace
Parent
9805128d
Pipeline
Passed
1 file changed +2 −2
design.md +2 −2
@@ -405,9 +405,9 @@ 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
408 ## Decision 2026-11-07 (Tim t984u, amended t985u): default and configurable depth range
409 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.
410 Supersedes the `R = half render height + |pivot − centre|` rule. (1) The default per-sex depth range is the **T-pose arm span** (fingertip to fingertip, measured in the bind pose) **plus one arm length of margin on each side**, centred on the pivot depth: `total = span + 2·arm`, `near = D − total/2`, `far = D + total/2` (camera distance D = 10 m). This covers the model in any rotation plus long weapons. Span = horizontal extent of the bind-pose body vertices; arm = (span − shoulder width)/2 with the shoulder width taken from the left/right upper-arm/shoulder joints when they can be identified by name, otherwise arm = 0.4·span (documented fallback, also for static bodies). Geometry still outside the range is clamped and reported (progress + `complete.json` `depth_clamped`). (2) The range is configurable per sex in the `.ppd` (`depth_range_milli`: optional total range in millimetres, centred on the pivot) and editable in the GUI next to framing ("Dieptebereik", with an "automatisch" choice). 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 use the recorded values (validated: finite, 0 < near < far, equal to identity near/far) instead of recomputing them.
411 411
412 412 ## Decision 2026-11-07 (Tim t980u, amended t981u/t983u): depth bit depth + optional RGB band encoding
413 413
@@ -405,9 +405,9 @@ 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
408## Decision 2026-11-07 (Tim t984u, amended t985u): default and configurable depth range
409
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.
410Supersedes the `R = half render height + |pivot − centre|` rule. (1) The default per-sex depth range is the **T-pose arm span** (fingertip to fingertip, measured in the bind pose) **plus one arm length of margin on each side**, centred on the pivot depth: `total = span + 2·arm`, `near = D − total/2`, `far = D + total/2` (camera distance D = 10 m). This covers the model in any rotation plus long weapons. Span = horizontal extent of the bind-pose body vertices; arm = (span − shoulder width)/2 with the shoulder width taken from the left/right upper-arm/shoulder joints when they can be identified by name, otherwise arm = 0.4·span (documented fallback, also for static bodies). Geometry still outside the range is clamped and reported (progress + `complete.json` `depth_clamped`). (2) The range is configurable per sex in the `.ppd` (`depth_range_milli`: optional total range in millimetres, centred on the pivot) and editable in the GUI next to framing ("Dieptebereik", with an "automatisch" choice). 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 use the recorded values (validated: finite, 0 < near < far, equal to identity near/far) instead of recomputing them.
411
411
412## 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
413
413