@ikijs/editor 0.17.0 → 0.19.0
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/README.md +16 -16
- package/dist/index.d.mts +89 -3
- package/dist/index.d.ts +89 -3
- package/dist/index.js +351 -291
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +356 -297
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -40,19 +40,19 @@ leaves the document untouched.
|
|
|
40
40
|
|
|
41
41
|
## API
|
|
42
42
|
|
|
43
|
-
| Area | Exports
|
|
44
|
-
| ------------------ |
|
|
45
|
-
| Document | `EditorDocument`, `EditCommand`
|
|
46
|
-
| Part edits | `AddPart`, `DeletePart`, `SetPartColor`, `SetPartWidth`, `SetPartHeight`, `SetPartOrder`, `SetPartTransform`, `SetPartBindings`, `SetPartMesh`, `SetPartDeformer`
|
|
47
|
-
| Deformer edits | `AddDeformer`, `DeleteDeformer`, `SetDeformerParent`, `SetDeformerTransform`, `SetDeformerBindings`, `SetDeformerPivot` (+ `X`/`Y`), `CaptureGridKeyform`
|
|
48
|
-
| Physics edits | `AddPhysicsRig`, `SetPhysicsRig`, `DeletePhysicsRig`
|
|
49
|
-
| Referential guards | `validateDeformerReparent`, `validateDeformerDelete`, `validatePartAttach`
|
|
50
|
-
| Atlas | `packAtlas`, `uvRectFor`, `ATLAS_PADDING`, `UV_INSET_PX`
|
|
51
|
-
| Grid keyforms | `computeGridOffsets`, `interpolateGridOffsets`, `upsertGridKeyform`
|
|
52
|
-
| Factories | `createDefaultPart`, `createDefaultMatrixDeformer`, `createDefaultWarpDeformer`, `createGridMesh`
|
|
53
|
-
| Pixels | `detectAlphaBbox`, `ALPHA_BBOX_THRESHOLD`, `AlphaBbox`, `ALPHA_OPAQUE`, `HEAD_BAND`, `SPECK_CORE_FRACTION`, `denseCoreOf`, `isSpeckCore`, `foregroundSpan`, `headHalfOf`
|
|
54
|
-
| Auto-rig | `generateIkiFromLayerSet`, `parseLayerRoles`, `partIdsOfRole`, `createLayerSetMeasurer`, `TurnTargets`, `DEFAULT_TURN_TARGETS`, `TurnSolveReport`, `RigStyle`, `LayerGeometryError` |
|
|
55
|
-
| Bindings | `captureBindingEndpoint`
|
|
43
|
+
| Area | Exports |
|
|
44
|
+
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
45
|
+
| Document | `EditorDocument`, `EditCommand` |
|
|
46
|
+
| Part edits | `AddPart`, `DeletePart`, `SetPartColor`, `SetPartWidth`, `SetPartHeight`, `SetPartOrder`, `SetPartTransform`, `SetPartBindings`, `SetPartMesh`, `SetPartDeformer` |
|
|
47
|
+
| Deformer edits | `AddDeformer`, `DeleteDeformer`, `SetDeformerParent`, `SetDeformerTransform`, `SetDeformerBindings`, `SetDeformerPivot` (+ `X`/`Y`), `CaptureGridKeyform` |
|
|
48
|
+
| Physics edits | `AddPhysicsRig`, `SetPhysicsRig`, `DeletePhysicsRig` |
|
|
49
|
+
| Referential guards | `validateDeformerReparent`, `validateDeformerDelete`, `validatePartAttach` |
|
|
50
|
+
| Atlas | `packAtlas`, `uvRectFor`, `ATLAS_PADDING`, `UV_INSET_PX` |
|
|
51
|
+
| Grid keyforms | `computeGridOffsets`, `interpolateGridOffsets`, `upsertGridKeyform` |
|
|
52
|
+
| Factories | `createDefaultPart`, `createDefaultMatrixDeformer`, `createDefaultWarpDeformer`, `createGridMesh` |
|
|
53
|
+
| Pixels | `detectAlphaBbox`, `ALPHA_BBOX_THRESHOLD`, `AlphaBbox`, `ALPHA_OPAQUE`, `HEAD_BAND`, `SPECK_CORE_FRACTION`, `denseCoreOf`, `isSpeckCore`, `foregroundSpan`, `headHalfOf` |
|
|
54
|
+
| Auto-rig | `generateIkiFromLayerSet`, `parseLayerRoles`, `partIdsOfRole`, `createLayerSetMeasurer`, `armGeometry`, `ArmGeometry`, `TurnTargets`, `DEFAULT_TURN_TARGETS`, `TurnSolveReport`, `RigStyle`, `LayerGeometryError` |
|
|
55
|
+
| Bindings | `captureBindingEndpoint` |
|
|
56
56
|
|
|
57
57
|
## Auto-rig
|
|
58
58
|
|
|
@@ -82,9 +82,9 @@ it), the ears lag the face, the far one narrowing. AngleZ rolls the head 14° ab
|
|
|
82
82
|
A `body` rides a body warp that breathes, follows the head's turn and tilt a
|
|
83
83
|
little and turns on `ParamBodyAngleX/Y/Z`, its legs planted, and the head
|
|
84
84
|
hangs from it. `arm_L` / `arm_R`, each a whole arm drawn hanging with its
|
|
85
|
-
shoulder at the top, hang from it too: each becomes an
|
|
86
|
-
forearm cut from the one crop, turning about the shoulder and the
|
|
87
|
-
`ParamArmL/R` and `ParamElbowL/R`. An arm needs a `body`.
|
|
85
|
+
shoulder at the top, hang from it too: each becomes an elbow cap, an upper
|
|
86
|
+
arm and a forearm cut from the one crop, turning about the shoulder and the
|
|
87
|
+
elbow on `ParamArmL/R` and `ParamElbowL/R`. An arm needs a `body`.
|
|
88
88
|
|
|
89
89
|
On a layer set with a `nose`, `options.turnTargets` — the cues a 30° reference
|
|
90
90
|
measures (how far the eye pair slides, how much the far eye foreshortens,
|
package/dist/index.d.mts
CHANGED
|
@@ -855,6 +855,92 @@ interface GenerateOptions {
|
|
|
855
855
|
};
|
|
856
856
|
}
|
|
857
857
|
|
|
858
|
+
/**
|
|
859
|
+
* The arms. Each `arm_L` / `arm_R` layer is one drawing of the whole arm,
|
|
860
|
+
* hanging, its shoulder at the top. It becomes three parts on two nested
|
|
861
|
+
* matrix deformers hung from the body warp:
|
|
862
|
+
* - the upper arm (the role's own id) on `armDeformer_X`, which turns about
|
|
863
|
+
* the shoulder, the deltoid cap's centre;
|
|
864
|
+
* - the forearm (`forearm_X`) on `forearmDeformer_X`, a child of the arm's,
|
|
865
|
+
* which turns about the elbow;
|
|
866
|
+
* - the elbow cap (`elbow_X`), also on `forearmDeformer_X`, drawn behind the
|
|
867
|
+
* upper arm.
|
|
868
|
+
* The shoulder pivot rides an all-weight-1 cell of the body warp (`body.ts`),
|
|
869
|
+
* so the arm breathes and turns with the chest rigidly, never sheared.
|
|
870
|
+
*
|
|
871
|
+
* All three parts are cut from the one crop: they share its box, transform
|
|
872
|
+
* and texture rect. The upper arm is the band above the seam, the elbow
|
|
873
|
+
* pivot's row; the forearm is the band below it. Iki has no glue between
|
|
874
|
+
* meshes, and two bands hinged at a seam open a wedge as wide as the arm on a
|
|
875
|
+
* bend. The cap fills it: a half-disc fan centred on the elbow pivot turns
|
|
876
|
+
* about its own centre, so it rotates into itself and keeps the joint covered
|
|
877
|
+
* at any bend.
|
|
878
|
+
*
|
|
879
|
+
* Behind the upper arm, the cap shows only where the forearm's bend uncovers
|
|
880
|
+
* it, so it must lie inside the paint at rest, or its edge would show past
|
|
881
|
+
* the arm's. Its boundary is therefore the arm's own contour, not a circle:
|
|
882
|
+
* `armGeometry` walks each of the fan's 13 rays out from the elbow to the
|
|
883
|
+
* contour (`capRays`). A ring at the boundary, `CAP_RIM` wide, takes the UVs
|
|
884
|
+
* of the seam row's edge cross-section swept round the arc, so the exposed
|
|
885
|
+
* wedge carries the painted line, fading out in the antialias column as the
|
|
886
|
+
* painted edge does; the fan inside it is the crop's own pixels.
|
|
887
|
+
*
|
|
888
|
+
* Draw order: hair_back < body < elbow_L, arm_L, forearm_L, elbow_R, arm_R,
|
|
889
|
+
* forearm_R < face … < hair_front. The forearm draws over the upper arm,
|
|
890
|
+
* which draws over the cap.
|
|
891
|
+
*
|
|
892
|
+
* Signs: ParamArmX + raises the arm outward on either side, in degrees 1:1.
|
|
893
|
+
* A rotation is CCW-positive, so an arm whose shoulder lies right of the
|
|
894
|
+
* body's axis (+x, the character's left) turns CCW for +, and one at −x turns
|
|
895
|
+
* CW. ParamElbowX + bends the forearm toward the body, the opposite turn to
|
|
896
|
+
* the shoulder's +: it turns CW on the +x side, CCW on the −x side.
|
|
897
|
+
*/
|
|
898
|
+
|
|
899
|
+
type Point = {
|
|
900
|
+
x: number;
|
|
901
|
+
y: number;
|
|
902
|
+
};
|
|
903
|
+
interface ArmGeometry {
|
|
904
|
+
/** The shoulder pivot, model space: the deltoid cap's centre. */
|
|
905
|
+
shoulder: Point;
|
|
906
|
+
/** r_u: the upper arm's half-width under the cap, px. */
|
|
907
|
+
shoulderRadius: number;
|
|
908
|
+
/** The elbow pivot, model space. Its y is the seam the two meshes meet on. */
|
|
909
|
+
elbow: Point;
|
|
910
|
+
/** The elbow cap's largest radius, px. */
|
|
911
|
+
capRadius: number;
|
|
912
|
+
/** The cap's radius on each of its `CAP_SEGMENTS + 1` rays, from the elbow
|
|
913
|
+
* at angles 0..π, px: the walk out to the contour, less `capInset`, at
|
|
914
|
+
* most `capRadius`. */
|
|
915
|
+
capRays: number[];
|
|
916
|
+
/** The seam row's widest run, crop columns [start, end). */
|
|
917
|
+
seamRun: [number, number];
|
|
918
|
+
/** +1 for a shoulder right of the body's axis (+ turns CCW), −1 left of it
|
|
919
|
+
* (+ turns CW). */
|
|
920
|
+
side: 1 | -1;
|
|
921
|
+
}
|
|
922
|
+
/**
|
|
923
|
+
* The arm's pivots, read off the widest opaque run of each crop row
|
|
924
|
+
* (`rowRuns`); a row without one, or a layer without runs, reads as the
|
|
925
|
+
* crop:
|
|
926
|
+
* - r_u is half the median width over the `CAP_ROWS` rows;
|
|
927
|
+
* - the shoulder pivot lies r_u under the first painted row's centre, at the
|
|
928
|
+
* run centre of the row it lands in;
|
|
929
|
+
* - the elbow is the centre of the row `ELBOW_AT` of the way from there to
|
|
930
|
+
* the last painted row, at its run centre;
|
|
931
|
+
* - the cap radius is half the elbow's run + 1 px, kept inside the crop;
|
|
932
|
+
* - each cap ray walks 1 px at a time from the elbow until it leaves the
|
|
933
|
+
* widest run of the crop row it is in (strictly inside: `start < x < end`,
|
|
934
|
+
* on canvas columns, the row the floor of the canvas y), then stops
|
|
935
|
+
* `capInset(i)` short of that exit (none on the two seam-end rays, 2 px on
|
|
936
|
+
* the next, `CAP_INSET` on the rest), and at `capRadius`.
|
|
937
|
+
* Pivots are on the 0.01 grid, as the written model is. `bodyAxisX` is the
|
|
938
|
+
* body's axis, model x: the shoulder's side of it sets the sign. An arm too
|
|
939
|
+
* short for its width to put the elbow under the shoulder would rig
|
|
940
|
+
* inverted, so it throws `LayerGeometryError`.
|
|
941
|
+
*/
|
|
942
|
+
declare function armGeometry(layer: LayerInput, bodyAxisX: number): ArmGeometry;
|
|
943
|
+
|
|
858
944
|
/** The part ids a `role`'s layer becomes, back to front: every one of them
|
|
859
945
|
* takes its texture from the layer's crop. Throws on an unknown role. */
|
|
860
946
|
declare function partIdsOfRole(role: string): readonly string[];
|
|
@@ -875,8 +961,8 @@ declare function parseLayerRoles(fileNames: string[]): {
|
|
|
875
961
|
* (`body.ts`) that breathes, follows the head's turn and tilt a little and
|
|
876
962
|
* turns on BodyAngleX/Y/Z, its legs planted; a head deformer hung from it
|
|
877
963
|
* that rolls about the chin and breathes; each arm hung from it too, as an
|
|
878
|
-
* upper arm
|
|
879
|
-
* (`arms.ts`); one small warp grid per feature
|
|
964
|
+
* upper arm, a forearm and an elbow cap turning about the shoulder and the
|
|
965
|
+
* elbow (`arms.ts`); one small warp grid per feature
|
|
880
966
|
* (each eye, each brow, the nose, the mouth), translating and foreshortening
|
|
881
967
|
* it by its own lead over the plate; and the plate, the hair and the blush
|
|
882
968
|
* moved by per-vertex keyforms of their own — the plate as up to four
|
|
@@ -1281,4 +1367,4 @@ declare function createGridMesh(cols: number, rows: number): IkiMesh;
|
|
|
1281
1367
|
*/
|
|
1282
1368
|
declare function createDefaultWarpDeformer(model: IkiModel): IkiWarpDeformer;
|
|
1283
1369
|
|
|
1284
|
-
export { ALPHA_BBOX_THRESHOLD, ALPHA_OPAQUE, ATLAS_PADDING, AddDeformer, AddPart, AddPhysicsRig, type AlphaBbox, type ApplyAtlasInput, type AtlasAssignment, type AtlasLayout, type AtlasPlacement, type AtlasSource, CaptureGridKeyform, DEFAULT_TURN_TARGETS, type DeformerTransformChannel, DeleteDeformer, DeletePart, DeletePhysicsRig, type EditCommand, type EditTransformChannel, EditorDocument, HEAD_BAND, type IrisStrand, LayerGeometryError, type LayerInput, type LayerSetMeasurement, type LayerSetMeasurer, type RgbaLayer, type RigStyle, SPECK_CORE_FRACTION, SetDeformerBindings, SetDeformerParent, SetDeformerPivot, SetDeformerPivotX, SetDeformerPivotY, SetDeformerTransform, SetPartBindings, SetPartColor, SetPartDeformer, SetPartHeight, SetPartMesh, SetPartOrder, SetPartTransform, SetPartWidth, SetPhysicsRig, type StrandOverlap, type TurnDepths, type TurnSolveReport, TurnTargetError, type TurnTargets, UV_INSET_PX, captureBindingEndpoint, computeGridOffsets, createDefaultMatrixDeformer, createDefaultPart, createDefaultWarpDeformer, createGridMesh, createLayerSetMeasurer, denseCoreOf, detectAlphaBbox, foregroundSpan, generateIkiFromLayerSet, headHalfOf, interpolateGridOffsets, isSpeckCore, packAtlas, parseLayerRoles, partIdsOfRole, upsertGridKeyform, uvRectFor, validateDeformerDelete, validateDeformerReparent, validatePartAttach };
|
|
1370
|
+
export { ALPHA_BBOX_THRESHOLD, ALPHA_OPAQUE, ATLAS_PADDING, AddDeformer, AddPart, AddPhysicsRig, type AlphaBbox, type ApplyAtlasInput, type ArmGeometry, type AtlasAssignment, type AtlasLayout, type AtlasPlacement, type AtlasSource, CaptureGridKeyform, DEFAULT_TURN_TARGETS, type DeformerTransformChannel, DeleteDeformer, DeletePart, DeletePhysicsRig, type EditCommand, type EditTransformChannel, EditorDocument, HEAD_BAND, type IrisStrand, LayerGeometryError, type LayerInput, type LayerSetMeasurement, type LayerSetMeasurer, type RgbaLayer, type RigStyle, SPECK_CORE_FRACTION, SetDeformerBindings, SetDeformerParent, SetDeformerPivot, SetDeformerPivotX, SetDeformerPivotY, SetDeformerTransform, SetPartBindings, SetPartColor, SetPartDeformer, SetPartHeight, SetPartMesh, SetPartOrder, SetPartTransform, SetPartWidth, SetPhysicsRig, type StrandOverlap, type TurnDepths, type TurnSolveReport, TurnTargetError, type TurnTargets, UV_INSET_PX, armGeometry, captureBindingEndpoint, computeGridOffsets, createDefaultMatrixDeformer, createDefaultPart, createDefaultWarpDeformer, createGridMesh, createLayerSetMeasurer, denseCoreOf, detectAlphaBbox, foregroundSpan, generateIkiFromLayerSet, headHalfOf, interpolateGridOffsets, isSpeckCore, packAtlas, parseLayerRoles, partIdsOfRole, upsertGridKeyform, uvRectFor, validateDeformerDelete, validateDeformerReparent, validatePartAttach };
|
package/dist/index.d.ts
CHANGED
|
@@ -855,6 +855,92 @@ interface GenerateOptions {
|
|
|
855
855
|
};
|
|
856
856
|
}
|
|
857
857
|
|
|
858
|
+
/**
|
|
859
|
+
* The arms. Each `arm_L` / `arm_R` layer is one drawing of the whole arm,
|
|
860
|
+
* hanging, its shoulder at the top. It becomes three parts on two nested
|
|
861
|
+
* matrix deformers hung from the body warp:
|
|
862
|
+
* - the upper arm (the role's own id) on `armDeformer_X`, which turns about
|
|
863
|
+
* the shoulder, the deltoid cap's centre;
|
|
864
|
+
* - the forearm (`forearm_X`) on `forearmDeformer_X`, a child of the arm's,
|
|
865
|
+
* which turns about the elbow;
|
|
866
|
+
* - the elbow cap (`elbow_X`), also on `forearmDeformer_X`, drawn behind the
|
|
867
|
+
* upper arm.
|
|
868
|
+
* The shoulder pivot rides an all-weight-1 cell of the body warp (`body.ts`),
|
|
869
|
+
* so the arm breathes and turns with the chest rigidly, never sheared.
|
|
870
|
+
*
|
|
871
|
+
* All three parts are cut from the one crop: they share its box, transform
|
|
872
|
+
* and texture rect. The upper arm is the band above the seam, the elbow
|
|
873
|
+
* pivot's row; the forearm is the band below it. Iki has no glue between
|
|
874
|
+
* meshes, and two bands hinged at a seam open a wedge as wide as the arm on a
|
|
875
|
+
* bend. The cap fills it: a half-disc fan centred on the elbow pivot turns
|
|
876
|
+
* about its own centre, so it rotates into itself and keeps the joint covered
|
|
877
|
+
* at any bend.
|
|
878
|
+
*
|
|
879
|
+
* Behind the upper arm, the cap shows only where the forearm's bend uncovers
|
|
880
|
+
* it, so it must lie inside the paint at rest, or its edge would show past
|
|
881
|
+
* the arm's. Its boundary is therefore the arm's own contour, not a circle:
|
|
882
|
+
* `armGeometry` walks each of the fan's 13 rays out from the elbow to the
|
|
883
|
+
* contour (`capRays`). A ring at the boundary, `CAP_RIM` wide, takes the UVs
|
|
884
|
+
* of the seam row's edge cross-section swept round the arc, so the exposed
|
|
885
|
+
* wedge carries the painted line, fading out in the antialias column as the
|
|
886
|
+
* painted edge does; the fan inside it is the crop's own pixels.
|
|
887
|
+
*
|
|
888
|
+
* Draw order: hair_back < body < elbow_L, arm_L, forearm_L, elbow_R, arm_R,
|
|
889
|
+
* forearm_R < face … < hair_front. The forearm draws over the upper arm,
|
|
890
|
+
* which draws over the cap.
|
|
891
|
+
*
|
|
892
|
+
* Signs: ParamArmX + raises the arm outward on either side, in degrees 1:1.
|
|
893
|
+
* A rotation is CCW-positive, so an arm whose shoulder lies right of the
|
|
894
|
+
* body's axis (+x, the character's left) turns CCW for +, and one at −x turns
|
|
895
|
+
* CW. ParamElbowX + bends the forearm toward the body, the opposite turn to
|
|
896
|
+
* the shoulder's +: it turns CW on the +x side, CCW on the −x side.
|
|
897
|
+
*/
|
|
898
|
+
|
|
899
|
+
type Point = {
|
|
900
|
+
x: number;
|
|
901
|
+
y: number;
|
|
902
|
+
};
|
|
903
|
+
interface ArmGeometry {
|
|
904
|
+
/** The shoulder pivot, model space: the deltoid cap's centre. */
|
|
905
|
+
shoulder: Point;
|
|
906
|
+
/** r_u: the upper arm's half-width under the cap, px. */
|
|
907
|
+
shoulderRadius: number;
|
|
908
|
+
/** The elbow pivot, model space. Its y is the seam the two meshes meet on. */
|
|
909
|
+
elbow: Point;
|
|
910
|
+
/** The elbow cap's largest radius, px. */
|
|
911
|
+
capRadius: number;
|
|
912
|
+
/** The cap's radius on each of its `CAP_SEGMENTS + 1` rays, from the elbow
|
|
913
|
+
* at angles 0..π, px: the walk out to the contour, less `capInset`, at
|
|
914
|
+
* most `capRadius`. */
|
|
915
|
+
capRays: number[];
|
|
916
|
+
/** The seam row's widest run, crop columns [start, end). */
|
|
917
|
+
seamRun: [number, number];
|
|
918
|
+
/** +1 for a shoulder right of the body's axis (+ turns CCW), −1 left of it
|
|
919
|
+
* (+ turns CW). */
|
|
920
|
+
side: 1 | -1;
|
|
921
|
+
}
|
|
922
|
+
/**
|
|
923
|
+
* The arm's pivots, read off the widest opaque run of each crop row
|
|
924
|
+
* (`rowRuns`); a row without one, or a layer without runs, reads as the
|
|
925
|
+
* crop:
|
|
926
|
+
* - r_u is half the median width over the `CAP_ROWS` rows;
|
|
927
|
+
* - the shoulder pivot lies r_u under the first painted row's centre, at the
|
|
928
|
+
* run centre of the row it lands in;
|
|
929
|
+
* - the elbow is the centre of the row `ELBOW_AT` of the way from there to
|
|
930
|
+
* the last painted row, at its run centre;
|
|
931
|
+
* - the cap radius is half the elbow's run + 1 px, kept inside the crop;
|
|
932
|
+
* - each cap ray walks 1 px at a time from the elbow until it leaves the
|
|
933
|
+
* widest run of the crop row it is in (strictly inside: `start < x < end`,
|
|
934
|
+
* on canvas columns, the row the floor of the canvas y), then stops
|
|
935
|
+
* `capInset(i)` short of that exit (none on the two seam-end rays, 2 px on
|
|
936
|
+
* the next, `CAP_INSET` on the rest), and at `capRadius`.
|
|
937
|
+
* Pivots are on the 0.01 grid, as the written model is. `bodyAxisX` is the
|
|
938
|
+
* body's axis, model x: the shoulder's side of it sets the sign. An arm too
|
|
939
|
+
* short for its width to put the elbow under the shoulder would rig
|
|
940
|
+
* inverted, so it throws `LayerGeometryError`.
|
|
941
|
+
*/
|
|
942
|
+
declare function armGeometry(layer: LayerInput, bodyAxisX: number): ArmGeometry;
|
|
943
|
+
|
|
858
944
|
/** The part ids a `role`'s layer becomes, back to front: every one of them
|
|
859
945
|
* takes its texture from the layer's crop. Throws on an unknown role. */
|
|
860
946
|
declare function partIdsOfRole(role: string): readonly string[];
|
|
@@ -875,8 +961,8 @@ declare function parseLayerRoles(fileNames: string[]): {
|
|
|
875
961
|
* (`body.ts`) that breathes, follows the head's turn and tilt a little and
|
|
876
962
|
* turns on BodyAngleX/Y/Z, its legs planted; a head deformer hung from it
|
|
877
963
|
* that rolls about the chin and breathes; each arm hung from it too, as an
|
|
878
|
-
* upper arm
|
|
879
|
-
* (`arms.ts`); one small warp grid per feature
|
|
964
|
+
* upper arm, a forearm and an elbow cap turning about the shoulder and the
|
|
965
|
+
* elbow (`arms.ts`); one small warp grid per feature
|
|
880
966
|
* (each eye, each brow, the nose, the mouth), translating and foreshortening
|
|
881
967
|
* it by its own lead over the plate; and the plate, the hair and the blush
|
|
882
968
|
* moved by per-vertex keyforms of their own — the plate as up to four
|
|
@@ -1281,4 +1367,4 @@ declare function createGridMesh(cols: number, rows: number): IkiMesh;
|
|
|
1281
1367
|
*/
|
|
1282
1368
|
declare function createDefaultWarpDeformer(model: IkiModel): IkiWarpDeformer;
|
|
1283
1369
|
|
|
1284
|
-
export { ALPHA_BBOX_THRESHOLD, ALPHA_OPAQUE, ATLAS_PADDING, AddDeformer, AddPart, AddPhysicsRig, type AlphaBbox, type ApplyAtlasInput, type AtlasAssignment, type AtlasLayout, type AtlasPlacement, type AtlasSource, CaptureGridKeyform, DEFAULT_TURN_TARGETS, type DeformerTransformChannel, DeleteDeformer, DeletePart, DeletePhysicsRig, type EditCommand, type EditTransformChannel, EditorDocument, HEAD_BAND, type IrisStrand, LayerGeometryError, type LayerInput, type LayerSetMeasurement, type LayerSetMeasurer, type RgbaLayer, type RigStyle, SPECK_CORE_FRACTION, SetDeformerBindings, SetDeformerParent, SetDeformerPivot, SetDeformerPivotX, SetDeformerPivotY, SetDeformerTransform, SetPartBindings, SetPartColor, SetPartDeformer, SetPartHeight, SetPartMesh, SetPartOrder, SetPartTransform, SetPartWidth, SetPhysicsRig, type StrandOverlap, type TurnDepths, type TurnSolveReport, TurnTargetError, type TurnTargets, UV_INSET_PX, captureBindingEndpoint, computeGridOffsets, createDefaultMatrixDeformer, createDefaultPart, createDefaultWarpDeformer, createGridMesh, createLayerSetMeasurer, denseCoreOf, detectAlphaBbox, foregroundSpan, generateIkiFromLayerSet, headHalfOf, interpolateGridOffsets, isSpeckCore, packAtlas, parseLayerRoles, partIdsOfRole, upsertGridKeyform, uvRectFor, validateDeformerDelete, validateDeformerReparent, validatePartAttach };
|
|
1370
|
+
export { ALPHA_BBOX_THRESHOLD, ALPHA_OPAQUE, ATLAS_PADDING, AddDeformer, AddPart, AddPhysicsRig, type AlphaBbox, type ApplyAtlasInput, type ArmGeometry, type AtlasAssignment, type AtlasLayout, type AtlasPlacement, type AtlasSource, CaptureGridKeyform, DEFAULT_TURN_TARGETS, type DeformerTransformChannel, DeleteDeformer, DeletePart, DeletePhysicsRig, type EditCommand, type EditTransformChannel, EditorDocument, HEAD_BAND, type IrisStrand, LayerGeometryError, type LayerInput, type LayerSetMeasurement, type LayerSetMeasurer, type RgbaLayer, type RigStyle, SPECK_CORE_FRACTION, SetDeformerBindings, SetDeformerParent, SetDeformerPivot, SetDeformerPivotX, SetDeformerPivotY, SetDeformerTransform, SetPartBindings, SetPartColor, SetPartDeformer, SetPartHeight, SetPartMesh, SetPartOrder, SetPartTransform, SetPartWidth, SetPhysicsRig, type StrandOverlap, type TurnDepths, type TurnSolveReport, TurnTargetError, type TurnTargets, UV_INSET_PX, armGeometry, captureBindingEndpoint, computeGridOffsets, createDefaultMatrixDeformer, createDefaultPart, createDefaultWarpDeformer, createGridMesh, createLayerSetMeasurer, denseCoreOf, detectAlphaBbox, foregroundSpan, generateIkiFromLayerSet, headHalfOf, interpolateGridOffsets, isSpeckCore, packAtlas, parseLayerRoles, partIdsOfRole, upsertGridKeyform, uvRectFor, validateDeformerDelete, validateDeformerReparent, validatePartAttach };
|