# Quaternius build sources (CC0 1.0) These are the **build inputs** for the shipped NPC roster, not runtime assets. `blender_src/.gdignore` keeps Godot from importing this directory. Source: Quaternius *Ultimate Modular Characters* and *Ultimate Modular Women* (), licence CC0 1.0, attribution recorded in the repository `CREDITS.md`. | File | SHA-256 | Bones | Meshes | | --- | --- | --- | --- | | `Casual.glb` | `bc2d84fba249ebaa0629cb9d133ad37234196e4b8004aa205a6397abed04e05c` | 62 | 4 skinned + Icosphere helper | | `Casual_Hoodie.glb` | `f5b722199f7628b24550989af4230f65d5230727df9c326fd2b3e360effe5249` | 62 | 4 skinned + Icosphere helper | | `Worker.glb` | `8d0f454336c2effc5c08f63a177af3a82d1a7af025ca9588b40e4c90c4703534` | 62 | 4 skinned + Icosphere helper | Each file also carries 24 animation clips; the build exports **no** animation data, so the shipped GLBs contain the mesh, the 62-joint skin and the material slots only. Reproducing the shipped characters: flatpak run org.blender.Blender --background \ --python "$PWD/tools/blender_assets.py" -- build --only npc Upstream quirks the build compensates for (see `docs/assets/npc-model-sourcing.md`): 1. every mesh ships a **degenerate UV map** (all loops at `0,0`) with flat-colour materials, so the build Smart-UV-unwraps and repacks before export; 2. the meshes must be joined **without welding** — `remove_doubles` corrupts the skin weights; 3. the rest pose is a T-pose, so the arm-down rest is baked by `_bake_quaternius_rest()`; 4. the upstream material names differ per file, so each source carries a slot map down to the project's five tint slots.