Mesh upload: better auto-generated LODs (attribute / skin-weight aware simplification, vertex placement, error shown in the UI) #618

Open
opened 2026-10-10 01:28:56 +00:00 by sky_line · 0 comments
Owner

Many SL LODs, including the owner's own, are made with the viewer's mesh upload window (Generate / auto LODs). Better simplification there gives every Slipstream-uploaded mesh better LODs for everyone who views it, in every viewer.

Today

The upload window's generator (llmodelpreview.cpp -> indra/llmeshoptimizer/llmeshoptimizer.cpp) uses meshoptimizer's meshopt_simplify (positions only) and falls back to meshopt_simplifySloppy (ignores topology). It does not look at normals, UVs, skin weights or seams.

Investigate / do

  • Attribute-aware simplification: meshopt_simplifyWithAttributes with normal, UV and (for rigged mesh) skin-weight attributes, the same approach as our runtime decimator (#561), and keep UV seams and material boundaries.
  • Rigged-aware: protect vertices whose weights mix joints (elbows, knees, shoulders), so LODs don't collapse when the avatar bends; optionally measure error in a few representative poses, not only the bind pose.
  • Layer-aware option for clothing: keep the reduced surface outside the original (no shrink into the body), the same idea as #611.
  • Vertex placement: evaluate meshopt_simplifyWithUpdate (0.25, experimental): moves kept vertices to better positions, which reduces shrinkage. It's fine for uploads, since the uploaded LOD is its own geometry.
  • Error-driven targets in the UI: show each generated LOD's measured error (in metres / at the distance it switches) next to its triangle count, and offer "target error" alongside "target triangles".
  • Keep the upload request byte-compatible: only the generated geometry changes, and the creator still reviews and chooses it before paying for the upload.

Related: #561 (runtime decimator), #611, #612, #613.

Many SL LODs, including the owner's own, are made with the viewer's mesh upload window (Generate / auto LODs). Better simplification there gives every Slipstream-uploaded mesh better LODs for everyone who views it, in every viewer. ## Today The upload window's generator (`llmodelpreview.cpp` -> `indra/llmeshoptimizer/llmeshoptimizer.cpp`) uses meshoptimizer's `meshopt_simplify` (positions only) and falls back to `meshopt_simplifySloppy` (ignores topology). It does not look at normals, UVs, skin weights or seams. ## Investigate / do - **Attribute-aware simplification:** `meshopt_simplifyWithAttributes` with normal, UV and (for rigged mesh) skin-weight attributes, the same approach as our runtime decimator (#561), and keep UV seams and material boundaries. - **Rigged-aware:** protect vertices whose weights mix joints (elbows, knees, shoulders), so LODs don't collapse when the avatar bends; optionally measure error in a few representative poses, not only the bind pose. - **Layer-aware option** for clothing: keep the reduced surface outside the original (no shrink into the body), the same idea as #611. - **Vertex placement:** evaluate `meshopt_simplifyWithUpdate` (0.25, experimental): moves kept vertices to better positions, which reduces shrinkage. It's fine for uploads, since the uploaded LOD is its own geometry. - **Error-driven targets in the UI:** show each generated LOD's measured error (in metres / at the distance it switches) next to its triangle count, and offer "target error" alongside "target triangles". - Keep the upload request byte-compatible: only the generated geometry changes, and the creator still reviews and chooses it before paying for the upload. Related: #561 (runtime decimator), #611, #612, #613.
sky_line added this to the Slipstream project 2026-10-10 01:28:56 +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#618
No description provided.