Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@
- Vendors Levy's UO_Model3D at upstream e9544f6 (was 3eaae69): 54-bone symmetric rig (no twist, toe, skirt or cloak
chains), action 17 arm fix, narrower shoulders. `blender_build.py` checks the bones it needs by name instead of a bone
count. Mappings use `foot.L/R` where they used `toe.L/R` (#27). Client data is not vendored.
- Vendors UO_Model3D at upstream b212cee (v13.5, was e9544f6): the cloth simulation pins the cloth to the moving
target (it stayed on the first pose), fabric presets, adaptive item render, pose keys re-fitted for natural motion.
`pipeline.py setup` copies `bpy_compat.py` and checks `README.md` (upstream dropped `README_EN.md`).

### Launchers
- Every `.bat` has a one-sentence description, calls `_shared/common.bat` and has a `.sh` twin; new `dev/` launchers
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ headless Blender run, not only a syntax check.

## Key facts

- Canonical body: UO_Model3D by Levy at upstream e9544f6 (`workspace/ultima-online/canonical-model/model/UO_Body_0x190.blend`),
- Canonical body: UO_Model3D by Levy at upstream b212cee (`workspace/ultima-online/canonical-model/model/UO_Body_0x190.blend`),
54 bones (no twist, toe, skirt or cloak chains; `foot.L/R` is the last leg bone; weapon bones `weapon1h.R`, `axe2h.L`,
`bow.L`, `polearm.L`), rig `UO_Rig`, direction = driver `-d*pi/4` on the rig's Z rotation, UO frame i = scene frame 1 + 3i.
- In item renders the body is a holdout: body poking through clothing cuts holes in the item sprite. Asset-pack
Expand Down
2 changes: 1 addition & 1 deletion THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ included with his permission.

## UO_Model3D v13

`third_party/UO_Model3D_v13/` holds UO_Model3D by Levy (upstream commit e9544f6), shared with the
`third_party/UO_Model3D_v13/` holds UO_Model3D by Levy (upstream commit b212cee), shared with the
artist's permission (the model, its fitting pipeline and `vdtool`). It is not
under the MIT license. It contains no data extracted from the Ultima Online
client; see its [NOTICE](third_party/UO_Model3D_v13/NOTICE.md).
Expand Down
2 changes: 1 addition & 1 deletion docs/guides/blender-render-end-to-end.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ workspace\venv\Scripts\python.exe tools/uo-content/pipeline.py setup --source th
This copies the model, its render, bind and VD tools into `workspace/ultima-online/canonical-model/` and records source
hashes. It prints that folder and exits 0. Facts about the body you are now rendering with:

- Levy's UO_Model3D at upstream `e9544f6` (see `third_party/UO_Model3D_v13/provenance.json`), 54 bones, rig `UO_Rig`,
- Levy's UO_Model3D at upstream `b212cee` (see `third_party/UO_Model3D_v13/provenance.json`), 54 bones, rig `UO_Rig`,
35 actions.
- Direction is a driver, `-d*pi/4`, on the rig's Z rotation. UO frame `i` is scene frame `1 + 3i`.
- Do not run setup while a build is running. Re-running it later changes the renderer fingerprint, and then `rebuild`
Expand Down
21 changes: 21 additions & 0 deletions docs/handoff.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,27 @@ in `jobs/` (listed as a partial job by the studio); the fit lab's render index i
jobs started outside the lab need `fit_item` when the saved adjustments hold non-zero item offsets or non-pack
corrections.

## UO_Model3D b212cee (2026-10-20, v13.5, vendored)

`third_party/UO_Model3D_v13/` now holds Levy's repo at b212cee (was e9544f6; through b2d22af and 9db841d, about 140
commits), stripped the same way (the .blend saved by Blender 4.2 through `strip_originals.py`; texts and images as
before, no original atlas, no `.vd`, `.npz`, `.pkl`, `body13` or `test_data`). For SpriteMotion:

- `uo_cloth_sim.py` drives the pinned target with animated shape keys: the old frame handler left the pin on the first
pose and the whole robe drifted 7-12 cm off the body. It gained `thick`, `in_max`, `smooth` (needs scipy, which
Blender does not ship), fabric presets (`fabric=silk|cotton|wool|denim|leather`) and imports `bpy_compat.py`, which
`pipeline.py setup` now copies and the render fingerprint includes.
- `render_uo_layer.py`: 512 adaptive samples for items, `DESPECKLE` 0, `OUTLINE_TARGET` 0.38 (one rim factor per
render, measured on the original items) and optional robe shading (`uo_contrast`, `uo_shade_sleeve/body/width`).
- 9db841d re-fitted the pose keys for natural motion and added the mounted head/neck yaw; b212cee leaves the model
unchanged. A/B on a one-handed katana preview (`weapon1h.R`) between b2d22af and 9db841d: 0.14% of the review sheet
changed.
- Upstream made `README.md` the English README and `README_PL.md` the Polish one (`README_EN.md` is gone);
`pipeline.py setup` now checks `README.md`.
- Measured on a robe built with the cloth pass: `thick` 0.02 (the upstream default) cracked the pleats and left a dark
ring under the hem; 0.005 with `in_max` -1 stayed clean. Upstream measured more leg pixels through the robe in a run
at 0.005, so it is a per-garment choice.

## UO_Model3D e9544f6 (2026-10-09, vendored, SM-MODEL3)

`third_party/UO_Model3D_v13/` now holds Levy's repo at e9544f6 (was 3eaae69), stripped as in its NOTICE. The rig is 54
Expand Down
6 changes: 3 additions & 3 deletions third_party/UO_Model3D_v13/NOTICE.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
UO_Model3D v13 by Levy, shared with the artist's permission.

A rigged 3D rebuild of the Ultima Online male body (body 0x190) with its fitting pipeline. SpriteMotion uses it as the
canonical body (rig `UO_Rig`, 54 bones since the 2026-10-09 update). Start with `README_EN.md` (English) or
`README.md` (Polish).
canonical body (rig `UO_Rig`, 54 bones since the 2026-10-09 update). Start with `README.md` (English) or
`README_PL.md` (Polish).

## What is here

Upstream commit: https://github.com/Kserian/UO_Model3D at `e9544f6` (2026-10-09; the previous copy was `3eaae69`).
Upstream commit: https://github.com/Kserian/UO_Model3D at `b212cee` (2026-10-20, v13.5; the previous copy here was `e9544f6`).
`model/` (the `.blend` and the albedo PNGs), `pipeline/` (scripts, `cloak_pitch.json`, `weapon_motion.json`), `vdtool/`,
and the two READMEs. The `.blend` is stored with git LFS (`git lfs pull` after cloning). Upstream publishes no `.fbx`
or `.glb` and SpriteMotion reads none, so none is shipped.
Expand Down
Loading
Loading