BlueGit

golden-age paperdoll-renderer

design: Render alles button (Tim)

timfa Grok Bot · pushed by timfa

Authored 2026-11-07 · 7 days ago

Hash
7fef398f9039bfcd55e6e4b4daa24211688bf441
Parent
5a268272
1 file changed +4 −0
design.md +4 −0
@@ -377,3 +377,7 @@ Cause found: the 2D preview wrapped its clock on the source clip duration, while
377 377
378 378 - **Depth range:** the exported depth no longer uses the global near 0.05 / far 40, where a body filled only about 1.3% of the 16-bit range. Each sex gets a **fixed, narrow depth interval around the orbit pivot**, derived deterministically from its fixed framing: `near = camera_distance − R`, `far = camera_distance + R`, where R is a half-depth derived from the framing height (default R = framing height × 0.5, at least 0.5 m). For the default 2.6 m framing, that is roughly 8.7 m to 11.3 m. All clips, frames, views and the equipment of that sex share exactly the same interval, so depth compositing stays consistent. Geometry outside the interval is clamped and reported as a diagnostic, never silently rescaled per frame. The encoding stays `distance = near + (gray/65535)·(far−near)`. near/far per sex are stored in `render.json`, the export contract and the **`.ppda` metadata** (`depth_near`, `depth_far`, `depth_encoding`), so a renderer can convert depth back to distance. Exports that use the old global range are recognized as such through their contract and are not mixed with exports that use the new range.
379 379 - **Light hold buttons:** holding Azimut ± / Elevatie ± in the 2D previewer stops after about 1 second. The likely cause is egui's click-sense, which stops reporting a press as `is_pointer_button_down_on` once it lasts longer than a click. Fix: drive holds from the raw pointer state (primary button down, press started on the button, pointer still over the button), so a hold lasts as long as it is held. Release, losing focus or the pointer leaving the window still stop it. Add a test that a hold of several seconds keeps rotating.
380
381 ## Decision 2026-11-07 (Tim t966u): "Render alles" button
382
383 A **Render alles** button renders the whole project in one batch: every configured body (male and female, when present) and then every configured equipment preset for each applicable sex. Each item gets its full production export (all clips × frames × all views, four maps, atlases + `.ppda`) at the project's target resolution and framerate. It is a queue of the existing per-item jobs, sharing the same progress/preview, cancel and resume behavior. Overall progress shows the item and pass counts. Items that cannot be rendered (no body, equipment without a binding for that sex, invalid setup) are skipped with a clear diagnostic per item, and the rest of the queue continues. Afterwards, a summary lists what was rendered, what was skipped and what failed.
@@ -377,3 +377,7 @@ Cause found: the 2D preview wrapped its clock on the source clip duration, while
377
377
378- **Depth range:** the exported depth no longer uses the global near 0.05 / far 40, where a body filled only about 1.3% of the 16-bit range. Each sex gets a **fixed, narrow depth interval around the orbit pivot**, derived deterministically from its fixed framing: `near = camera_distance − R`, `far = camera_distance + R`, where R is a half-depth derived from the framing height (default R = framing height × 0.5, at least 0.5 m). For the default 2.6 m framing, that is roughly 8.7 m to 11.3 m. All clips, frames, views and the equipment of that sex share exactly the same interval, so depth compositing stays consistent. Geometry outside the interval is clamped and reported as a diagnostic, never silently rescaled per frame. The encoding stays `distance = near + (gray/65535)·(far−near)`. near/far per sex are stored in `render.json`, the export contract and the **`.ppda` metadata** (`depth_near`, `depth_far`, `depth_encoding`), so a renderer can convert depth back to distance. Exports that use the old global range are recognized as such through their contract and are not mixed with exports that use the new range.
378- **Depth range:** the exported depth no longer uses the global near 0.05 / far 40, where a body filled only about 1.3% of the 16-bit range. Each sex gets a **fixed, narrow depth interval around the orbit pivot**, derived deterministically from its fixed framing: `near = camera_distance − R`, `far = camera_distance + R`, where R is a half-depth derived from the framing height (default R = framing height × 0.5, at least 0.5 m). For the default 2.6 m framing, that is roughly 8.7 m to 11.3 m. All clips, frames, views and the equipment of that sex share exactly the same interval, so depth compositing stays consistent. Geometry outside the interval is clamped and reported as a diagnostic, never silently rescaled per frame. The encoding stays `distance = near + (gray/65535)·(far−near)`. near/far per sex are stored in `render.json`, the export contract and the **`.ppda` metadata** (`depth_near`, `depth_far`, `depth_encoding`), so a renderer can convert depth back to distance. Exports that use the old global range are recognized as such through their contract and are not mixed with exports that use the new range.
379- **Light hold buttons:** holding Azimut ± / Elevatie ± in the 2D previewer stops after about 1 second. The likely cause is egui's click-sense, which stops reporting a press as `is_pointer_button_down_on` once it lasts longer than a click. Fix: drive holds from the raw pointer state (primary button down, press started on the button, pointer still over the button), so a hold lasts as long as it is held. Release, losing focus or the pointer leaving the window still stop it. Add a test that a hold of several seconds keeps rotating.
379- **Light hold buttons:** holding Azimut ± / Elevatie ± in the 2D previewer stops after about 1 second. The likely cause is egui's click-sense, which stops reporting a press as `is_pointer_button_down_on` once it lasts longer than a click. Fix: drive holds from the raw pointer state (primary button down, press started on the button, pointer still over the button), so a hold lasts as long as it is held. Release, losing focus or the pointer leaving the window still stop it. Add a test that a hold of several seconds keeps rotating.
380
381## Decision 2026-11-07 (Tim t966u): "Render alles" button
382
383A **Render alles** button renders the whole project in one batch: every configured body (male and female, when present) and then every configured equipment preset for each applicable sex. Each item gets its full production export (all clips × frames × all views, four maps, atlases + `.ppda`) at the project's target resolution and framerate. It is a queue of the existing per-item jobs, sharing the same progress/preview, cancel and resume behavior. Overall progress shows the item and pass counts. Items that cannot be rendered (no body, equipment without a binding for that sex, invalid setup) are skipped with a clear diagnostic per item, and the rest of the queue continues. Afterwards, a summary lists what was rendered, what was skipped and what failed.