Merge design: loop timing
@@ -368,3 +368,7 @@ Bepaal ook welk 3D-model format goed is; liefst ondersteunen we natuurlijk meerd
368
368
## Decision 2026-11-07 (Tim t960u): 2D previewer view modes
369
369
370
370
The 2D previewer gets a mode picker: **Resultaat** (default; the real relit composite as the game would show it), **Alleen diffuse**, **Alleen normal map**, **Alleen depth map** and **Alleen specular map**. The map modes show the depth-composited map of the winning layer per pixel directly as the image, unlit, so you can inspect each exported map. Depth is shown as grayscale and normal as its stored RGB encoding. Playback, view selection and equipment selection work the same in every mode; the light controls only affect Resultaat.
371
372
## Decision 2026-11-07 (Tim t961u): 2D playback loops on whole frames
373
374
Cause found: the 2D preview wrapped its clock on the source clip duration, while the export holds `ceil(duration × fps)` frames. As a result, the last frame of the loop was shown for only `duration − (frames−1)/fps` instead of a full `1/fps`. For example, at 4 fps a clip of 1.1 s showed its fifth frame for only 0.1 s. Fix: playback loops over exactly `frames / fps` seconds, so every frame, including the last, is shown for an equal `1/fps`. A regression test covers a non-whole duration.
@@ -368,3 +368,7 @@ Bepaal ook welk 3D-model format goed is; liefst ondersteunen we natuurlijk meerd368
## Decision 2026-11-07 (Tim t960u): 2D previewer view modes368
## Decision 2026-11-07 (Tim t960u): 2D previewer view modes369
369
370
The 2D previewer gets a mode picker: **Resultaat** (default; the real relit composite as the game would show it), **Alleen diffuse**, **Alleen normal map**, **Alleen depth map** and **Alleen specular map**. The map modes show the depth-composited map of the winning layer per pixel directly as the image, unlit, so you can inspect each exported map. Depth is shown as grayscale and normal as its stored RGB encoding. Playback, view selection and equipment selection work the same in every mode; the light controls only affect Resultaat.370
The 2D previewer gets a mode picker: **Resultaat** (default; the real relit composite as the game would show it), **Alleen diffuse**, **Alleen normal map**, **Alleen depth map** and **Alleen specular map**. The map modes show the depth-composited map of the winning layer per pixel directly as the image, unlit, so you can inspect each exported map. Depth is shown as grayscale and normal as its stored RGB encoding. Playback, view selection and equipment selection work the same in every mode; the light controls only affect Resultaat.371
372
## Decision 2026-11-07 (Tim t961u): 2D playback loops on whole frames373
374
Cause found: the 2D preview wrapped its clock on the source clip duration, while the export holds `ceil(duration × fps)` frames. As a result, the last frame of the loop was shown for only `duration − (frames−1)/fps` instead of a full `1/fps`. For example, at 4 fps a clip of 1.1 s showed its fifth frame for only 0.1 s. Fix: playback loops over exactly `frames / fps` seconds, so every frame, including the last, is shown for an equal `1/fps`. A regression test covers a non-whole duration.