You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit fcaac34
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: OloEditor/SandboxProject/Assets/Models/Dog/README.md
+15-5Lines changed: 15 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,15 +14,16 @@ writes it as Alembic hair curves, which the engine cooks into `Grooms/Dog/Dog.ol
14
14
| file | what it is |
15
15
|---|---|
16
16
|`build_dog.py`| the Blender 5.x script that writes everything below, from nothing, and runs the next one |
17
-
|`build_dog_groom.py`| the coat: grown on `Dog.gltf`, written to `.dog-groom/Dog.abc` at the repository root |
17
+
|`build_dog_groom.py`| the coat: grown on `Dog.gltf`, written to `Dog.abc`|
18
+
|`Dog.abc`| the coat's source (Git LFS): one hair object per coat group, which the engine cooks into `Grooms/Dog/Dog.ologroom`|
18
19
|`Dog.gltf` + `Dog.bin`| one skinned mesh (~256k triangles) on a 50-bone rig, eight materials, six clips |
19
20
|`DogCoatColor.png`| 2048² coat colours: DogSkin's albedo and the groom's colour map |
20
21
|`DogNoseNormal.png`, `DogNoseOcclusion.png`| 2048² each, the nose leather's own UV square: its cobblestones, and the occlusion that keeps its nostrils dark |
21
22
|`DogTongueColor.png`, `DogTongueNormal.png`, `DogTongueOcclusion.png`| 1024² each, the tongue's own UV square: its colour (redder root and edges, paler tip, the median groove, the papillae's pale tips, a veined underside), its filiform papillae, and its occlusion |
22
23
|`DogGumColor.png`, `DogGumOcclusion.png`| 1024² each: pink gums with black pigment patches, and the oral cavity's occlusion |
23
24
|`DogLipOcclusion.png`, `DogTeethOcclusion.png`| 1024² each: the lips' and teeth's occlusion, all of the mouth's baked in the Pant pose |
24
25
|`DogIrisColor.png`| 2048², the eyeball's albedo on a planar UV across the gaze: the painted iris (fetched at the refracted iris point), its crisp pupil, and the sclera round it |
25
-
|`Dog.rig.json`| eye radius, eye centres and gaze, lid and socket radii, the clip list |
26
+
|`Dog.rig.json`| eye radius, eye centres and gaze, lid and socket radii, the clip list, the dressing (`assembly`: pelt, lid and fibre colours and the pigment mode), the coat source and the walk speed|
26
27
|`DogEyeball.gltf` + `.bin`| the unit sphere each eye entity draws (128 x 64: the engine's primitive sphere reloads at 16 segments) |
27
28
28
29
Units are metres, Y-up, and the head faces +Z, the convention `Horse.gltf` and `Fox.gltf` use. The
@@ -106,9 +107,18 @@ undercoat, guard hair, long hair and strays per region, Voronoi locks, darkened
106
107
sun-bleached tips. A last pass, `keep_off_other_parts`, cuts any strand short of the other side
107
108
of an ear's edge: the face and cheek fur under a flap otherwise grew straight through it (52% of
108
109
the face's guard hair) and showed as a slit of hair at the flap's front edge. Fur dipping into the
109
-
skin it grows on is left alone. It writes one hair object per coat group into `.dog-groom/Dog.abc`: ~410k
110
-
strands, 57 MB. The archive is a build output, git-ignored, and it stays out of `SandboxProject/Assets`,
111
-
because the editor registers everything it finds there.
110
+
skin it grows on is left alone. It writes one hair object per coat group into `Dog.abc`, beside
111
+
the model: ~410k strands, 57 MB, the coat's source, committed through Git LFS as the other breeds'
112
+
are. `Dog.rig.json` names it (`coatSource`), the shipped coat records it as its provenance, and the
113
+
Content Browser's "Import as Groom" cooks it into the same bytes
114
+
(`TheShippedCoatIsWhatTheEditorImportWrites`). The archive also carries the card tier
115
+
(`groom_card_cell_size`, `groom_card_points`: `CARDS`), so every cook of it builds the same cards.
116
+
Root UVs are written in the engine's convention, Blender's v up (#1560).
117
+
118
+
Blender's Alembic exporter writes the hair objects in a different order on every run, and the
119
+
importer numbers the groups in archive order, so a regenerated archive is the same coat in another
120
+
curve order: every curve-indexed jitter and stride-based LOD subset moves. Cook the shipped coat from
121
+
the committed archive, and regenerate the archive only to change the coat.
112
122
113
123
Blender's Alembic exporter writes a hair object's points and widths and its custom properties, and
114
124
nothing else a groom needs. So each group's coat description (`groom_role`, `groom_tint`,
0 commit comments