Measure a character against the training renderer
Goal
One number, in dB, that says how close the engine's picture of a studio character is to what the character was trained to look like: the align lab (examples/align-lab) draws the file or its exported package at the training renderer's own camera, and the training renderer's picture of the same file at the same camera is the reference. Every change to the engine's splat drawing (the fork, the layer, a point shape) is measured this way, at the same three cameras, before it lands. The 30 September 2026 numbers are below; a change that lowers them does not land.
Files you will edit
None. This recipe runs one command; nothing in a game changes.
Steps
Get a studio character on this disk: its
character.ply(the file as trained: what the studio's stage draws), or the exported package's folder (character.jsonbesidecharacter.ply,bindings.bin, the head and the skeleton: what a game gets). Logan Paul's copies of 30 September are inD:\claude-temp\engine-align\serve\on Isaac's desk (logan_full.ply,pkg\character.json).Run the one command from the repository root. The head close-up of the file:
shpython examples/align-lab/tools/measure.py path/to/character.ply --camera headand of the package, on the character road (the compute skin, the rest stance):
shpython examples/align-lab/tools/measure.py path/to/pkg/character.json --camera head--camera allmeasures the head close-up, the front and the three-quarter. The command's defaults are what a character gets when nothing asks for a look (--shape size-aware --blend stored, chosen by Isaac on the looks sheet of 30 Sep 2026);--shape engine --blend linearis the line before,--shape studiothe studio page's point,--band lo,hithe size-aware point's band,--shape trainedthe lab's own measuring switch (the training renderer's point; no game can ask for it).--cy-headand--cy-bodymove the aim for a character whose file does not stand where Logan's does (the head at y 0.25, the body aimed at y -0.45).Read the line it prints per camera, and keep the pictures it wrote in
examples/align-lab/shots/:texthead figure 37.47 dB whole 39.81 dB shift +0.08 levels sharp x1.05 problems 0figureis the PSNR on the figure (where the training renderer's alpha is above 2 %: the number to compare),wholethe PSNR on the whole frame,shiftthe mean colour shift on the figure in levels of 255 (positive: lighter than trained),sharpthe candidate's sharpness over the reference's (1 is as sharp),skinthe skin pass's time on the card per frame for a package,problemsthe page's errors (0, or the number means nothing).
Verify
The training renderer needs Isaac's desk: an NVIDIA card with CUDA and the studio's companion venv (torch and gsplat; GAMEABLE_STUDIO_DIR names the studio checkout, GAMEABLE_STUDIO_PYTHON its venv's python; the first run builds gsplat's CUDA extension into TORCH_EXTENSIONS_DIR, several minutes). Anywhere else, copy the reference pictures rendered there (train_<stem>_<camera>.png and _alpha.png) and pass --reference <dir>: the engine's side of the measurement runs on any machine with WebGPU (headless Edge, or npx playwright install chromium once).
On Logan Paul, 30 September 2026, 1024 x 1024, PSNR on the figure against the training renderer:
| Camera | The studio's renderer | The line before 30 Sep | The colours as stored, the line's point | The colours as stored, the studio's point | The trained point (the lab's switch) |
|---|---|---|---|---|---|
| Head close-up, the file | 35.7 dB | 28.0 | 30.7 | 37.4 | 40.3 |
| Front, the file | 26.3 | 25.6 | 24.5 | 37.4 | 44.2 |
| Three-quarter, the file | 26.9 | 25.9 | 25.1 | 36.0 | 42.9 |
| Head close-up, the package | 36.4 | 27.5 | 30.8 | 37.1 | 41.8 |
| Front, the package | 29.0 | 27.0 | 26.6 | 36.1 | 42.8 |
| Three-quarter, the package | 29.5 | 26.8 | 26.9 | 35.6 | 41.9 |
The size-aware point (the default, band 4 to 8 px) on the package at a head close-up (1 m, fov 22) reads with the studio's point (front 37.5 against 37.5; Ari of Hollow Reign 37.4 against 40.2) and at a game's distance (3.3 m, fov 70, 1080p) between the line's and the studio's (Logan front 25.7: the line 23.8, the studio's 31.9). The skin pass on the package (144,492 points), the idle playing: 0.10 ms a frame on that card; the head's expression blend 0.02 ms. The number is not the judge: Isaac is, by eye, at a game's distance as much as close up; this page measures that a change to the fork did not lower a look he chose.
See also
- Draw characters the way the studio does — the switches a game sets, which this recipe measures
- Splats — how the engine draws gaussians
- Load a character — the character itself, by id