tosijs-3d 0.12.1 → 0.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -2
- package/changelog/v0.12.2.md +26 -0
- package/dist/character-builder.d.ts +1 -24
- package/dist/character-builder.d.ts.map +1 -1
- package/dist/character-builder.js +62 -71
- package/dist/character-builder.js.map +1 -1
- package/dist/character-core.d.ts.map +1 -1
- package/dist/character-core.js +8 -1
- package/dist/character-core.js.map +1 -1
- package/dist/character-settings.d.ts.map +1 -1
- package/dist/character-settings.js +1 -0
- package/dist/character-settings.js.map +1 -1
- package/dist/character-store.d.ts +16 -0
- package/dist/character-store.d.ts.map +1 -1
- package/dist/character-store.js +17 -0
- package/dist/character-store.js.map +1 -1
- package/dist/character.d.ts.map +1 -1
- package/dist/character.js +22 -60
- package/dist/character.js.map +1 -1
- package/dist/cloth-bake.d.ts +12 -0
- package/dist/cloth-bake.d.ts.map +1 -0
- package/dist/cloth-bake.js +75 -0
- package/dist/cloth-bake.js.map +1 -0
- package/dist/extremes-bones.d.ts +31 -0
- package/dist/extremes-bones.d.ts.map +1 -0
- package/dist/extremes-bones.js +130 -0
- package/dist/extremes-bones.js.map +1 -0
- package/dist/extremes-corners.d.ts +17 -0
- package/dist/extremes-corners.d.ts.map +1 -0
- package/dist/extremes-corners.js +137 -0
- package/dist/extremes-corners.js.map +1 -0
- package/dist/extremes-penetration.d.ts +53 -0
- package/dist/extremes-penetration.d.ts.map +1 -0
- package/dist/extremes-penetration.js +120 -0
- package/dist/extremes-penetration.js.map +1 -0
- package/dist/extremes-report.d.ts +73 -0
- package/dist/extremes-report.d.ts.map +1 -0
- package/dist/extremes-report.js +303 -0
- package/dist/extremes-report.js.map +1 -0
- package/dist/extremes-sheet.d.ts +18 -0
- package/dist/extremes-sheet.d.ts.map +1 -0
- package/dist/extremes-sheet.js +239 -0
- package/dist/extremes-sheet.js.map +1 -0
- package/dist/extremes-sweep.d.ts +117 -0
- package/dist/extremes-sweep.d.ts.map +1 -0
- package/dist/extremes-sweep.js +258 -0
- package/dist/extremes-sweep.js.map +1 -0
- package/dist/eye-art.d.ts +52 -0
- package/dist/eye-art.d.ts.map +1 -0
- package/dist/eye-art.js +152 -0
- package/dist/eye-art.js.map +1 -0
- package/dist/fit-extremes.d.ts +7 -0
- package/dist/fit-extremes.d.ts.map +1 -0
- package/dist/fit-extremes.js +55 -0
- package/dist/fit-extremes.js.map +1 -0
- package/dist/glb-chunks.d.ts.map +1 -1
- package/dist/glb-chunks.js.map +1 -1
- package/dist/hair-place.d.ts +135 -0
- package/dist/hair-place.d.ts.map +1 -0
- package/dist/hair-place.js +396 -0
- package/dist/hair-place.js.map +1 -0
- package/dist/human-face.d.ts +11 -1
- package/dist/human-face.d.ts.map +1 -1
- package/dist/human-face.js +86 -3
- package/dist/human-face.js.map +1 -1
- package/dist/human-hair.d.ts +5 -87
- package/dist/human-hair.d.ts.map +1 -1
- package/dist/human-hair.js +11 -245
- package/dist/human-hair.js.map +1 -1
- package/dist/index.d.ts +11 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/mesh-sdf.d.ts +30 -0
- package/dist/mesh-sdf.d.ts.map +1 -0
- package/dist/mesh-sdf.js +453 -0
- package/dist/mesh-sdf.js.map +1 -0
- package/dist/png.d.ts +12 -0
- package/dist/png.d.ts.map +1 -1
- package/dist/png.js +82 -1
- package/dist/png.js.map +1 -1
- package/dist/proxy-cover.d.ts +23 -0
- package/dist/proxy-cover.d.ts.map +1 -1
- package/dist/proxy-cover.js +31 -18
- package/dist/proxy-cover.js.map +1 -1
- package/dist/skin-paint.d.ts +35 -0
- package/dist/skin-paint.d.ts.map +1 -0
- package/dist/skin-paint.js +156 -0
- package/dist/skin-paint.js.map +1 -0
- package/dist/skinned-glb.d.ts +6 -0
- package/dist/skinned-glb.d.ts.map +1 -1
- package/dist/skinned-glb.js +11 -0
- package/dist/skinned-glb.js.map +1 -1
- package/dist/widgets3d.d.ts +13 -0
- package/dist/widgets3d.d.ts.map +1 -1
- package/dist/widgets3d.js +31 -1
- package/dist/widgets3d.js.map +1 -1
- package/package.json +2 -1
- package/static/attributes.json +4 -0
- package/static/attributes.txt +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -12,13 +12,14 @@ Upgrading across a minor? Start with [Migration](/Migration/).
|
|
|
12
12
|
|
|
13
13
|
## Unreleased
|
|
14
14
|
|
|
15
|
-
## 0.12.
|
|
15
|
+
## 0.12.2
|
|
16
16
|
|
|
17
|
-
The latest release.
|
|
17
|
+
The latest release. More of the character, engine-free (eyes from Tonio's art, hair placement, lips and stubble as vertex colours, cloth recoloured into its texture, the extremes sweep), and the builder's save and rename ask in a popup. See [0.12.2](/v0.12.2/).
|
|
18
18
|
|
|
19
19
|
## Every version
|
|
20
20
|
|
|
21
21
|
<!-- toc -->
|
|
22
|
+
- [0.12.2](/v0.12.2/)
|
|
22
23
|
- [0.12.1](/v0.12.1/)
|
|
23
24
|
- [0.12.0](/v0.12.0/)
|
|
24
25
|
- [0.11.6](/v0.11.6/)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 0.12.2
|
|
2
|
+
|
|
3
|
+
<!--{ "parent": "CHANGELOG", "order": 9987998 }-->
|
|
4
|
+
|
|
5
|
+
More of the character, engine-free: eyes from Tonio's art, hair placed with no engine, lips and stubble as vertex colours, cloth recoloured into its texture, and the extremes sweep, all moved here from Dramatis. The character builder's save and rename ask in a popup.
|
|
6
|
+
|
|
7
|
+
Size: barrel (min, packages external) 1516.6 KB raw / 526.0 KB gz, up 6.2 KB / 2.3 KB gz (+0.4%): the eye art painter, `pngDecode` and the save popup are in the barrel; the rest are subpaths.
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **Eyes from a picture**: `eyeTexture({ style: 'basic' | 'anime' })` paints Tonio's CC0 eye art with its iris recoloured, and a character's new `eyeStyle` setting picks it (`basic` by default; `drawn` keeps the eye drawn in code, which also shows while the art loads). `tosijs-3d/eye-art` is the engine-free half: the art's URLs, `recolourEyePng`, and `gltfEyeUvs` for an export. `pngDecode` joins `pngEncode`.
|
|
12
|
+
- **`tosijs-3d/hair-place`**: hair placed on a body's head with no engine (`headScalp`, `placeHair`, and the hair library read from its GLB with `readHairLibrary`). `human-hair` uses it and re-exports what it exported before.
|
|
13
|
+
- **Baked materials**: `tosijs-3d/skin-paint` (`lipTint`, `stubbleTint`, `stubbleMask`) gives the lips and stubble as per-vertex colours over the skin's albedo, and `writeSkinnedGlb` writes them as `COLOR_0` (a primitive's new `colors`), which glTF multiplies into the base colour, so no texture is needed. `tosijs-3d/cloth-bake` (`recolourCloth`, `textureMean`, `clothSheenColour`) bakes a garment's recolour into its texture as cloth-shading draws it. `lipTint` and `stubbleTint` moved from character-builder and are still exported from the barrel.
|
|
14
|
+
- **`tosijs-3d/fit-extremes`** and **`bun run extremes`**: every MakeHuman garment and Quaternius hairstyle on 133 bodies at the sliders' corners, measured for penetration (raw, and visible past the skin's tuck) and bone sanity, with a markdown/JSON report and a headless contact sheet of the worst cases.
|
|
15
|
+
- **`tosijs-3d/mesh-sdf`**: signed distance to a triangle mesh.
|
|
16
|
+
- **`coverDepths`** (proxy-cover): how deep each skin vertex goes under what is worn, the rule `coverSkin` applies before its fade.
|
|
17
|
+
- **`button3d({ popup })`**: a button that opens a small form (controls, flat and in a headset) in a popup anchored to it; the controls get a handle to close it or show the next step.
|
|
18
|
+
- All the new modules are in the engine-free [character core](/character-core/).
|
|
19
|
+
|
|
20
|
+
## Changed
|
|
21
|
+
|
|
22
|
+
- **Character builder**: `save…` asks for the name in a popup (filled in with the current one), refuses a blank name or the working figure's with a reason, and asks before replacing another saved character; `rename…` renames the picked one. Both work in a headset. `nameCharacter` (character-store) is the rule.
|
|
23
|
+
|
|
24
|
+
## Fixed
|
|
25
|
+
|
|
26
|
+
- Stubble no longer darkens the lower lip.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as BABYLON from '@babylonjs/core';
|
|
2
2
|
import type { HumanPack } from './human-pack.js';
|
|
3
3
|
import { type SkinShadingPlugin } from './skin-shading.js';
|
|
4
|
-
import type { HumanSkin } from './human-rig.js';
|
|
5
4
|
export interface HumanBody {
|
|
6
5
|
/** Move, turn and scale the body by this. */
|
|
7
6
|
root: BABYLON.TransformNode;
|
|
@@ -29,27 +28,5 @@ export declare function skinMaterial(scene: BABYLON.Scene, options?: {
|
|
|
29
28
|
/** `false` for plain PBR, without skin-shading's scatter, rim and back-light. */
|
|
30
29
|
shading?: boolean;
|
|
31
30
|
}): SkinMaterial;
|
|
32
|
-
|
|
33
|
-
* Per-vertex colours (RGBA, the skin's vertices) that turn a skin material's
|
|
34
|
-
* colour into the lips' where `lips` (a pack region, every vertex) says so.
|
|
35
|
-
* They multiply the material's albedo, so they are the ratio lip / skin.
|
|
36
|
-
* Their alpha carries `thin` (per skin vertex, from `skinThinness`), which
|
|
37
|
-
* skin-shading's back-light reads; without it, alpha is 0 (nothing glows).
|
|
38
|
-
*/
|
|
39
|
-
export declare function lipTint(skin: HumanSkin, lips: Float32Array, tone: number, redness?: number, into?: Float32Array, thin?: ArrayLike<number>): Float32Array;
|
|
40
|
-
/**
|
|
41
|
-
* Stubble: multiply `colours` (RGBA per skin vertex, from `lipTint`) toward
|
|
42
|
-
* a hair colour where `mask` (0..1 per skin vertex) says the beard grows,
|
|
43
|
-
* by `amount` (0 clean-shaven, 1 a few days' growth). `skinRgb` and `hairRgb`
|
|
44
|
-
* are linear; the result stays a ratio over the skin's own colour.
|
|
45
|
-
*/
|
|
46
|
-
export declare function stubbleTint(colours: Float32Array, mask: ArrayLike<number>, amount: number, skinRgb: {
|
|
47
|
-
r: number;
|
|
48
|
-
g: number;
|
|
49
|
-
b: number;
|
|
50
|
-
}, hairRgb: {
|
|
51
|
-
r: number;
|
|
52
|
-
g: number;
|
|
53
|
-
b: number;
|
|
54
|
-
}): Float32Array;
|
|
31
|
+
export { lipTint, stubbleTint } from './skin-paint.js';
|
|
55
32
|
//# sourceMappingURL=character-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-builder.d.ts","sourceRoot":"","sources":["../src/character-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"character-builder.d.ts","sourceRoot":"","sources":["../src/character-builder.ts"],"names":[],"mappings":"AA66BA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEvE,MAAM,WAAW,SAAS;IACxB,6CAA6C;IAC7C,IAAI,EAAE,OAAO,CAAC,aAAa,CAAA;IAC3B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAA;IAClB,8EAA8E;IAC9E,MAAM,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;IACrC,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,IAAI,EAAE,SAAS,EACf,IAAI,SAAU,GACb,SAAS,CAwDX;AAED,MAAM,WAAW,YAAa,SAAQ,OAAO,CAAC,WAAW;IACvD,2EAA2E;IAC3E,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,wFAAwF;IACxF,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAClC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAA;CACb,GACL,YAAY,CAmBd;AAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -11,26 +11,58 @@ plays UAL's clips at any shape.
|
|
|
11
11
|
## Demo
|
|
12
12
|
|
|
13
13
|
```js
|
|
14
|
-
import { b3d, b3dSun, b3dLight, slider3d, select3d, toggle3d, label3d, text3d, assetUrl, DEFAULT_HUMAN_BODY, HAIR_COLOURS, colorPicker3d, clothRecipe, materialPicker3d, studioEnvironment, irisColor, lipSync, readSkeleton, retargetClip, button3d, ui, writeGarmentGlb, writeGarmentObj, readGarment, writeCharacter, readCharacter, mountTailorTool, chooseFile, b3dPanel, panel3d, makeCharacter, loadCharacterAssets, DEFAULT_CHARACTER, CHARACTER_SLOTS, CHARACTER_SOURCES, characterStore, WORKING_CHARACTER } from 'tosijs-3d'
|
|
14
|
+
import { b3d, b3dSun, b3dLight, slider3d, select3d, toggle3d, label3d, text3d, assetUrl, DEFAULT_HUMAN_BODY, HAIR_COLOURS, colorPicker3d, clothRecipe, materialPicker3d, studioEnvironment, irisColor, lipSync, readSkeleton, retargetClip, button3d, ui, writeGarmentGlb, writeGarmentObj, readGarment, writeCharacter, readCharacter, mountTailorTool, chooseFile, b3dPanel, panel3d, makeCharacter, loadCharacterAssets, DEFAULT_CHARACTER, CHARACTER_SLOTS, CHARACTER_SOURCES, characterStore, WORKING_CHARACTER, nameCharacter } from 'tosijs-3d'
|
|
15
15
|
import { tosi } from 'tosijs'
|
|
16
16
|
import { mountRigTool } from 'tosijs-3d/rig-tool'
|
|
17
17
|
|
|
18
18
|
// Everything the panel sets, as it starts: what a saved character is read against.
|
|
19
|
-
const START = { ...DEFAULT_HUMAN_BODY, gender: 1, clip: 'Walk_Loop', tone: 0.3, redness: 0.5, iris: 0.2, irisColour: '#5a3519', hair: 'short02', beard: 'none', moustache: 'none', brows: 'eyebrow001', hairBase: HAIR_COLOURS.brown.base, hairHighlight: HAIR_COLOURS.brown.highlight, hairUp: 0, hairForward: 0, hairSize: 1, outfit: 'male_casualsuit02', bodysuit: 'none', armour: 'none', top: 'none', bottom: 'none', shoes: 'shoes01', hat: 'none', glasses: 'none', gloves: 'none', mask: 'none', editing: 'outfit', look: 'as made', clothLook: clothRecipe({ fabric: 'cotton', colour: '#7a2e2e', recolour: 0 }), paused: false, stubble: 0, blink: true, talk: false, mic: false, smile: 0, browsUp: 0, frown: 0, tailorThickness: 0.005, tailorSkirt: false, tailorLook: clothRecipe({ fabric: 'cotton', colour: '#3b5b8a', recolour: 1 }), tailorAlone: false, tailorName: '', tailorSlot: 'top', exportBody: true, rigs: {}, surfaces: {}, source: 'MakeHuman', characterName: '', characterPick: '' }
|
|
19
|
+
const START = { ...DEFAULT_HUMAN_BODY, gender: 1, clip: 'Walk_Loop', tone: 0.3, redness: 0.5, iris: 0.2, irisColour: '#5a3519', eyeStyle: 'basic', hair: 'short02', beard: 'none', moustache: 'none', brows: 'eyebrow001', hairBase: HAIR_COLOURS.brown.base, hairHighlight: HAIR_COLOURS.brown.highlight, hairUp: 0, hairForward: 0, hairSize: 1, outfit: 'male_casualsuit02', bodysuit: 'none', armour: 'none', top: 'none', bottom: 'none', shoes: 'shoes01', hat: 'none', glasses: 'none', gloves: 'none', mask: 'none', editing: 'outfit', look: 'as made', clothLook: clothRecipe({ fabric: 'cotton', colour: '#7a2e2e', recolour: 0 }), paused: false, stubble: 0, blink: true, talk: false, mic: false, smile: 0, browsUp: 0, frown: 0, tailorThickness: 0.005, tailorSkirt: false, tailorLook: clothRecipe({ fabric: 'cotton', colour: '#3b5b8a', recolour: 1 }), tailorAlone: false, tailorName: '', tailorSlot: 'top', exportBody: true, rigs: {}, surfaces: {}, source: 'MakeHuman', characterName: '', characterPick: '' }
|
|
20
20
|
const { walker } = tosi({ walker: structuredClone(START) })
|
|
21
21
|
// What a character file keeps: not the editor's view of one slot (that is in
|
|
22
22
|
// cloth), the microphone (it would ask on load), or the save controls.
|
|
23
23
|
const KEPT = Object.keys(START).filter((k) => !['editing', 'look', 'clothLook', 'mic', 'characterName', 'characterPick'].includes(k))
|
|
24
24
|
// Saving and loading characters, wired when the page is up.
|
|
25
|
-
const character = { save: () => {}, load: () => {}, forget: () => {}, exportJson: () => {}, importJson: () => {}, changed: () => {}, saved: [], note: '' }
|
|
25
|
+
const character = { save: () => {}, rename: () => {}, load: () => {}, forget: () => {}, exportJson: () => {}, importJson: () => {}, changed: () => {}, saved: [], note: '' }
|
|
26
|
+
// A name asked for in a popup (works in a headset too): refused with its
|
|
27
|
+
// reason, and a confirm before it replaces ANOTHER saved character.
|
|
28
|
+
const namePopup = (pop, { prompt, initial, current, verb, act }) => {
|
|
29
|
+
let typed = initial
|
|
30
|
+
const go = () => {
|
|
31
|
+
const d = nameCharacter(typed, character.saved, current)
|
|
32
|
+
if (!d.ok) return pop.show(form(d.message))
|
|
33
|
+
if (!d.replaces) {
|
|
34
|
+
pop.close()
|
|
35
|
+
return act(d.name)
|
|
36
|
+
}
|
|
37
|
+
pop.show([
|
|
38
|
+
text3d({ text: `${d.name} is already saved. Replace it?` }),
|
|
39
|
+
button3d({ label: 'replace', handleClick: () => { pop.close(); act(d.name) } }),
|
|
40
|
+
button3d({ label: 'cancel', handleClick: () => pop.close() }),
|
|
41
|
+
])
|
|
42
|
+
}
|
|
43
|
+
const form = (message) => [
|
|
44
|
+
text3d({ text: message }),
|
|
45
|
+
ui.inputField({ value: typed, placeholder: 'name', handleChange: (v) => { typed = v }, handleEnter: (v) => { typed = v; go() } }),
|
|
46
|
+
button3d({ label: verb, handleClick: go }),
|
|
47
|
+
button3d({ label: 'cancel', handleClick: () => pop.close() }),
|
|
48
|
+
]
|
|
49
|
+
return form(prompt)
|
|
50
|
+
}
|
|
26
51
|
const characterRows = () => [
|
|
27
52
|
label3d({ text: 'Character', collapsible: true }),
|
|
28
|
-
|
|
29
|
-
button3d({
|
|
53
|
+
...(walker.characterName.value ? [text3d({ text: walker.characterName.value })] : []),
|
|
54
|
+
button3d({
|
|
55
|
+
label: 'save…',
|
|
56
|
+
popup: (pop) => namePopup(pop, { prompt: 'save as', initial: walker.characterName.value, current: walker.characterName.value, verb: 'save', act: (name) => character.save(name) }),
|
|
57
|
+
}),
|
|
30
58
|
...(character.saved.length
|
|
31
59
|
? [
|
|
32
60
|
select3d({ label: 'saved', value: walker.characterPick, options: character.saved }),
|
|
33
61
|
button3d({ label: 'load', handleClick: () => character.load() }),
|
|
62
|
+
button3d({
|
|
63
|
+
label: 'rename…',
|
|
64
|
+
popup: (pop) => namePopup(pop, { prompt: `rename ${walker.characterPick.value} to`, initial: walker.characterPick.value, current: walker.characterPick.value, verb: 'rename', act: (name) => character.rename(walker.characterPick.value, name) }),
|
|
65
|
+
}),
|
|
34
66
|
button3d({ label: 'forget', handleClick: () => character.forget() }),
|
|
35
67
|
]
|
|
36
68
|
: []),
|
|
@@ -192,6 +224,7 @@ preview.append(
|
|
|
192
224
|
slider3d({ label: 'tone', value: walker.tone, min: 0, max: 1, step: 0.01 }),
|
|
193
225
|
slider3d({ label: 'redness', value: walker.redness, min: 0, max: 1, step: 0.01 }),
|
|
194
226
|
label3d({ text: 'Eyes', collapsible: true }),
|
|
227
|
+
select3d({ label: 'eye style', value: walker.eyeStyle, options: ['basic', 'anime', 'drawn'] }),
|
|
195
228
|
colorPicker3d({ label: 'eye colour', value: walker.irisColour, alpha: false, defaultPresets: 'off', presets: [['dark brown', 0], ['brown', 0.15], ['amber', 0.3], ['hazel', 0.45], ['green', 0.6], ['blue-green', 0.72], ['blue', 0.85], ['grey', 1]].map(([name, t]) => { const c = irisColor(t); const h = (x) => Math.round(x * 255).toString(16).padStart(2, '0'); return { name, value: '#' + h(c.r) + h(c.g) + h(c.b) } }) }),
|
|
196
229
|
label3d({ text: 'Face', collapsible: true }),
|
|
197
230
|
toggle3d({ label: 'blink', value: walker.blink }),
|
|
@@ -741,18 +774,33 @@ preview.append(
|
|
|
741
774
|
}, 800)
|
|
742
775
|
}
|
|
743
776
|
for (const k of [...KEPT, 'look', 'clothLook']) walker[k].observe(() => character.changed())
|
|
744
|
-
character.save = async () => {
|
|
745
|
-
const name = walker.characterName.value.trim()
|
|
746
|
-
if (!name || name === WORKING) return tell('name the character first')
|
|
777
|
+
character.save = async (name) => {
|
|
747
778
|
try {
|
|
748
779
|
await store.put(name, snapshot(name))
|
|
749
780
|
} catch (e) {
|
|
750
781
|
return tell(`could not save: ${e?.message ?? e}`)
|
|
751
782
|
}
|
|
783
|
+
walker.characterName.value = name
|
|
752
784
|
walker.characterPick.value = name
|
|
753
785
|
tell(`saved ${name}`)
|
|
754
786
|
listSaved()
|
|
755
787
|
}
|
|
788
|
+
// Put under the new name, then the old one goes.
|
|
789
|
+
character.rename = async (from, to) => {
|
|
790
|
+
if (to === from) return
|
|
791
|
+
try {
|
|
792
|
+
const doc = await store.get(from)
|
|
793
|
+
if (!doc) return tell(`no character called ${from}`)
|
|
794
|
+
await store.put(to, { ...doc, name: to })
|
|
795
|
+
await store.delete(from)
|
|
796
|
+
} catch (e) {
|
|
797
|
+
return tell(`could not rename: ${e?.message ?? e}`)
|
|
798
|
+
}
|
|
799
|
+
if (walker.characterName.value === from) walker.characterName.value = to
|
|
800
|
+
walker.characterPick.value = to
|
|
801
|
+
tell(`renamed ${from} to ${to}`)
|
|
802
|
+
listSaved()
|
|
803
|
+
}
|
|
756
804
|
character.load = async () => {
|
|
757
805
|
const name = walker.characterPick.value
|
|
758
806
|
const doc = name && (await store.get(name).catch(() => null))
|
|
@@ -826,8 +874,10 @@ saved with the character; **cancel** keeps the one it had. The first binding is
|
|
|
826
874
|
off the body's outline.
|
|
827
875
|
|
|
828
876
|
**Character** keeps your work. The figure you are working on is kept in this
|
|
829
|
-
browser as you change it and comes back when you open the page again. **Save
|
|
830
|
-
|
|
877
|
+
browser as you change it and comes back when you open the page again. **Save…**
|
|
878
|
+
asks for a name (the one it has, to start with) to keep it under, and asks
|
|
879
|
+
first before replacing another saved character. Pick a saved one to **load**,
|
|
880
|
+
**rename…** or **forget** it. **Export
|
|
831
881
|
JSON** to take it elsewhere and **import JSON…** to bring one in. A file
|
|
832
882
|
carries everything the panel sets, and the garments of your own the character
|
|
833
883
|
wears travel inside it ([character-file](/character-file/)).
|
|
@@ -889,7 +939,7 @@ body's triangles.
|
|
|
889
939
|
*/
|
|
890
940
|
/*{ "parent": "b3d-biped", "order": 80 }*/
|
|
891
941
|
import * as BABYLON from '@babylonjs/core';
|
|
892
|
-
import {
|
|
942
|
+
import { skinAlbedo } from './skin-tone.js';
|
|
893
943
|
import { skinShading } from './skin-shading.js';
|
|
894
944
|
export function humanBody(scene, pack, name = 'human') {
|
|
895
945
|
const root = new BABYLON.TransformNode(name, scene);
|
|
@@ -968,64 +1018,5 @@ export function skinMaterial(scene, options = {}) {
|
|
|
968
1018
|
m.shading = options.shading === false ? null : skinShading(m);
|
|
969
1019
|
return m;
|
|
970
1020
|
}
|
|
971
|
-
|
|
972
|
-
* Per-vertex colours (RGBA, the skin's vertices) that turn a skin material's
|
|
973
|
-
* colour into the lips' where `lips` (a pack region, every vertex) says so.
|
|
974
|
-
* They multiply the material's albedo, so they are the ratio lip / skin.
|
|
975
|
-
* Their alpha carries `thin` (per skin vertex, from `skinThinness`), which
|
|
976
|
-
* skin-shading's back-light reads; without it, alpha is 0 (nothing glows).
|
|
977
|
-
*/
|
|
978
|
-
export function lipTint(skin, lips, tone, redness = 0.5, into, thin) {
|
|
979
|
-
const s = skinAlbedo(tone, redness);
|
|
980
|
-
const l = lipAlbedo(tone, redness);
|
|
981
|
-
const ratio = [l.r / s.r, l.g / s.g, l.b / s.b];
|
|
982
|
-
const out = into ?? new Float32Array(skin.vertices.length * 4);
|
|
983
|
-
skin.vertices.forEach((v, i) => {
|
|
984
|
-
// The mask is how far the lip targets move a vertex, so the lips' own
|
|
985
|
-
// edges are faint in it: anything past half is all lip.
|
|
986
|
-
const m = Math.min(1, Math.max(0, (lips[v] - 0.05) / 0.45));
|
|
987
|
-
const t = m * m * (3 - 2 * m);
|
|
988
|
-
out[i * 4] = 1 + (ratio[0] - 1) * t;
|
|
989
|
-
out[i * 4 + 1] = 1 + (ratio[1] - 1) * t;
|
|
990
|
-
out[i * 4 + 2] = 1 + (ratio[2] - 1) * t;
|
|
991
|
-
out[i * 4 + 3] = thin ? thin[i] : 0;
|
|
992
|
-
});
|
|
993
|
-
return out;
|
|
994
|
-
}
|
|
995
|
-
/**
|
|
996
|
-
* Stubble: multiply `colours` (RGBA per skin vertex, from `lipTint`) toward
|
|
997
|
-
* a hair colour where `mask` (0..1 per skin vertex) says the beard grows,
|
|
998
|
-
* by `amount` (0 clean-shaven, 1 a few days' growth). `skinRgb` and `hairRgb`
|
|
999
|
-
* are linear; the result stays a ratio over the skin's own colour.
|
|
1000
|
-
*/
|
|
1001
|
-
export function stubbleTint(colours, mask, amount, skinRgb, hairRgb) {
|
|
1002
|
-
if (amount <= 0)
|
|
1003
|
-
return colours;
|
|
1004
|
-
/*
|
|
1005
|
-
Short hairs over skin read as a SHADOW: the hair seen through the skin is
|
|
1006
|
-
darker than the hair itself, and a little cool (a five o'clock shadow is
|
|
1007
|
-
blue-grey on fair skin). So the skin goes most of the way to a darkened
|
|
1008
|
-
hair colour with a touch of blue. Mixing toward the hair colour itself was
|
|
1009
|
-
too faint to see at full, worst on light-brown hair.
|
|
1010
|
-
*/
|
|
1011
|
-
const dark = {
|
|
1012
|
-
r: hairRgb.r * 0.45,
|
|
1013
|
-
g: hairRgb.g * 0.5,
|
|
1014
|
-
b: hairRgb.b * 0.6 + 0.01,
|
|
1015
|
-
};
|
|
1016
|
-
const ratio = [
|
|
1017
|
-
(dark.r * 0.6 + skinRgb.r * 0.4) / Math.max(1e-4, skinRgb.r),
|
|
1018
|
-
(dark.g * 0.6 + skinRgb.g * 0.4) / Math.max(1e-4, skinRgb.g),
|
|
1019
|
-
(dark.b * 0.6 + skinRgb.b * 0.4) / Math.max(1e-4, skinRgb.b),
|
|
1020
|
-
];
|
|
1021
|
-
for (let i = 0; i < mask.length; i++) {
|
|
1022
|
-
const k = mask[i] * Math.min(1, amount);
|
|
1023
|
-
if (k <= 0)
|
|
1024
|
-
continue;
|
|
1025
|
-
for (let c = 0; c < 3; c++) {
|
|
1026
|
-
colours[i * 4 + c] *= 1 + (Math.min(1, ratio[c]) - 1) * k;
|
|
1027
|
-
}
|
|
1028
|
-
}
|
|
1029
|
-
return colours;
|
|
1030
|
-
}
|
|
1021
|
+
export { lipTint, stubbleTint } from './skin-paint.js';
|
|
1031
1022
|
//# sourceMappingURL=character-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-builder.js","sourceRoot":"","sources":["../src/character-builder.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"character-builder.js","sourceRoot":"","sources":["../src/character-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-core.d.ts","sourceRoot":"","sources":["../src/character-core.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"character-core.d.ts","sourceRoot":"","sources":["../src/character-core.ts"],"names":[],"mappings":"AAuDA,OAAO,EAAE,CAAA"}
|
package/dist/character-core.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*#
|
|
2
2
|
# character core
|
|
3
3
|
|
|
4
|
-
**The character creator's working parts, for any engine.** Twenty-
|
|
4
|
+
**The character creator's working parts, for any engine.** Twenty-nine modules
|
|
5
5
|
make a character without Babylon or a DOM: they read MakeHuman's body, shape
|
|
6
6
|
it, fit and bind a skeleton, retarget clips, fit hair and clothes, and save
|
|
7
7
|
the result. Each is its own subpath, so a three.js app (or a server, or a
|
|
@@ -28,10 +28,17 @@ import { humanBodyMaker } from 'tosijs-3d/human-rig'
|
|
|
28
28
|
| [`hair-fit`](/hair-fit/) | a hairstyle warped onto a head |
|
|
29
29
|
| [`garment-cut`](/garment-cut/), [`uv-unwrap`](/uv-unwrap/), [`garment-file`](/garment-file/) | the tailor: garments cut from a body, unwrapped, saved as GLB or OBJ |
|
|
30
30
|
| [`skin-tone`](/skin-tone/) | skin colour from one dial |
|
|
31
|
+
| [`skin-paint`](/skin-paint/) | the lips and stubble over the skin, as vertex colours (glTF's `COLOR_0`) |
|
|
32
|
+
| [`cloth-bake`](/cloth-bake/) | a recoloured garment's texture, baked to a picture |
|
|
33
|
+
| [`eye-art`](/eye-art/) | Tonio's eye art with its iris recoloured, and UVs that map both eyes onto it |
|
|
34
|
+
| `png` | PNG read and written, byte for byte, with no canvas |
|
|
31
35
|
| [`character-file`](/character-file/) | a character as one versioned JSON document |
|
|
32
36
|
| [`character-settings`](/character-settings/) | every setting a character has, with its default; the slots; hair colours; the body pack's URL |
|
|
33
37
|
| [`proxy-cover`](/proxy-cover/) | the skin under what is worn, tucked in and hidden |
|
|
34
38
|
| [`skinned-glb`](/skinned-glb/), [`glb-chunks`](/glb-chunks/) | a rigged, morphing body out as a GLB (validator-clean); GLB chunks read and written |
|
|
39
|
+
| [`hair-place`](/hair-place/) | Quaternius' hairstyles placed on a body's head, and the library read from its GLB |
|
|
40
|
+
| [`mesh-sdf`](/mesh-sdf/) | signed distance to a triangle mesh: inside, and how deep |
|
|
41
|
+
| [`fit-extremes`](/fit-extremes/) | every garment and hairstyle on the bodies at the sliders' corners, checked for penetration and bone sanity |
|
|
35
42
|
| [`asset-url`](/asset-url/) | where hosted assets (the body pack, the hair) are fetched from |
|
|
36
43
|
|
|
37
44
|
What makes it a promise: `pure-core.test.ts` walks their import graph, type
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-core.js","sourceRoot":"","sources":["../src/character-core.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"character-core.js","sourceRoot":"","sources":["../src/character-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDE;AACF,0CAA0C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-settings.d.ts","sourceRoot":"","sources":["../src/character-settings.ts"],"names":[],"mappings":"AAeA,wDAAwD;AACxD,eAAO,MAAM,cAAc,6BAA6B,CAAA;AACxD,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,KAAK,CAAA;AAEnC,iFAAiF;AACjF,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,qEAAqE;AACrE,eAAO,MAAM,YAAY,EAAE,QAAQ,CACjC,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBnD,CAAA;AAEF,+CAA+C;AAC/C,eAAO,MAAM,eAAe,yGAWlB,CAAA;AAEV,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"character-settings.d.ts","sourceRoot":"","sources":["../src/character-settings.ts"],"names":[],"mappings":"AAeA,wDAAwD;AACxD,eAAO,MAAM,cAAc,6BAA6B,CAAA;AACxD,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,KAAK,CAAA;AAEnC,iFAAiF;AACjF,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,qEAAqE;AACrE,eAAO,MAAM,YAAY,EAAE,QAAQ,CACjC,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBnD,CAAA;AAEF,+CAA+C;AAC/C,eAAO,MAAM,eAAe,yGAWlB,CAAA;AAEV,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAqCjD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-settings.js","sourceRoot":"","sources":["../src/character-settings.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"character-settings.js","sourceRoot":"","sources":["../src/character-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,22 @@ import type { CharacterDoc } from './character-file.js';
|
|
|
2
2
|
export declare const CHARACTER_DB = "tosijs-characters";
|
|
3
3
|
/** The figure the builder is working on, kept as it changes. */
|
|
4
4
|
export declare const WORKING_CHARACTER = "(working)";
|
|
5
|
+
/** What a name typed to save or rename a character comes to. */
|
|
6
|
+
export type CharacterName = {
|
|
7
|
+
ok: false;
|
|
8
|
+
message: string;
|
|
9
|
+
} | {
|
|
10
|
+
ok: true;
|
|
11
|
+
name: string;
|
|
12
|
+
replaces: boolean;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* A name typed to save or rename a character: trimmed, refused (with a
|
|
16
|
+
* reason) when blank or the working figure's own key, and whether it
|
|
17
|
+
* REPLACES another saved character. `current` is the name being saved again
|
|
18
|
+
* or renamed: saving under it again replaces nothing.
|
|
19
|
+
*/
|
|
20
|
+
export declare function nameCharacter(typed: string, saved: readonly string[], current?: string): CharacterName;
|
|
5
21
|
/** Where in a document a run of bytes is: `garments/<name>` or `bodies/<name>`. */
|
|
6
22
|
type BlobPath = string;
|
|
7
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-store.d.ts","sourceRoot":"","sources":["../src/character-store.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,eAAO,MAAM,YAAY,sBAAsB,CAAA;AAC/C,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAE5C,mFAAmF;AACnF,KAAK,QAAQ,GAAG,MAAM,CAAA;AAStB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG;IAC7C,GAAG,EAAE,YAAY,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;CAChC,CAqBA;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CACvB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,YAAY,CAed;AAuBD,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACzB,2CAA2C;IAC3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC/C,0DAA0D;IAC1D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,iCAAiC;AACjC,wBAAgB,cAAc,IAAI,cAAc,CAwG/C"}
|
|
1
|
+
{"version":3,"file":"character-store.d.ts","sourceRoot":"","sources":["../src/character-store.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,eAAO,MAAM,YAAY,sBAAsB,CAAA;AAC/C,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAE5C,gEAAgE;AAChE,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAA;AAEjD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,SAAK,GACX,aAAa,CASf;AAED,mFAAmF;AACnF,KAAK,QAAQ,GAAG,MAAM,CAAA;AAStB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG;IAC7C,GAAG,EAAE,YAAY,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;CAChC,CAqBA;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CACvB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,YAAY,CAed;AAuBD,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACzB,2CAA2C;IAC3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC/C,0DAA0D;IAC1D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,iCAAiC;AACjC,wBAAgB,cAAc,IAAI,cAAc,CAwG/C"}
|
package/dist/character-store.js
CHANGED
|
@@ -31,6 +31,23 @@ open it there.
|
|
|
31
31
|
export const CHARACTER_DB = 'tosijs-characters';
|
|
32
32
|
/** The figure the builder is working on, kept as it changes. */
|
|
33
33
|
export const WORKING_CHARACTER = '(working)';
|
|
34
|
+
/**
|
|
35
|
+
* A name typed to save or rename a character: trimmed, refused (with a
|
|
36
|
+
* reason) when blank or the working figure's own key, and whether it
|
|
37
|
+
* REPLACES another saved character. `current` is the name being saved again
|
|
38
|
+
* or renamed: saving under it again replaces nothing.
|
|
39
|
+
*/
|
|
40
|
+
export function nameCharacter(typed, saved, current = '') {
|
|
41
|
+
const name = typed.trim();
|
|
42
|
+
if (!name)
|
|
43
|
+
return { ok: false, message: 'a saved character needs a name' };
|
|
44
|
+
if (name === WORKING_CHARACTER)
|
|
45
|
+
return {
|
|
46
|
+
ok: false,
|
|
47
|
+
message: `"${WORKING_CHARACTER}" is kept for the figure you are working on`,
|
|
48
|
+
};
|
|
49
|
+
return { ok: true, name, replaces: name !== current && saved.includes(name) };
|
|
50
|
+
}
|
|
34
51
|
/**
|
|
35
52
|
* A document's bytes taken out (pure): the document left, and each base64
|
|
36
53
|
* run by where it was.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-store.js","sourceRoot":"","sources":["../src/character-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BE;AACF,+CAA+C;AAI/C,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAA;AAC/C,gEAAgE;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"character-store.js","sourceRoot":"","sources":["../src/character-store.ts"],"names":[],"mappings":"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"}
|
package/dist/character.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character.d.ts","sourceRoot":"","sources":["../src/character.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"character.d.ts","sourceRoot":"","sources":["../src/character.ts"],"names":[],"mappings":"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"}
|