VRAM: compact the skinned vertex output (no UV copy, octahedral normal/tangent): 48 B -> 20 B #616

Closed
opened 2026-10-10 01:15:50 +00:00 by sky_line · 2 comments
Owner

The pre-skin writes 48 B per skinned vertex (DrawVertex: fp32 position 12, uv 8, normal 12, tangent 16). The rigged category was 534 MB on an RTX 3070 user's machine in a crowd; the skinned output is most of it.

Scope (no visible loss; positions stay exact fp32)

  1. Stop copying UVs. Skinning never changes UVs: consumers read them from the source vertex (the 20 B QVertex the pre-skin already decodes them from), bit-identical to today. -8 B.
  2. Octahedral normal + tangent at 16 bits per component (tangent sign kept): ~0.005 deg error, invisible in shading. 28 B -> 8 B.

Result: 48 B -> 20 B per skinned vertex (-58% of the skinned output). RT BLAS builds, motion vectors and rig weld are unaffected (positions unchanged). Every consumer of the skinned stream decodes the new layout: rigged raster (all passes), shadow / probe / mirror rigged draws, alpha sort, picking, RT copies, rig weld, motion vectors / history.

Position quantization (16-bit unorm per instance box) is a separate, later follow-up ticket.

The pre-skin writes 48 B per skinned vertex (DrawVertex: fp32 position 12, uv 8, normal 12, tangent 16). The rigged category was 534 MB on an RTX 3070 user's machine in a crowd; the skinned output is most of it. ## Scope (no visible loss; positions stay exact fp32) 1. **Stop copying UVs.** Skinning never changes UVs: consumers read them from the source vertex (the 20 B QVertex the pre-skin already decodes them from), bit-identical to today. -8 B. 2. **Octahedral normal + tangent at 16 bits per component** (tangent sign kept): ~0.005 deg error, invisible in shading. 28 B -> 8 B. Result: 48 B -> 20 B per skinned vertex (-58% of the skinned output). RT BLAS builds, motion vectors and rig weld are unaffected (positions unchanged). Every consumer of the skinned stream decodes the new layout: rigged raster (all passes), shadow / probe / mirror rigged draws, alpha sort, picking, RT copies, rig weld, motion vectors / history. Position quantization (16-bit unorm per instance box) is a separate, later follow-up ticket.
sky_line added this to the Slipstream project 2026-10-10 01:15:50 +00:00
sky_line changed title from VRAM: quantize the skinned (pre-skin output) vertex buffers to VRAM: compact the skinned vertex output (no UV copy, octahedral normal/tangent): 48 B -> 20 B 2026-10-10 01:20:14 +00:00
Author
Owner

Built and pushed (b401f5f8cb, 6713f114e1): skinned vertex output 48 B -> 20 B (fp32 position + octahedral normal/tangent). Shipped in 1.2.0. Only partially exercised in-world so far; moves to Testing until rigged avatars are checked for lighting/normal-map differences and the VRAM saving is measured in a crowd.

Built and pushed (b401f5f8cb, 6713f114e1): skinned vertex output 48 B -> 20 B (fp32 position + octahedral normal/tangent). Shipped in 1.2.0. Only partially exercised in-world so far; moves to Testing until rigged avatars are checked for lighting/normal-map differences and the VRAM saving is measured in a crowd.
Author
Owner

Shipped in a published release and tested; closing (testing-lane sweep 2026-10-11).

Shipped in a published release and tested; closing (testing-lane sweep 2026-10-11).
sky_line 2026-10-11 13:25:17 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#616
No description provided.