@origingame/engine 0.3.0 → 0.5.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/dist/web/origin-engine.d.ts +44 -5
- package/dist/web/origin-engine.js +279 -19
- package/dist/web/origin-engine_bg.wasm +0 -0
- package/dist/web/origin-engine_bg.wasm.d.ts +18 -5
- package/dist/web-publish/origin-engine-lanes.js +289 -48
- package/dist/web-publish/origin-engine-lanes_bg.wasm +0 -0
- package/dist/web-publish/origin-engine.d.ts +44 -5
- package/dist/web-publish/origin-engine.js +279 -38
- package/dist/web-publish/origin-engine_bg.wasm +0 -0
- package/dist/web-publish/origin-engine_bg.wasm.d.ts +18 -5
- package/dist/web-publish-2d/origin-engine-lanes.js +289 -48
- package/dist/web-publish-2d/origin-engine-lanes_bg.wasm +0 -0
- package/dist/web-publish-2d/origin-engine.d.ts +44 -5
- package/dist/web-publish-2d/origin-engine.js +279 -38
- package/dist/web-publish-2d/origin-engine_bg.wasm +0 -0
- package/dist/web-publish-2d/origin-engine_bg.wasm.d.ts +18 -5
- package/knowledge/README.md +2 -1
- package/knowledge/guides/three-to-og.md +393 -0
- package/knowledge/knowledge.json +2 -1
- package/knowledge/looks/catalogue.json +123 -2
- package/knowledge/package.json +3 -2
- package/knowledge/scaffold/origin-engine.json +2 -2
- package/knowledge/scaffold/template/package.json +1 -1
- package/knowledge/scaffold/template/project.ogt +1 -1
- package/knowledge/scripts/validate.ts +209 -27
- package/knowledge/skills/og-audio/SKILL.md +33 -7
- package/knowledge/skills/og-build/SKILL.md +66 -7
- package/knowledge/skills/og-core/SKILL.md +24 -8
- package/knowledge/skills/og-feel/SKILL.md +11 -3
- package/knowledge/skills/og-game/SKILL.md +680 -51
- package/knowledge/skills/og-i18n/SKILL.md +7 -7
- package/knowledge/skills/og-model/SKILL.md +374 -0
- package/knowledge/skills/og-platform-sdk/SKILL.md +7 -1
- package/knowledge/skills/og-taste/SKILL.md +7 -0
- package/knowledge/skills/og-ui/SKILL.md +39 -8
- package/knowledge/wiki/ai.md +20 -20
- package/knowledge/wiki/anim.md +537 -63
- package/knowledge/wiki/atmosphere.md +13 -13
- package/knowledge/wiki/audio.md +160 -20
- package/knowledge/wiki/camera.md +13 -13
- package/knowledge/wiki/commands.md +11 -11
- package/knowledge/wiki/debug.md +13 -13
- package/knowledge/wiki/game.md +8 -8
- package/knowledge/wiki/i18n.md +7 -7
- package/knowledge/wiki/index.md +81 -3
- package/knowledge/wiki/input.md +47 -47
- package/knowledge/wiki/load.md +83 -57
- package/knowledge/wiki/math.md +102 -102
- package/knowledge/wiki/nav.md +34 -34
- package/knowledge/wiki/net.md +10 -10
- package/knowledge/wiki/path.md +14 -14
- package/knowledge/wiki/physics.md +111 -100
- package/knowledge/wiki/platform.md +44 -44
- package/knowledge/wiki/probe.md +86 -86
- package/knowledge/wiki/reflect.md +30 -18
- package/knowledge/wiki/render.md +1243 -176
- package/knowledge/wiki/rng.md +14 -14
- package/knowledge/wiki/shapes.md +727 -0
- package/knowledge/wiki/stream.md +15 -15
- package/knowledge/wiki/system.md +8 -8
- package/knowledge/wiki/systems.md +2 -2
- package/knowledge/wiki/terrain.md +24 -20
- package/knowledge/wiki/tilemap.md +13 -13
- package/knowledge/wiki/time.md +4 -4
- package/knowledge/wiki/timeline.md +14 -14
- package/knowledge/wiki/transform.md +8 -8
- package/knowledge/wiki/tween.md +17 -17
- package/knowledge/wiki/ui.md +245 -269
- package/knowledge/wiki/video.md +5 -5
- package/knowledge/wiki/world.md +36 -36
- package/package.json +4 -4
- package/schema/api.schema.json +2238 -81
- package/shell/page.ts +4 -0
- package/shell/platform.ts +5 -0
- package/shell/player.ts +8 -2
- package/shell/transport.ts +6 -0
- package/src/generated/abi.ts +40 -1
- package/src/geom.ts +260 -0
- package/src/index.ts +19 -1
- package/src/node/device.ts +5 -2
- package/src/node/playtest-run.ts +1 -0
- package/src/node/polish.ts +34 -15
- package/src/node/run.ts +23 -6
- package/src/platform-local.ts +2 -0
- package/src/playtest.ts +8 -0
- package/src/runtime.ts +88 -6
- package/src/ui-kit/settings.ts +9 -0
- package/src/web/gl-state.ts +907 -0
- package/src/web/shell.ts +1 -1
- package/src/web/worker.ts +8 -2
- package/types/bindings.json +1222 -453
- package/types/index.d.ts +1868 -315
package/knowledge/wiki/anim.md
CHANGED
|
@@ -18,7 +18,7 @@ module anim {
|
|
|
18
18
|
# declarations follow, each quoted below
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
<sub>`api.ogt` line
|
|
21
|
+
<sub>`api.ogt` line 7761</sub>
|
|
22
22
|
|
|
23
23
|
## Contents
|
|
24
24
|
|
|
@@ -43,18 +43,30 @@ module anim {
|
|
|
43
43
|
| [`og.AnimationGraph`](#record-AnimationGraph) | component | Runs a blend-tree graph (og.anim.graph) on a skeleton: its layers' state machines pick motions by the parameters p0...p7, which the graph names in `param` order (`param speed` is p0, the next `param` is p1, ...). |
|
|
44
44
|
| [`og.Blendshapes`](#record-Blendshapes) | component | Morph-target weights of the skeleton entity's mesh, in the order of the glTF mesh's targets. With `source` clips the playing clips' weight channels write them; with `component` game code does. |
|
|
45
45
|
| [`og.IkChain`](#record-IkChain) | component | An inverse-kinematics constraint on a skeleton, applied after its clips and graph: the chain of `bones` bones ending at joint `tip` turns so the tip reaches `target`. Put it on its own entity (a skeleton can have many chains); chains apply in query order. |
|
|
46
|
+
| [`og.LookAt`](#record-LookAt) | component | An aim constraint on a skeleton, applied after its clips, graph and IK chains: `joint` turns so its `axis` points at `target` and its `upAxis` leans towards `up` (three.js Object3D.lookAt: +Z at the target, +Y up). The direction is held within maxYaw and maxPitch of the animated forward; with `bones` above 1 the joint's parents share the turn. Put it on its own entity (a head, the eyes, a turret's barrel); constraints apply in query order, and og.JointLimit clamps the joints it turns. |
|
|
47
|
+
| [`og.JointLimit`](#record-JointLimit) | component | How far a joint may turn from its rest rotation when og.anim's solvers (og.IkChain, og.LookAt, og.FootLock) turn it: a swing of `axis` within a cone and a twist about it within a range. A hinge (a knee, an elbow) is `axis` along the hinge, `swing` 0 (or a little play) and the bend range as twistMin...twistMax. Put it on its own entity, one per joint; the animated pose itself is never clamped. |
|
|
48
|
+
| [`og.FootLock`](#record-FootLock) | component | Foot locking: while the playing clips plant `foot` (within 5 mm of its lowest in each clip, the notion retargeting uses, weighed across blends and cross-fades: planted when the planting clips hold at least half the pose), the foot stays where it touched the ground, through clip blends and root motion, its leg bent by two-bone IK and the foot keeping its animated orientation; when the clips lift it, the foot rejoins its animation over `release`. Put it on its own entity, one per foot; locks apply after root motion and before og.IkChain, in query order, and og.JointLimit clamps the leg. The lock is world state (the `og.anim` state block). |
|
|
49
|
+
| [`SpringSpace`](#type-SpringSpace) | enum | Where a spring bone's tails move. |
|
|
50
|
+
| [`SpringSpace()`](#column-SpringSpace) | column kind | A SpringSpace field: the variant's index. |
|
|
51
|
+
| [`og.SpringBone`](#record-SpringBone) | component | A spring (jiggle) bone chain, three-vrm's VRMSpringBone: `joint` and its `bones` - 1 parents swing after their parents' motion. Each joint's tail (the next joint of the chain; for the last joint its first child, or its parent bone continued at the same length) is a point pulled towards where the animated pose puts it by a damped spring (`frequency`, `damping`), under `gravity`, held at the bone's length, and the joint turns to point at it. Applied after og.IkChain and og.LookAt, top joint first; put it on its own entity (a tail, an ear, a strand of hair, a single jiggling node), one per chain. Deterministic under the fixed tick; the tails' positions and velocities are world state (the `og.anim` state block), so a restore continues a swing exactly. A changed chain (another skeleton, length or space) restarts at the animated pose. |
|
|
52
|
+
| [`SpringColliderShape`](#type-SpringColliderShape) | enum | The shape of a spring collider. |
|
|
53
|
+
| [`SpringColliderShape()`](#column-SpringColliderShape) | column kind | A SpringColliderShape field: the variant's index. |
|
|
54
|
+
| [`og.SpringCollider`](#record-SpringCollider) | component | A collider spring bones are kept out of, three-vrm's VRMSpringBoneCollider: a sphere or a capsule riding on a joint of a skeleton (a head, a chest, an upper arm), so hair, ears and tails do not swing through the body. Each tick, after a tail of an og.SpringBone of the same skeleton has stepped and before its joint turns, the tail is pushed out of every collider whose `layers` meet the spring's `colliders` (in query order) to `radius` plus the spring's `radius`, keeping its bone's length. Put it on its own entity, one per shape; colliders follow the pose as it is when a chain is swung, so one on a joint an earlier chain swung follows that swing. |
|
|
46
55
|
| [`og.AnimationEvent`](#record-AnimationEvent) | event | A named marker of a clip that playback passed in the last tick (read in the tick after it fired, like every event). Cross-fades and blends fire every contributing clip's markers. |
|
|
47
56
|
| [`ClipInfo`](#type-ClipInfo) | struct | One clip of a loaded animation. |
|
|
48
57
|
| [`Animation`](#type-Animation) | struct | What og.load.animation registered from a model's `#anim` blob. |
|
|
49
58
|
| [`GraphDesc`](#type-GraphDesc) | desc struct | A blend-tree graph to register. |
|
|
50
59
|
| [`og.anim.graph`](#fn-graph) | function | Register a blend-tree graph for AnimationGraph.asset. Its `clip` lines are resolved by name against `clips`. |
|
|
51
|
-
| [`Rig`](#type-Rig) | handle | A humanoid map from og.load.rig (a cooked `.ogt` of `type rig`): the naming scheme a skeleton's node names follow
|
|
60
|
+
| [`Rig`](#type-Rig) | handle | A humanoid map from og.load.rig (a cooked `.ogt` of `type rig`): the naming scheme a skeleton's node names follow, the standard bones it names outright and, with `footHeight`, how high its ankles stand above the ground. |
|
|
61
|
+
| [`Rig()`](#column-Rig) | column kind | A Rig handle field (0 is none): a humanoid map og.load.rig answered. |
|
|
52
62
|
| [`HumanBone`](#type-HumanBone) | struct | One standard humanoid bone of a skeleton. |
|
|
53
63
|
| [`Humanoid`](#type-Humanoid) | struct | Which node of a skeleton is each standard humanoid bone (what retargeting maps). |
|
|
54
64
|
| [`HumanoidDesc`](#type-HumanoidDesc) | desc struct | A skeleton and, optionally, the rig that says how its bones are named. |
|
|
55
65
|
| [`og.anim.humanoid`](#fn-humanoid) | function | The standard humanoid bones of a skeleton, as retargeting sees them: to check a rig before retargeting onto it. |
|
|
56
66
|
| [`RetargetDesc`](#type-RetargetDesc) | desc struct | A clip made for one skeleton, to play on another (other proportions, rest pose or bone names). |
|
|
57
|
-
| [`og.anim.retarget`](#fn-retarget) | function | A new clip for `target` from a clip of `source`: each animated humanoid bone turns as the source's does from its rest pose (after a rest correction, so a T-pose drives an A-pose and other bone frames agree), the target keeps its bone lengths, the hips travel the source's distance scaled by the leg ratio (root motion kept, hip height scaled), and with footIk the feet land where the source's do, scaled. Same name, duration and markers. The cook does the same for a model's `animation { library }` import setting; this is for clips chosen at run time. |
|
|
67
|
+
| [`og.anim.retarget`](#fn-retarget) | function | A new clip for `target` from a clip of `source`: each animated humanoid bone turns as the source's does from its rest pose (after a rest correction, so a T-pose drives an A-pose and other bone frames agree; fingers turn from their hand, so a hand pose holds whatever the arm does), the target keeps its bone lengths, the hips travel the source's distance scaled by the leg ratio (root motion kept, hip height scaled), and with footIk the feet land where the source's do, scaled, on the ground each rig's `footHeight` names (else its rest pose's foot heights). The target's twist bones (unmapped nodes named `twist`, or Rigify's `DEF-….001`, on an upper or lower arm or leg) take a share of their segment's twist by how far along it they sit. Same name, duration and markers. The cook does the same for a model's `animation { library }` import setting; this is for clips chosen at run time. |
|
|
68
|
+
| [`MirrorDesc`](#type-MirrorDesc) | desc struct | A clip to play on the other side of the skeleton it was made for. |
|
|
69
|
+
| [`og.anim.mirror`](#fn-mirror) | function | A new clip that plays `clip` on the other side: every frame reflected in the skeleton's x = 0 plane, each node taking its counterpart's motion (a left swing becomes the right's), rotations moved in model space so left and right bone frames need not mirror each other, root motion's sideways travel and turns flipped. Assumes a symmetric rest pose; a sided node without a counterpart keeps its rest pose. Same name, duration and markers (markers keep their names). Mirroring twice gives the clip back. A clip known ahead needs no call: a graph's `clip` line with `mirror true` plays it mirrored, and the cook's `animation { mirror "<clip>" }` writes the mirrored clip into the model. |
|
|
58
70
|
| [`FlipbookSheet`](#type-FlipbookSheet) | handle | A sprite sheet's frames and clips (a cooked `.ogt` of `type flipbook`), from og.load.flipbook. |
|
|
59
71
|
| [`FlipbookSheet()`](#column-FlipbookSheet) | column kind | A FlipbookSheet handle field. |
|
|
60
72
|
| [`FlipMode`](#type-FlipMode) | enum | How a flipbook clip runs past its last frame. |
|
|
@@ -68,7 +80,7 @@ module anim {
|
|
|
68
80
|
| [`Rig2D`](#type-Rig2D) | handle | A 2D rig (a cooked `.ogt` of `type rig2d`): bones, slots, region, mesh, bounding-box and child-armature attachments, IK constraints, child armatures and clips, from og.load.rig2d. |
|
|
69
81
|
| [`Rig2D()`](#column-Rig2D) | column kind | A Rig2D handle field. |
|
|
70
82
|
| [`og.Skeleton2D`](#record-Skeleton2D) | component | Plays a clip of a 2D rig at the entity: the og.skeleton2d system advances it by scaled time (Time.scaledDt) after the game's systems and fires its events as og.Skeleton2DEvent; extraction draws its slots, in their order, as textured triangles of the sprite batch at `layer` (region attachments as quads, mesh attachments weighted to bones and deformed by the clip), lit by og.Lighting2D when the layer is in its range, as a sprite there is. The rig's pixels are `unit` to a world unit and +y is up; the entity's og.Transform places, turns (about z) and scales it. |
|
|
71
|
-
| [`og.Skeleton2DEvent`](#record-Skeleton2DEvent) | event | A 2D skeleton's clip passed one of its events (`event 0.2 "step"` in the rig) in the last tick: footsteps, the frame a swing lands. Read in the tick after, like every event; a clip started at 0 fires its events at 0, a looping clip fires each once per pass. |
|
|
83
|
+
| [`og.Skeleton2DEvent`](#record-Skeleton2DEvent) | event | A 2D skeleton's clip, or the clip a child armature in one of its slots plays, passed one of its events (`event 0.2 "step"` in the rig) in the last tick: footsteps, the frame a swing lands. Read in the tick after, like every event; a clip started at 0 fires its events at 0, a looping clip fires each once per pass. |
|
|
72
84
|
| [`og.IkTarget2D`](#record-IkTarget2D) | component | Moves one IK constraint of a 2D skeleton (Rig2DInfo.constraints) to a point: a foot planted on the ground under it, a hand on a ledge, a tail's tip. A constraint is a chain of any length: one bone points at the target, two are solved exactly (bending the way the rig says), three or more by FABRIK from the animated pose, curling the way the rig says. Put it on its own entity, one per constraint; og.skeleton2d writes `reached` and `error`, and the drawn pose solves the same way. |
|
|
73
85
|
| [`Rig2DClipInfo`](#type-Rig2DClipInfo) | struct | One clip of a loaded 2D rig. |
|
|
74
86
|
| [`Rig2DInfo`](#type-Rig2DInfo) | struct | What og.load.rig2d registered, or og.anim.rig2dInfo reads back from a handle. |
|
|
@@ -106,7 +118,7 @@ fn graph {
|
|
|
106
118
|
}
|
|
107
119
|
```
|
|
108
120
|
|
|
109
|
-
<sub>`api.ogt` line
|
|
121
|
+
<sub>`api.ogt` line 8300</sub>
|
|
110
122
|
|
|
111
123
|
<a id="fn-humanoid"></a>
|
|
112
124
|
|
|
@@ -136,13 +148,13 @@ fn humanoid {
|
|
|
136
148
|
}
|
|
137
149
|
```
|
|
138
150
|
|
|
139
|
-
<sub>`api.ogt` line
|
|
151
|
+
<sub>`api.ogt` line 8335</sub>
|
|
140
152
|
|
|
141
153
|
<a id="fn-retarget"></a>
|
|
142
154
|
|
|
143
155
|
### `og.anim.retarget`
|
|
144
156
|
|
|
145
|
-
A new clip for `target` from a clip of `source`: each animated humanoid bone turns as the source's does from its rest pose (after a rest correction, so a T-pose drives an A-pose and other bone frames agree), the target keeps its bone lengths, the hips travel the source's distance scaled by the leg ratio (root motion kept, hip height scaled), and with footIk the feet land where the source's do, scaled. Same name, duration and markers. The cook does the same for a model's `animation { library }` import setting; this is for clips chosen at run time.
|
|
157
|
+
A new clip for `target` from a clip of `source`: each animated humanoid bone turns as the source's does from its rest pose (after a rest correction, so a T-pose drives an A-pose and other bone frames agree; fingers turn from their hand, so a hand pose holds whatever the arm does), the target keeps its bone lengths, the hips travel the source's distance scaled by the leg ratio (root motion kept, hip height scaled), and with footIk the feet land where the source's do, scaled, on the ground each rig's `footHeight` names (else its rest pose's foot heights). The target's twist bones (unmapped nodes named `twist`, or Rigify's `DEF-….001`, on an upper or lower arm or leg) take a share of their segment's twist by how far along it they sit. Same name, duration and markers. The cook does the same for a model's `animation { library }` import setting; this is for clips chosen at run time.
|
|
146
158
|
|
|
147
159
|
```ts
|
|
148
160
|
og.anim.retarget(world: World, desc?: RetargetDesc): Result<ClipInfo>
|
|
@@ -159,14 +171,44 @@ Binding symbol `og_anim_retarget` · publish builds: kept
|
|
|
159
171
|
|
|
160
172
|
```ogt
|
|
161
173
|
fn retarget {
|
|
162
|
-
doc "A new clip for `target` from a clip of `source`: each animated humanoid bone turns as the source's does from its rest pose (after a rest correction, so a T-pose drives an A-pose and other bone frames agree), the target keeps its bone lengths, the hips travel the source's distance scaled by the leg ratio (root motion kept, hip height scaled), and with footIk the feet land where the source's do, scaled. Same name, duration and markers. The cook does the same for a model's `animation { library }` import setting; this is for clips chosen at run time."
|
|
174
|
+
doc "A new clip for `target` from a clip of `source`: each animated humanoid bone turns as the source's does from its rest pose (after a rest correction, so a T-pose drives an A-pose and other bone frames agree; fingers turn from their hand, so a hand pose holds whatever the arm does), the target keeps its bone lengths, the hips travel the source's distance scaled by the leg ratio (root motion kept, hip height scaled), and with footIk the feet land where the source's do, scaled, on the ground each rig's `footHeight` names (else its rest pose's foot heights). The target's twist bones (unmapped nodes named `twist`, or Rigify's `DEF-….001`, on an upper or lower arm or leg) take a share of their segment's twist by how far along it they sit. Same name, duration and markers. The cook does the same for a model's `animation { library }` import setting; this is for clips chosen at run time."
|
|
163
175
|
param world World "The world whose animation owns the skeletons and the clip."
|
|
164
176
|
param desc RetargetDesc "The clip, the two skeletons and their rigs."
|
|
165
177
|
returns Result.ClipInfo "The new clip (what AnimationPlayer.clip takes). Refused for an unregistered clip, skeleton or rig, a skeleton without recognisable hips (name them in a `type rig` file), or a rig naming a missing node."
|
|
166
178
|
}
|
|
167
179
|
```
|
|
168
180
|
|
|
169
|
-
<sub>`api.ogt` line
|
|
181
|
+
<sub>`api.ogt` line 8355</sub>
|
|
182
|
+
|
|
183
|
+
<a id="fn-mirror"></a>
|
|
184
|
+
|
|
185
|
+
### `og.anim.mirror`
|
|
186
|
+
|
|
187
|
+
A new clip that plays `clip` on the other side: every frame reflected in the skeleton's x = 0 plane, each node taking its counterpart's motion (a left swing becomes the right's), rotations moved in model space so left and right bone frames need not mirror each other, root motion's sideways travel and turns flipped. Assumes a symmetric rest pose; a sided node without a counterpart keeps its rest pose. Same name, duration and markers (markers keep their names). Mirroring twice gives the clip back. A clip known ahead needs no call: a graph's `clip` line with `mirror true` plays it mirrored, and the cook's `animation { mirror "<clip>" }` writes the mirrored clip into the model.
|
|
188
|
+
|
|
189
|
+
```ts
|
|
190
|
+
og.anim.mirror(world: World, desc?: MirrorDesc): Result<ClipInfo>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
| Parameter | Type | Optional | Doc |
|
|
194
|
+
|---|---|---|---|
|
|
195
|
+
| `world` | `World` | no | The world whose animation owns the skeleton and the clip. |
|
|
196
|
+
| `desc` | `MirrorDesc` | yes | The clip and its skeleton. |
|
|
197
|
+
|
|
198
|
+
**Returns** `Result<ClipInfo>`: The new clip (what AnimationPlayer.clip takes). Refused for an unregistered clip or skeleton.
|
|
199
|
+
|
|
200
|
+
Binding symbol `og_anim_mirror` · publish builds: kept
|
|
201
|
+
|
|
202
|
+
```ogt
|
|
203
|
+
fn mirror {
|
|
204
|
+
doc "A new clip that plays `clip` on the other side: every frame reflected in the skeleton's x = 0 plane, each node taking its counterpart's motion (a left swing becomes the right's), rotations moved in model space so left and right bone frames need not mirror each other, root motion's sideways travel and turns flipped. Assumes a symmetric rest pose; a sided node without a counterpart keeps its rest pose. Same name, duration and markers (markers keep their names). Mirroring twice gives the clip back. A clip known ahead needs no call: a graph's `clip` line with `mirror true` plays it mirrored, and the cook's `animation { mirror \"<clip>\" }` writes the mirrored clip into the model."
|
|
205
|
+
param world World "The world whose animation owns the skeleton and the clip."
|
|
206
|
+
param desc MirrorDesc "The clip and its skeleton."
|
|
207
|
+
returns Result.ClipInfo "The new clip (what AnimationPlayer.clip takes). Refused for an unregistered clip or skeleton."
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
<sub>`api.ogt` line 8369</sub>
|
|
170
212
|
|
|
171
213
|
<a id="fn-clip"></a>
|
|
172
214
|
|
|
@@ -197,7 +239,7 @@ fn clip {
|
|
|
197
239
|
}
|
|
198
240
|
```
|
|
199
241
|
|
|
200
|
-
<sub>`api.ogt` line
|
|
242
|
+
<sub>`api.ogt` line 8454</sub>
|
|
201
243
|
|
|
202
244
|
<a id="fn-clip-2"></a>
|
|
203
245
|
|
|
@@ -228,7 +270,7 @@ fn clip {
|
|
|
228
270
|
}
|
|
229
271
|
```
|
|
230
272
|
|
|
231
|
-
<sub>`api.ogt` line
|
|
273
|
+
<sub>`api.ogt` line 8462</sub>
|
|
232
274
|
|
|
233
275
|
<a id="fn-clip-3"></a>
|
|
234
276
|
|
|
@@ -259,7 +301,7 @@ fn clip {
|
|
|
259
301
|
}
|
|
260
302
|
```
|
|
261
303
|
|
|
262
|
-
<sub>`api.ogt` line
|
|
304
|
+
<sub>`api.ogt` line 8470</sub>
|
|
263
305
|
|
|
264
306
|
<a id="fn-rig2dInfo"></a>
|
|
265
307
|
|
|
@@ -289,7 +331,7 @@ fn rig2dInfo {
|
|
|
289
331
|
}
|
|
290
332
|
```
|
|
291
333
|
|
|
292
|
-
<sub>`api.ogt` line
|
|
334
|
+
<sub>`api.ogt` line 8580</sub>
|
|
293
335
|
|
|
294
336
|
<a id="fn-skeleton2dBoxes"></a>
|
|
295
337
|
|
|
@@ -319,7 +361,7 @@ fn skeleton2dBoxes {
|
|
|
319
361
|
}
|
|
320
362
|
```
|
|
321
363
|
|
|
322
|
-
<sub>`api.ogt` line
|
|
364
|
+
<sub>`api.ogt` line 8594</sub>
|
|
323
365
|
|
|
324
366
|
## Components, resources and events
|
|
325
367
|
|
|
@@ -356,7 +398,7 @@ component Skeleton {
|
|
|
356
398
|
}
|
|
357
399
|
```
|
|
358
400
|
|
|
359
|
-
<sub>`api.ogt` line
|
|
401
|
+
<sub>`api.ogt` line 7845</sub>
|
|
360
402
|
|
|
361
403
|
<a id="record-AnimationPlayer"></a>
|
|
362
404
|
|
|
@@ -418,7 +460,7 @@ component AnimationPlayer {
|
|
|
418
460
|
}
|
|
419
461
|
```
|
|
420
462
|
|
|
421
|
-
<sub>`api.ogt` line
|
|
463
|
+
<sub>`api.ogt` line 7860</sub>
|
|
422
464
|
|
|
423
465
|
<a id="record-AnimationGraph"></a>
|
|
424
466
|
|
|
@@ -494,7 +536,7 @@ component AnimationGraph {
|
|
|
494
536
|
}
|
|
495
537
|
```
|
|
496
538
|
|
|
497
|
-
<sub>`api.ogt` line
|
|
539
|
+
<sub>`api.ogt` line 7899</sub>
|
|
498
540
|
|
|
499
541
|
<a id="record-Blendshapes"></a>
|
|
500
542
|
|
|
@@ -567,7 +609,7 @@ component Blendshapes {
|
|
|
567
609
|
}
|
|
568
610
|
```
|
|
569
611
|
|
|
570
|
-
<sub>`api.ogt` line
|
|
612
|
+
<sub>`api.ogt` line 7947</sub>
|
|
571
613
|
|
|
572
614
|
<a id="record-IkChain"></a>
|
|
573
615
|
|
|
@@ -638,7 +680,325 @@ component IkChain {
|
|
|
638
680
|
}
|
|
639
681
|
```
|
|
640
682
|
|
|
641
|
-
<sub>`api.ogt` line
|
|
683
|
+
<sub>`api.ogt` line 7995</sub>
|
|
684
|
+
|
|
685
|
+
<a id="record-LookAt"></a>
|
|
686
|
+
|
|
687
|
+
### `og.LookAt` (component)
|
|
688
|
+
|
|
689
|
+
An aim constraint on a skeleton, applied after its clips, graph and IK chains: `joint` turns so its `axis` points at `target` and its `upAxis` leans towards `up` (three.js Object3D.lookAt: +Z at the target, +Y up). The direction is held within maxYaw and maxPitch of the animated forward; with `bones` above 1 the joint's parents share the turn. Put it on its own entity (a head, the eyes, a turret's barrel); constraints apply in query order, and og.JointLimit clamps the joints it turns.
|
|
690
|
+
|
|
691
|
+
Token `og.LookAt`, registered under the schema name `og.LookAt`; its value type is `LookAt`.
|
|
692
|
+
|
|
693
|
+
| Field | Type | Default | Range | Unit | Notes | Doc |
|
|
694
|
+
|---|---|---|---|---|---|---|
|
|
695
|
+
| `skeleton` | `Entity` | `0` | — | — | — | The entity with the og.Skeleton this constraint turns. |
|
|
696
|
+
| `joint` | `number` | `0` | ≥ 0 | — | — | The joint that aims (an index into the skin's joints): the head, an eye. |
|
|
697
|
+
| `bones` | `number` | `1` | 1 … 8 | — | — | How many joints share the turn: `joint` and its parents (3 spreads a look over neck, chest and spine), each parent taking an even share and `joint` the rest. |
|
|
698
|
+
| `target` | `Vector3` | `{ x: 0, y: 0, z: 0 }` | — | `m` | — | The point to look at, in `space`. |
|
|
699
|
+
| `space` | `IkSpace` | `"world"` | — | — | — | What `target` and `up` are relative to: world (the frame the skeleton entity's og.Transform is in) or model. |
|
|
700
|
+
| `axis` | `Vector3` | `{ x: 0, y: 0, z: 1 }` | — | — | — | The joint's forward, in its own frame: the axis turned onto the target. |
|
|
701
|
+
| `upAxis` | `Vector3` | `{ x: 0, y: 1, z: 0 }` | — | — | — | The joint's up, in its own frame: yaw turns about it, pitch towards it, and it rolls towards `up`. |
|
|
702
|
+
| `up` | `Vector3` | `{ x: 0, y: 1, z: 0 }` | — | — | — | The up hint, a direction in `space` the joint's `upAxis` leans to (three.js Object3D.up); the zero vector keeps the animated roll. |
|
|
703
|
+
| `maxYaw` | `number` | `3.1416` | 0 … 3.1416 | `rad` | tunable | The largest turn about `upAxis`, left or right of the animated forward. |
|
|
704
|
+
| `maxPitch` | `number` | `1.5708` | 0 … 1.5708 | `rad` | tunable | The largest turn towards or away from `upAxis`, from the animated forward. |
|
|
705
|
+
| `weight` | `number` | `1` | 0 … 1 | — | tunable | How much of the turn is applied (0 = the animated pose, 1 = aimed). |
|
|
706
|
+
| `clamped` | `boolean` | `false` | — | — | read only | Written: the target lay outside maxYaw or maxPitch, so the joint aims at the nearest direction inside them. |
|
|
707
|
+
|
|
708
|
+
```ogt
|
|
709
|
+
component LookAt {
|
|
710
|
+
doc "An aim constraint on a skeleton, applied after its clips, graph and IK chains: `joint` turns so its `axis` points at `target` and its `upAxis` leans towards `up` (three.js Object3D.lookAt: +Z at the target, +Y up). The direction is held within maxYaw and maxPitch of the animated forward; with `bones` above 1 the joint's parents share the turn. Put it on its own entity (a head, the eyes, a turret's barrel); constraints apply in query order, and og.JointLimit clamps the joints it turns."
|
|
711
|
+
field skeleton Entity "The entity with the og.Skeleton this constraint turns."
|
|
712
|
+
field joint u32 "The joint that aims (an index into the skin's joints): the head, an eye." {
|
|
713
|
+
min 0
|
|
714
|
+
}
|
|
715
|
+
field bones u32 "How many joints share the turn: `joint` and its parents (3 spreads a look over neck, chest and spine), each parent taking an even share and `joint` the rest." {
|
|
716
|
+
default 1
|
|
717
|
+
min 1
|
|
718
|
+
max 8
|
|
719
|
+
}
|
|
720
|
+
field target Vector3 "The point to look at, in `space`." {
|
|
721
|
+
unit m
|
|
722
|
+
}
|
|
723
|
+
field space IkSpace "What `target` and `up` are relative to: world (the frame the skeleton entity's og.Transform is in) or model."
|
|
724
|
+
field axis Vector3 "The joint's forward, in its own frame: the axis turned onto the target." {
|
|
725
|
+
default 0 0 1
|
|
726
|
+
}
|
|
727
|
+
field upAxis Vector3 "The joint's up, in its own frame: yaw turns about it, pitch towards it, and it rolls towards `up`." {
|
|
728
|
+
default 0 1 0
|
|
729
|
+
}
|
|
730
|
+
field up Vector3 "The up hint, a direction in `space` the joint's `upAxis` leans to (three.js Object3D.up); the zero vector keeps the animated roll." {
|
|
731
|
+
default 0 1 0
|
|
732
|
+
}
|
|
733
|
+
field maxYaw f32 "The largest turn about `upAxis`, left or right of the animated forward." {
|
|
734
|
+
default 3.1416
|
|
735
|
+
min 0
|
|
736
|
+
max 3.1416
|
|
737
|
+
unit rad
|
|
738
|
+
tunable true
|
|
739
|
+
}
|
|
740
|
+
field maxPitch f32 "The largest turn towards or away from `upAxis`, from the animated forward." {
|
|
741
|
+
default 1.5708
|
|
742
|
+
min 0
|
|
743
|
+
max 1.5708
|
|
744
|
+
unit rad
|
|
745
|
+
tunable true
|
|
746
|
+
}
|
|
747
|
+
field weight f32 "How much of the turn is applied (0 = the animated pose, 1 = aimed)." {
|
|
748
|
+
default 1
|
|
749
|
+
min 0
|
|
750
|
+
max 1
|
|
751
|
+
tunable true
|
|
752
|
+
}
|
|
753
|
+
field clamped bool "Written: the target lay outside maxYaw or maxPitch, so the joint aims at the nearest direction inside them." {
|
|
754
|
+
readonly true
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
<sub>`api.ogt` line 8039</sub>
|
|
760
|
+
|
|
761
|
+
<a id="record-JointLimit"></a>
|
|
762
|
+
|
|
763
|
+
### `og.JointLimit` (component)
|
|
764
|
+
|
|
765
|
+
How far a joint may turn from its rest rotation when og.anim's solvers (og.IkChain, og.LookAt, og.FootLock) turn it: a swing of `axis` within a cone and a twist about it within a range. A hinge (a knee, an elbow) is `axis` along the hinge, `swing` 0 (or a little play) and the bend range as twistMin...twistMax. Put it on its own entity, one per joint; the animated pose itself is never clamped.
|
|
766
|
+
|
|
767
|
+
Token `og.JointLimit`, registered under the schema name `og.JointLimit`; its value type is `JointLimit`.
|
|
768
|
+
|
|
769
|
+
| Field | Type | Default | Range | Unit | Notes | Doc |
|
|
770
|
+
|---|---|---|---|---|---|---|
|
|
771
|
+
| `skeleton` | `Entity` | `0` | — | — | — | The entity with the og.Skeleton whose joint this limits. |
|
|
772
|
+
| `joint` | `number` | `0` | ≥ 0 | — | — | The limited joint (an index into the skin's joints). |
|
|
773
|
+
| `axis` | `Vector3` | `{ x: 0, y: 1, z: 0 }` | — | — | — | The twist axis in the joint's rest frame: along the bone for a ball joint, along the hinge for a hinge. |
|
|
774
|
+
| `swing` | `number` | `3.1416` | 0 … 3.1416 | `rad` | tunable | The cone half-angle the axis may swing away from its rest direction (0 locks it: a hinge; pi is free). |
|
|
775
|
+
| `twistMin` | `number` | `-3.1416` | -3.1416 … 3.1416 | `rad` | tunable | The least twist about `axis` from rest (a hinge's bend one way). |
|
|
776
|
+
| `twistMax` | `number` | `3.1416` | -3.1416 … 3.1416 | `rad` | tunable | The most twist about `axis` from rest (a hinge's bend the other way). |
|
|
777
|
+
|
|
778
|
+
```ogt
|
|
779
|
+
component JointLimit {
|
|
780
|
+
doc "How far a joint may turn from its rest rotation when og.anim's solvers (og.IkChain, og.LookAt, og.FootLock) turn it: a swing of `axis` within a cone and a twist about it within a range. A hinge (a knee, an elbow) is `axis` along the hinge, `swing` 0 (or a little play) and the bend range as twistMin...twistMax. Put it on its own entity, one per joint; the animated pose itself is never clamped."
|
|
781
|
+
field skeleton Entity "The entity with the og.Skeleton whose joint this limits."
|
|
782
|
+
field joint u32 "The limited joint (an index into the skin's joints)." {
|
|
783
|
+
min 0
|
|
784
|
+
}
|
|
785
|
+
field axis Vector3 "The twist axis in the joint's rest frame: along the bone for a ball joint, along the hinge for a hinge." {
|
|
786
|
+
default 0 1 0
|
|
787
|
+
}
|
|
788
|
+
field swing f32 "The cone half-angle the axis may swing away from its rest direction (0 locks it: a hinge; pi is free)." {
|
|
789
|
+
default 3.1416
|
|
790
|
+
min 0
|
|
791
|
+
max 3.1416
|
|
792
|
+
unit rad
|
|
793
|
+
tunable true
|
|
794
|
+
}
|
|
795
|
+
field twistMin f32 "The least twist about `axis` from rest (a hinge's bend one way)." {
|
|
796
|
+
default -3.1416
|
|
797
|
+
min -3.1416
|
|
798
|
+
max 3.1416
|
|
799
|
+
unit rad
|
|
800
|
+
tunable true
|
|
801
|
+
}
|
|
802
|
+
field twistMax f32 "The most twist about `axis` from rest (a hinge's bend the other way)." {
|
|
803
|
+
default 3.1416
|
|
804
|
+
min -3.1416
|
|
805
|
+
max 3.1416
|
|
806
|
+
unit rad
|
|
807
|
+
tunable true
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
```
|
|
811
|
+
|
|
812
|
+
<sub>`api.ogt` line 8088</sub>
|
|
813
|
+
|
|
814
|
+
<a id="record-FootLock"></a>
|
|
815
|
+
|
|
816
|
+
### `og.FootLock` (component)
|
|
817
|
+
|
|
818
|
+
Foot locking: while the playing clips plant `foot` (within 5 mm of its lowest in each clip, the notion retargeting uses, weighed across blends and cross-fades: planted when the planting clips hold at least half the pose), the foot stays where it touched the ground, through clip blends and root motion, its leg bent by two-bone IK and the foot keeping its animated orientation; when the clips lift it, the foot rejoins its animation over `release`. Put it on its own entity, one per foot; locks apply after root motion and before og.IkChain, in query order, and og.JointLimit clamps the leg. The lock is world state (the `og.anim` state block).
|
|
819
|
+
|
|
820
|
+
Token `og.FootLock`, registered under the schema name `og.FootLock`; its value type is `FootLock`.
|
|
821
|
+
|
|
822
|
+
| Field | Type | Default | Range | Unit | Notes | Doc |
|
|
823
|
+
|---|---|---|---|---|---|---|
|
|
824
|
+
| `skeleton` | `Entity` | `0` | — | — | — | The entity with the og.Skeleton whose foot this holds. |
|
|
825
|
+
| `foot` | `number` | `0` | ≥ 0 | — | — | The foot joint (an index into the skin's joints); the two bones above it are the leg that bends. |
|
|
826
|
+
| `weight` | `number` | `1` | 0 … 1 | — | tunable | How much of the lock is applied (0 = the animated foot, 1 = held). |
|
|
827
|
+
| `release` | `number` | `0.15` | 0 … 2 | `s` | tunable | Seconds the foot takes to rejoin its animation once lifted (0: at once). |
|
|
828
|
+
| `maxDistance` | `number` | `0.5` | ≥ 0 | `m` | tunable | Farther than this from where the animation puts the foot, the lock lets go (a leg cannot stretch). |
|
|
829
|
+
| `planted` | `boolean` | `false` | — | — | read only | Written: the playing clips plant the foot this tick. |
|
|
830
|
+
| `locked` | `boolean` | `false` | — | — | read only | Written: the foot is held at its lock this tick. |
|
|
831
|
+
|
|
832
|
+
```ogt
|
|
833
|
+
component FootLock {
|
|
834
|
+
doc "Foot locking: while the playing clips plant `foot` (within 5 mm of its lowest in each clip, the notion retargeting uses, weighed across blends and cross-fades: planted when the planting clips hold at least half the pose), the foot stays where it touched the ground, through clip blends and root motion, its leg bent by two-bone IK and the foot keeping its animated orientation; when the clips lift it, the foot rejoins its animation over `release`. Put it on its own entity, one per foot; locks apply after root motion and before og.IkChain, in query order, and og.JointLimit clamps the leg. The lock is world state (the `og.anim` state block)."
|
|
835
|
+
field skeleton Entity "The entity with the og.Skeleton whose foot this holds."
|
|
836
|
+
field foot u32 "The foot joint (an index into the skin's joints); the two bones above it are the leg that bends." {
|
|
837
|
+
min 0
|
|
838
|
+
}
|
|
839
|
+
field weight f32 "How much of the lock is applied (0 = the animated foot, 1 = held)." {
|
|
840
|
+
default 1
|
|
841
|
+
min 0
|
|
842
|
+
max 1
|
|
843
|
+
tunable true
|
|
844
|
+
}
|
|
845
|
+
field release f32 "Seconds the foot takes to rejoin its animation once lifted (0: at once)." {
|
|
846
|
+
default 0.15
|
|
847
|
+
min 0
|
|
848
|
+
max 2
|
|
849
|
+
unit s
|
|
850
|
+
tunable true
|
|
851
|
+
}
|
|
852
|
+
field maxDistance f32 "Farther than this from where the animation puts the foot, the lock lets go (a leg cannot stretch)." {
|
|
853
|
+
default 0.5
|
|
854
|
+
min 0
|
|
855
|
+
unit m
|
|
856
|
+
tunable true
|
|
857
|
+
}
|
|
858
|
+
field planted bool "Written: the playing clips plant the foot this tick." {
|
|
859
|
+
readonly true
|
|
860
|
+
}
|
|
861
|
+
field locked bool "Written: the foot is held at its lock this tick." {
|
|
862
|
+
readonly true
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
```
|
|
866
|
+
|
|
867
|
+
<sub>`api.ogt` line 8120</sub>
|
|
868
|
+
|
|
869
|
+
<a id="record-SpringBone"></a>
|
|
870
|
+
|
|
871
|
+
### `og.SpringBone` (component)
|
|
872
|
+
|
|
873
|
+
A spring (jiggle) bone chain, three-vrm's VRMSpringBone: `joint` and its `bones` - 1 parents swing after their parents' motion. Each joint's tail (the next joint of the chain; for the last joint its first child, or its parent bone continued at the same length) is a point pulled towards where the animated pose puts it by a damped spring (`frequency`, `damping`), under `gravity`, held at the bone's length, and the joint turns to point at it. Applied after og.IkChain and og.LookAt, top joint first; put it on its own entity (a tail, an ear, a strand of hair, a single jiggling node), one per chain. Deterministic under the fixed tick; the tails' positions and velocities are world state (the `og.anim` state block), so a restore continues a swing exactly. A changed chain (another skeleton, length or space) restarts at the animated pose.
|
|
874
|
+
|
|
875
|
+
Token `og.SpringBone`, registered under the schema name `og.SpringBone`; its value type is `SpringBone`.
|
|
876
|
+
|
|
877
|
+
| Field | Type | Default | Range | Unit | Notes | Doc |
|
|
878
|
+
|---|---|---|---|---|---|---|
|
|
879
|
+
| `skeleton` | `Entity` | `0` | — | — | — | The entity with the og.Skeleton whose joints this swings. |
|
|
880
|
+
| `joint` | `number` | `0` | ≥ 0 | — | — | The chain's last joint (an index into the skin's joints): the tip of a tail, an ear. |
|
|
881
|
+
| `bones` | `number` | `1` | 1 … 16 | — | — | How many joints swing: `joint` and its parents (1 is the joint alone). |
|
|
882
|
+
| `frequency` | `number` | `3` | 0 … 30 | `hz` | tunable | How fast a tail springs back to its animated place: the spring's natural frequency (0: no spring, it only hangs and swings). |
|
|
883
|
+
| `damping` | `number` | `0.3` | 0 … 2 | — | tunable | The damping ratio: 0 swings on, 1 settles without overshooting (critical damping). |
|
|
884
|
+
| `tipFrequency` | `number` | `1` | 0 … 4 | — | tunable | The last joint's frequency as a multiple of `frequency`, the joints between in proportion along the chain (1: every joint alike; 0.25: the tip springs back four times slower than the top, a soft strand on a stiff root). |
|
|
885
|
+
| `tipDamping` | `number` | `1` | 0 … 4 | — | tunable | The last joint's damping ratio as a multiple of `damping`, the joints between in proportion along the chain (1: every joint alike). |
|
|
886
|
+
| `gravity` | `Vector3` | `{ x: 0, y: 0, z: 0 }` | — | `mps2` | — | An acceleration on every tail, in `space` (three-vrm's gravityDir times gravityPower): (0, -9.8, 0) makes a chain droop. |
|
|
887
|
+
| `space` | `SpringSpace` | `"world"` | — | — | — | Where the tails move: world (the frame the skeleton entity's og.Transform is in, so the chain lags behind the entity's motion) or model (only the animation moves it). |
|
|
888
|
+
| `weight` | `number` | `1` | 0 … 1 | — | tunable | How much of the swing is applied (0 = the animated pose, 1 = the spring's). |
|
|
889
|
+
| `radius` | `number` | `0` | ≥ 0 | `m` | tunable | The tails' radius against og.SpringCollider (three-vrm's hitRadius): a tail stays this far outside every collider it meets (0: a point). |
|
|
890
|
+
| `colliders` | `number` | `4294967295` | — | — | — | The og.SpringCollider layers the tails are pushed out of, as bits: a collider on the same skeleton counts when its `layers` meet these. |
|
|
891
|
+
| `lag` | `number` | `0` | — | `m` | read only | Written: the farthest a tail is from its animated place this tick. |
|
|
892
|
+
|
|
893
|
+
```ogt
|
|
894
|
+
component SpringBone {
|
|
895
|
+
doc "A spring (jiggle) bone chain, three-vrm's VRMSpringBone: `joint` and its `bones` - 1 parents swing after their parents' motion. Each joint's tail (the next joint of the chain; for the last joint its first child, or its parent bone continued at the same length) is a point pulled towards where the animated pose puts it by a damped spring (`frequency`, `damping`), under `gravity`, held at the bone's length, and the joint turns to point at it. Applied after og.IkChain and og.LookAt, top joint first; put it on its own entity (a tail, an ear, a strand of hair, a single jiggling node), one per chain. Deterministic under the fixed tick; the tails' positions and velocities are world state (the `og.anim` state block), so a restore continues a swing exactly. A changed chain (another skeleton, length or space) restarts at the animated pose."
|
|
896
|
+
field skeleton Entity "The entity with the og.Skeleton whose joints this swings."
|
|
897
|
+
field joint u32 "The chain's last joint (an index into the skin's joints): the tip of a tail, an ear." {
|
|
898
|
+
min 0
|
|
899
|
+
}
|
|
900
|
+
field bones u32 "How many joints swing: `joint` and its parents (1 is the joint alone)." {
|
|
901
|
+
default 1
|
|
902
|
+
min 1
|
|
903
|
+
max 16
|
|
904
|
+
}
|
|
905
|
+
field frequency f32 "How fast a tail springs back to its animated place: the spring's natural frequency (0: no spring, it only hangs and swings)." {
|
|
906
|
+
default 3
|
|
907
|
+
min 0
|
|
908
|
+
max 30
|
|
909
|
+
unit hz
|
|
910
|
+
tunable true
|
|
911
|
+
}
|
|
912
|
+
field damping f32 "The damping ratio: 0 swings on, 1 settles without overshooting (critical damping)." {
|
|
913
|
+
default 0.3
|
|
914
|
+
min 0
|
|
915
|
+
max 2
|
|
916
|
+
tunable true
|
|
917
|
+
}
|
|
918
|
+
field tipFrequency f32 "The last joint's frequency as a multiple of `frequency`, the joints between in proportion along the chain (1: every joint alike; 0.25: the tip springs back four times slower than the top, a soft strand on a stiff root)." {
|
|
919
|
+
default 1
|
|
920
|
+
min 0
|
|
921
|
+
max 4
|
|
922
|
+
tunable true
|
|
923
|
+
}
|
|
924
|
+
field tipDamping f32 "The last joint's damping ratio as a multiple of `damping`, the joints between in proportion along the chain (1: every joint alike)." {
|
|
925
|
+
default 1
|
|
926
|
+
min 0
|
|
927
|
+
max 4
|
|
928
|
+
tunable true
|
|
929
|
+
}
|
|
930
|
+
field gravity Vector3 "An acceleration on every tail, in `space` (three-vrm's gravityDir times gravityPower): (0, -9.8, 0) makes a chain droop." {
|
|
931
|
+
unit mps2
|
|
932
|
+
}
|
|
933
|
+
field space SpringSpace "Where the tails move: world (the frame the skeleton entity's og.Transform is in, so the chain lags behind the entity's motion) or model (only the animation moves it)."
|
|
934
|
+
field weight f32 "How much of the swing is applied (0 = the animated pose, 1 = the spring's)." {
|
|
935
|
+
default 1
|
|
936
|
+
min 0
|
|
937
|
+
max 1
|
|
938
|
+
tunable true
|
|
939
|
+
}
|
|
940
|
+
field radius f32 "The tails' radius against og.SpringCollider (three-vrm's hitRadius): a tail stays this far outside every collider it meets (0: a point)." {
|
|
941
|
+
min 0
|
|
942
|
+
unit m
|
|
943
|
+
tunable true
|
|
944
|
+
}
|
|
945
|
+
field colliders u32 "The og.SpringCollider layers the tails are pushed out of, as bits: a collider on the same skeleton counts when its `layers` meet these." {
|
|
946
|
+
default 4294967295
|
|
947
|
+
}
|
|
948
|
+
field lag f32 "Written: the farthest a tail is from its animated place this tick." {
|
|
949
|
+
readonly true
|
|
950
|
+
unit m
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
<sub>`api.ogt` line 8166</sub>
|
|
956
|
+
|
|
957
|
+
<a id="record-SpringCollider"></a>
|
|
958
|
+
|
|
959
|
+
### `og.SpringCollider` (component)
|
|
960
|
+
|
|
961
|
+
A collider spring bones are kept out of, three-vrm's VRMSpringBoneCollider: a sphere or a capsule riding on a joint of a skeleton (a head, a chest, an upper arm), so hair, ears and tails do not swing through the body. Each tick, after a tail of an og.SpringBone of the same skeleton has stepped and before its joint turns, the tail is pushed out of every collider whose `layers` meet the spring's `colliders` (in query order) to `radius` plus the spring's `radius`, keeping its bone's length. Put it on its own entity, one per shape; colliders follow the pose as it is when a chain is swung, so one on a joint an earlier chain swung follows that swing.
|
|
962
|
+
|
|
963
|
+
Token `og.SpringCollider`, registered under the schema name `og.SpringCollider`; its value type is `SpringCollider`.
|
|
964
|
+
|
|
965
|
+
| Field | Type | Default | Range | Unit | Notes | Doc |
|
|
966
|
+
|---|---|---|---|---|---|---|
|
|
967
|
+
| `skeleton` | `Entity` | `0` | — | — | — | The entity with the og.Skeleton whose spring bones this keeps out. |
|
|
968
|
+
| `joint` | `number` | `0` | ≥ 0 | — | — | The joint the collider rides on (an index into the skin's joints). |
|
|
969
|
+
| `shape` | `SpringColliderShape` | `"sphere"` | — | — | — | A sphere about `offset`, or a capsule from `offset` to `tail`. |
|
|
970
|
+
| `offset` | `Vector3` | `{ x: 0, y: 0, z: 0 }` | — | `m` | — | The sphere's centre, or the capsule's first end, in the joint's frame. |
|
|
971
|
+
| `tail` | `Vector3` | `{ x: 0, y: 0, z: 0 }` | — | `m` | — | The capsule's other end, in the joint's frame (a sphere ignores it). |
|
|
972
|
+
| `radius` | `number` | `0.1` | ≥ 0 | `m` | tunable | The radius, in metres of the skeleton's model space (the joint's own scale does not apply). |
|
|
973
|
+
| `layers` | `number` | `1` | — | — | — | The layers this collider is on, as bits (a spring bone's `colliders` picks them). |
|
|
974
|
+
|
|
975
|
+
```ogt
|
|
976
|
+
component SpringCollider {
|
|
977
|
+
doc "A collider spring bones are kept out of, three-vrm's VRMSpringBoneCollider: a sphere or a capsule riding on a joint of a skeleton (a head, a chest, an upper arm), so hair, ears and tails do not swing through the body. Each tick, after a tail of an og.SpringBone of the same skeleton has stepped and before its joint turns, the tail is pushed out of every collider whose `layers` meet the spring's `colliders` (in query order) to `radius` plus the spring's `radius`, keeping its bone's length. Put it on its own entity, one per shape; colliders follow the pose as it is when a chain is swung, so one on a joint an earlier chain swung follows that swing."
|
|
978
|
+
field skeleton Entity "The entity with the og.Skeleton whose spring bones this keeps out."
|
|
979
|
+
field joint u32 "The joint the collider rides on (an index into the skin's joints)." {
|
|
980
|
+
min 0
|
|
981
|
+
}
|
|
982
|
+
field shape SpringColliderShape "A sphere about `offset`, or a capsule from `offset` to `tail`."
|
|
983
|
+
field offset Vector3 "The sphere's centre, or the capsule's first end, in the joint's frame." {
|
|
984
|
+
unit m
|
|
985
|
+
}
|
|
986
|
+
field tail Vector3 "The capsule's other end, in the joint's frame (a sphere ignores it)." {
|
|
987
|
+
unit m
|
|
988
|
+
}
|
|
989
|
+
field radius f32 "The radius, in metres of the skeleton's model space (the joint's own scale does not apply)." {
|
|
990
|
+
default 0.1
|
|
991
|
+
min 0
|
|
992
|
+
unit m
|
|
993
|
+
tunable true
|
|
994
|
+
}
|
|
995
|
+
field layers u32 "The layers this collider is on, as bits (a spring bone's `colliders` picks them)." {
|
|
996
|
+
default 1
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
```
|
|
1000
|
+
|
|
1001
|
+
<sub>`api.ogt` line 8239</sub>
|
|
642
1002
|
|
|
643
1003
|
<a id="record-AnimationEvent"></a>
|
|
644
1004
|
|
|
@@ -669,7 +1029,7 @@ event AnimationEvent {
|
|
|
669
1029
|
}
|
|
670
1030
|
```
|
|
671
1031
|
|
|
672
|
-
<sub>`api.ogt` line
|
|
1032
|
+
<sub>`api.ogt` line 8263</sub>
|
|
673
1033
|
|
|
674
1034
|
<a id="record-Flipbook"></a>
|
|
675
1035
|
|
|
@@ -725,7 +1085,7 @@ component Flipbook {
|
|
|
725
1085
|
}
|
|
726
1086
|
```
|
|
727
1087
|
|
|
728
|
-
<sub>`api.ogt` line
|
|
1088
|
+
<sub>`api.ogt` line 8392</sub>
|
|
729
1089
|
|
|
730
1090
|
<a id="record-FlipbookEvent"></a>
|
|
731
1091
|
|
|
@@ -752,7 +1112,7 @@ event FlipbookEvent {
|
|
|
752
1112
|
}
|
|
753
1113
|
```
|
|
754
1114
|
|
|
755
|
-
<sub>`api.ogt` line
|
|
1115
|
+
<sub>`api.ogt` line 8423</sub>
|
|
756
1116
|
|
|
757
1117
|
<a id="record-Skeleton2D"></a>
|
|
758
1118
|
|
|
@@ -773,6 +1133,7 @@ Token `og.Skeleton2D`, registered under the schema name `og.Skeleton2D`; its val
|
|
|
773
1133
|
| `loop` | `boolean` | `true` | — | — | — | Wrap at the clip's end; otherwise hold the last pose and set `finished`. Rig2DInfo.clips says what the rig's author meant. |
|
|
774
1134
|
| `flipX` | `boolean` | `false` | — | — | — | Mirror the rig left to right about the entity's position (a character facing left). |
|
|
775
1135
|
| `layer` | `number` | `0` | — | — | — | The sprite layer it draws in, sorted with the sprites there (after them when they share the layer). |
|
|
1136
|
+
| `skin` | `number` | `0` | ≥ 0 | — | — | The skin it wears: an index into Rig2DInfo.skins (0 is the rig's default; `rig.skins.indexOf("armor")` finds one by name). A skin shows its own attachment wherever the setup pose or a clip shows the default's; a slot the skin leaves alone shows the default's. Change it any tick: the pose is drawn from it. |
|
|
776
1137
|
| `finished` | `boolean` | `false` | — | — | read only | Written: a clip that does not loop reached its end (or its start, played backwards). |
|
|
777
1138
|
|
|
778
1139
|
```ogt
|
|
@@ -798,19 +1159,22 @@ component Skeleton2D {
|
|
|
798
1159
|
}
|
|
799
1160
|
field flipX bool "Mirror the rig left to right about the entity's position (a character facing left)."
|
|
800
1161
|
field layer i32 "The sprite layer it draws in, sorted with the sprites there (after them when they share the layer)."
|
|
1162
|
+
field skin u32 "The skin it wears: an index into Rig2DInfo.skins (0 is the rig's default; `rig.skins.indexOf(\"armor\")` finds one by name). A skin shows its own attachment wherever the setup pose or a clip shows the default's; a slot the skin leaves alone shows the default's. Change it any tick: the pose is drawn from it." {
|
|
1163
|
+
min 0
|
|
1164
|
+
}
|
|
801
1165
|
field finished bool "Written: a clip that does not loop reached its end (or its start, played backwards)." {
|
|
802
1166
|
readonly true
|
|
803
1167
|
}
|
|
804
1168
|
}
|
|
805
1169
|
```
|
|
806
1170
|
|
|
807
|
-
<sub>`api.ogt` line
|
|
1171
|
+
<sub>`api.ogt` line 8487</sub>
|
|
808
1172
|
|
|
809
1173
|
<a id="record-Skeleton2DEvent"></a>
|
|
810
1174
|
|
|
811
1175
|
### `og.Skeleton2DEvent` (event)
|
|
812
1176
|
|
|
813
|
-
A 2D skeleton's clip passed one of its events (`event 0.2 "step"` in the rig) in the last tick: footsteps, the frame a swing lands. Read in the tick after, like every event; a clip started at 0 fires its events at 0, a looping clip fires each once per pass.
|
|
1177
|
+
A 2D skeleton's clip, or the clip a child armature in one of its slots plays, passed one of its events (`event 0.2 "step"` in the rig) in the last tick: footsteps, the frame a swing lands. Read in the tick after, like every event; a clip started at 0 fires its events at 0, a looping clip fires each once per pass.
|
|
814
1178
|
|
|
815
1179
|
Token `og.Skeleton2DEvent`, registered under the schema name `og.Skeleton2DEvent`; its value type is `Skeleton2DEvent`.
|
|
816
1180
|
|
|
@@ -820,20 +1184,22 @@ Token `og.Skeleton2DEvent`, registered under the schema name `og.Skeleton2DEvent
|
|
|
820
1184
|
| `clip` | `number` | `0` | — | — | — | The clip index. |
|
|
821
1185
|
| `name` | `string` | `""` | — | — | — | The event's name (at most 63 bytes). |
|
|
822
1186
|
| `time` | `number` | `0` | — | `s` | — | The event's time in the clip. |
|
|
1187
|
+
| `armature` | `string` | `""` | — | — | — | Empty for the skeleton's own clip; for an event of a child armature shown in one of its slots, that armature's name (`clip` and `time` are then the child's clip and its time): a flame's crackle apart from the keeper's footsteps (at most 63 bytes). |
|
|
823
1188
|
|
|
824
1189
|
```ogt
|
|
825
1190
|
event Skeleton2DEvent {
|
|
826
|
-
doc "A 2D skeleton's clip passed one of its events (`event 0.2 \"step\"` in the rig) in the last tick: footsteps, the frame a swing lands. Read in the tick after, like every event; a clip started at 0 fires its events at 0, a looping clip fires each once per pass."
|
|
1191
|
+
doc "A 2D skeleton's clip, or the clip a child armature in one of its slots plays, passed one of its events (`event 0.2 \"step\"` in the rig) in the last tick: footsteps, the frame a swing lands. Read in the tick after, like every event; a clip started at 0 fires its events at 0, a looping clip fires each once per pass."
|
|
827
1192
|
field entity Entity "The entity with the og.Skeleton2D."
|
|
828
1193
|
field clip u32 "The clip index."
|
|
829
1194
|
field name String "The event's name (at most 63 bytes)."
|
|
830
1195
|
field time f32 "The event's time in the clip." {
|
|
831
1196
|
unit s
|
|
832
1197
|
}
|
|
1198
|
+
field armature String "Empty for the skeleton's own clip; for an event of a child armature shown in one of its slots, that armature's name (`clip` and `time` are then the child's clip and its time): a flame's crackle apart from the keeper's footsteps (at most 63 bytes)."
|
|
833
1199
|
}
|
|
834
1200
|
```
|
|
835
1201
|
|
|
836
|
-
<sub>`api.ogt` line
|
|
1202
|
+
<sub>`api.ogt` line 8517</sub>
|
|
837
1203
|
|
|
838
1204
|
<a id="record-IkTarget2D"></a>
|
|
839
1205
|
|
|
@@ -884,7 +1250,7 @@ component IkTarget2D {
|
|
|
884
1250
|
}
|
|
885
1251
|
```
|
|
886
1252
|
|
|
887
|
-
<sub>`api.ogt` line
|
|
1253
|
+
<sub>`api.ogt` line 8528</sub>
|
|
888
1254
|
|
|
889
1255
|
## Types
|
|
890
1256
|
|
|
@@ -900,7 +1266,7 @@ A generational handle: a number the engine hands out. A dead handle is an error
|
|
|
900
1266
|
handle SkeletonAsset "A rig: a glTF's nodes in topological order with their rest transforms, and its skins (joints and inverse bind matrices)."
|
|
901
1267
|
```
|
|
902
1268
|
|
|
903
|
-
<sub>`api.ogt` line
|
|
1269
|
+
<sub>`api.ogt` line 7767</sub>
|
|
904
1270
|
|
|
905
1271
|
<a id="type-ClipAsset"></a>
|
|
906
1272
|
|
|
@@ -914,7 +1280,7 @@ A generational handle: a number the engine hands out. A dead handle is an error
|
|
|
914
1280
|
handle ClipAsset "An animation clip, resampled at the cook's rate, with its markers."
|
|
915
1281
|
```
|
|
916
1282
|
|
|
917
|
-
<sub>`api.ogt` line
|
|
1283
|
+
<sub>`api.ogt` line 7768</sub>
|
|
918
1284
|
|
|
919
1285
|
<a id="type-GraphAsset"></a>
|
|
920
1286
|
|
|
@@ -928,7 +1294,7 @@ A generational handle: a number the engine hands out. A dead handle is an error
|
|
|
928
1294
|
handle GraphAsset "A blend-tree graph (`type animgraph`) whose clip references were resolved to clip handles."
|
|
929
1295
|
```
|
|
930
1296
|
|
|
931
|
-
<sub>`api.ogt` line
|
|
1297
|
+
<sub>`api.ogt` line 7769</sub>
|
|
932
1298
|
|
|
933
1299
|
<a id="type-RootMotion"></a>
|
|
934
1300
|
|
|
@@ -953,7 +1319,7 @@ enum RootMotion {
|
|
|
953
1319
|
}
|
|
954
1320
|
```
|
|
955
1321
|
|
|
956
|
-
<sub>`api.ogt` line
|
|
1322
|
+
<sub>`api.ogt` line 7792</sub>
|
|
957
1323
|
|
|
958
1324
|
<a id="type-BlendshapeSource"></a>
|
|
959
1325
|
|
|
@@ -976,7 +1342,7 @@ enum BlendshapeSource {
|
|
|
976
1342
|
}
|
|
977
1343
|
```
|
|
978
1344
|
|
|
979
|
-
<sub>`api.ogt` line
|
|
1345
|
+
<sub>`api.ogt` line 7806</sub>
|
|
980
1346
|
|
|
981
1347
|
<a id="type-IkSolver"></a>
|
|
982
1348
|
|
|
@@ -999,7 +1365,7 @@ enum IkSolver {
|
|
|
999
1365
|
}
|
|
1000
1366
|
```
|
|
1001
1367
|
|
|
1002
|
-
<sub>`api.ogt` line
|
|
1368
|
+
<sub>`api.ogt` line 7819</sub>
|
|
1003
1369
|
|
|
1004
1370
|
<a id="type-IkSpace"></a>
|
|
1005
1371
|
|
|
@@ -1022,7 +1388,53 @@ enum IkSpace {
|
|
|
1022
1388
|
}
|
|
1023
1389
|
```
|
|
1024
1390
|
|
|
1025
|
-
<sub>`api.ogt` line
|
|
1391
|
+
<sub>`api.ogt` line 7832</sub>
|
|
1392
|
+
|
|
1393
|
+
<a id="type-SpringSpace"></a>
|
|
1394
|
+
|
|
1395
|
+
### `SpringSpace` (enum)
|
|
1396
|
+
|
|
1397
|
+
Where a spring bone's tails move.
|
|
1398
|
+
|
|
1399
|
+
A string: one of the variants below. The zero value is `"world"`.
|
|
1400
|
+
|
|
1401
|
+
| Variant | Doc |
|
|
1402
|
+
|---|---|
|
|
1403
|
+
| `"world"` | The frame the skeleton entity's og.Transform is written in: the chain lags behind the entity's motion (walking, root motion, a jump). |
|
|
1404
|
+
| `"model"` | The skeleton's model space: only the animation moves the chain (a teleport or a vehicle carrying the entity does not). |
|
|
1405
|
+
|
|
1406
|
+
```ogt
|
|
1407
|
+
enum SpringSpace {
|
|
1408
|
+
doc "Where a spring bone's tails move."
|
|
1409
|
+
variant world "The frame the skeleton entity's og.Transform is written in: the chain lags behind the entity's motion (walking, root motion, a jump)."
|
|
1410
|
+
variant model "The skeleton's model space: only the animation moves the chain (a teleport or a vehicle carrying the entity does not)."
|
|
1411
|
+
}
|
|
1412
|
+
```
|
|
1413
|
+
|
|
1414
|
+
<sub>`api.ogt` line 8153</sub>
|
|
1415
|
+
|
|
1416
|
+
<a id="type-SpringColliderShape"></a>
|
|
1417
|
+
|
|
1418
|
+
### `SpringColliderShape` (enum)
|
|
1419
|
+
|
|
1420
|
+
The shape of a spring collider.
|
|
1421
|
+
|
|
1422
|
+
A string: one of the variants below. The zero value is `"sphere"`.
|
|
1423
|
+
|
|
1424
|
+
| Variant | Doc |
|
|
1425
|
+
|---|---|
|
|
1426
|
+
| `"sphere"` | A ball of `radius` about `offset`. |
|
|
1427
|
+
| `"capsule"` | A capsule of `radius` about the segment from `offset` to `tail`. |
|
|
1428
|
+
|
|
1429
|
+
```ogt
|
|
1430
|
+
enum SpringColliderShape {
|
|
1431
|
+
doc "The shape of a spring collider."
|
|
1432
|
+
variant sphere "A ball of `radius` about `offset`."
|
|
1433
|
+
variant capsule "A capsule of `radius` about the segment from `offset` to `tail`."
|
|
1434
|
+
}
|
|
1435
|
+
```
|
|
1436
|
+
|
|
1437
|
+
<sub>`api.ogt` line 8226</sub>
|
|
1026
1438
|
|
|
1027
1439
|
<a id="type-ClipInfo"></a>
|
|
1028
1440
|
|
|
@@ -1049,7 +1461,7 @@ struct ClipInfo {
|
|
|
1049
1461
|
}
|
|
1050
1462
|
```
|
|
1051
1463
|
|
|
1052
|
-
<sub>`api.ogt` line
|
|
1464
|
+
<sub>`api.ogt` line 8274</sub>
|
|
1053
1465
|
|
|
1054
1466
|
<a id="type-Animation"></a>
|
|
1055
1467
|
|
|
@@ -1076,7 +1488,7 @@ struct Animation {
|
|
|
1076
1488
|
}
|
|
1077
1489
|
```
|
|
1078
1490
|
|
|
1079
|
-
<sub>`api.ogt` line
|
|
1491
|
+
<sub>`api.ogt` line 8284</sub>
|
|
1080
1492
|
|
|
1081
1493
|
<a id="type-GraphDesc"></a>
|
|
1082
1494
|
|
|
@@ -1100,21 +1512,21 @@ struct GraphDesc {
|
|
|
1100
1512
|
}
|
|
1101
1513
|
```
|
|
1102
1514
|
|
|
1103
|
-
<sub>`api.ogt` line
|
|
1515
|
+
<sub>`api.ogt` line 8293</sub>
|
|
1104
1516
|
|
|
1105
1517
|
<a id="type-Rig"></a>
|
|
1106
1518
|
|
|
1107
1519
|
### `Rig` (handle)
|
|
1108
1520
|
|
|
1109
|
-
A humanoid map from og.load.rig (a cooked `.ogt` of `type rig`): the naming scheme a skeleton's node names follow
|
|
1521
|
+
A humanoid map from og.load.rig (a cooked `.ogt` of `type rig`): the naming scheme a skeleton's node names follow, the standard bones it names outright and, with `footHeight`, how high its ankles stand above the ground.
|
|
1110
1522
|
|
|
1111
1523
|
A generational handle: a number the engine hands out. A dead handle is an error value, never a crash.
|
|
1112
1524
|
|
|
1113
1525
|
```ogt
|
|
1114
|
-
handle Rig "A humanoid map from og.load.rig (a cooked `.ogt` of `type rig`): the naming scheme a skeleton's node names follow
|
|
1526
|
+
handle Rig "A humanoid map from og.load.rig (a cooked `.ogt` of `type rig`): the naming scheme a skeleton's node names follow, the standard bones it names outright and, with `footHeight`, how high its ankles stand above the ground."
|
|
1115
1527
|
```
|
|
1116
1528
|
|
|
1117
|
-
<sub>`api.ogt` line
|
|
1529
|
+
<sub>`api.ogt` line 8307</sub>
|
|
1118
1530
|
|
|
1119
1531
|
<a id="type-HumanBone"></a>
|
|
1120
1532
|
|
|
@@ -1124,18 +1536,18 @@ One standard humanoid bone of a skeleton.
|
|
|
1124
1536
|
|
|
1125
1537
|
| Field | Type | Default | Range | Unit | Notes | Doc |
|
|
1126
1538
|
|---|---|---|---|---|---|---|
|
|
1127
|
-
| `bone` | `string` | `""` | — | — | — | The standard bone: hips, spine, chest, upperChest, neck, head, then leftShoulder, leftUpperArm, leftLowerArm, leftHand, the right arm, leftUpperLeg, leftLowerLeg, leftFoot, leftToes and the right leg. |
|
|
1539
|
+
| `bone` | `string` | `""` | — | — | — | The standard bone: hips, spine, chest, upperChest, neck, head, then leftShoulder, leftUpperArm, leftLowerArm, leftHand, the right arm, leftUpperLeg, leftLowerLeg, leftFoot, leftToes and the right leg, then each hand's fingers (VRM 1.0 names): leftThumbMetacarpal, leftThumbProximal, leftThumbDistal, leftIndexProximal, leftIndexIntermediate, leftIndexDistal, the same for Middle, Ring and Little, and the right hand's. |
|
|
1128
1540
|
| `node` | `string` | `""` | — | — | — | The skeleton node that is that bone. |
|
|
1129
1541
|
|
|
1130
1542
|
```ogt
|
|
1131
1543
|
struct HumanBone {
|
|
1132
1544
|
doc "One standard humanoid bone of a skeleton."
|
|
1133
|
-
field bone String "The standard bone: hips, spine, chest, upperChest, neck, head, then leftShoulder, leftUpperArm, leftLowerArm, leftHand, the right arm, leftUpperLeg, leftLowerLeg, leftFoot, leftToes and the right leg."
|
|
1545
|
+
field bone String "The standard bone: hips, spine, chest, upperChest, neck, head, then leftShoulder, leftUpperArm, leftLowerArm, leftHand, the right arm, leftUpperLeg, leftLowerLeg, leftFoot, leftToes and the right leg, then each hand's fingers (VRM 1.0 names): leftThumbMetacarpal, leftThumbProximal, leftThumbDistal, leftIndexProximal, leftIndexIntermediate, leftIndexDistal, the same for Middle, Ring and Little, and the right hand's."
|
|
1134
1546
|
field node String "The skeleton node that is that bone."
|
|
1135
1547
|
}
|
|
1136
1548
|
```
|
|
1137
1549
|
|
|
1138
|
-
<sub>`api.ogt` line
|
|
1550
|
+
<sub>`api.ogt` line 8316</sub>
|
|
1139
1551
|
|
|
1140
1552
|
<a id="type-Humanoid"></a>
|
|
1141
1553
|
|
|
@@ -1156,7 +1568,7 @@ struct Humanoid {
|
|
|
1156
1568
|
}
|
|
1157
1569
|
```
|
|
1158
1570
|
|
|
1159
|
-
<sub>`api.ogt` line
|
|
1571
|
+
<sub>`api.ogt` line 8322</sub>
|
|
1160
1572
|
|
|
1161
1573
|
<a id="type-HumanoidDesc"></a>
|
|
1162
1574
|
|
|
@@ -1180,7 +1592,7 @@ struct HumanoidDesc {
|
|
|
1180
1592
|
}
|
|
1181
1593
|
```
|
|
1182
1594
|
|
|
1183
|
-
<sub>`api.ogt` line
|
|
1595
|
+
<sub>`api.ogt` line 8328</sub>
|
|
1184
1596
|
|
|
1185
1597
|
<a id="type-RetargetDesc"></a>
|
|
1186
1598
|
|
|
@@ -1214,7 +1626,31 @@ struct RetargetDesc {
|
|
|
1214
1626
|
}
|
|
1215
1627
|
```
|
|
1216
1628
|
|
|
1217
|
-
<sub>`api.ogt` line
|
|
1629
|
+
<sub>`api.ogt` line 8342</sub>
|
|
1630
|
+
|
|
1631
|
+
<a id="type-MirrorDesc"></a>
|
|
1632
|
+
|
|
1633
|
+
### `MirrorDesc` (desc struct)
|
|
1634
|
+
|
|
1635
|
+
A clip to play on the other side of the skeleton it was made for.
|
|
1636
|
+
|
|
1637
|
+
A desc: every field may be omitted and takes its default; `{}` is valid.
|
|
1638
|
+
|
|
1639
|
+
| Field | Type | Default | Range | Unit | Notes | Doc |
|
|
1640
|
+
|---|---|---|---|---|---|---|
|
|
1641
|
+
| `clip` | `ClipAsset` | `0` | — | — | — | The clip, made for `skeleton`. |
|
|
1642
|
+
| `skeleton` | `SkeletonAsset` | `0` | — | — | — | The skeleton the clip was made for (og.load.animation's `skeleton`); its left and right nodes are paired by name, the side tokens every rig naming scheme writes swapped (LeftArm and RightArm, thigh.L and thigh.R, J_Bip_L_ and J_Bip_R_, calf_l and calf_r). |
|
|
1643
|
+
|
|
1644
|
+
```ogt
|
|
1645
|
+
struct MirrorDesc {
|
|
1646
|
+
doc "A clip to play on the other side of the skeleton it was made for."
|
|
1647
|
+
desc true
|
|
1648
|
+
field clip ClipAsset "The clip, made for `skeleton`."
|
|
1649
|
+
field skeleton SkeletonAsset "The skeleton the clip was made for (og.load.animation's `skeleton`); its left and right nodes are paired by name, the side tokens every rig naming scheme writes swapped (LeftArm and RightArm, thigh.L and thigh.R, J_Bip_L_ and J_Bip_R_, calf_l and calf_r)."
|
|
1650
|
+
}
|
|
1651
|
+
```
|
|
1652
|
+
|
|
1653
|
+
<sub>`api.ogt` line 8362</sub>
|
|
1218
1654
|
|
|
1219
1655
|
<a id="type-FlipbookSheet"></a>
|
|
1220
1656
|
|
|
@@ -1228,7 +1664,7 @@ A generational handle: a number the engine hands out. A dead handle is an error
|
|
|
1228
1664
|
handle FlipbookSheet "A sprite sheet's frames and clips (a cooked `.ogt` of `type flipbook`), from og.load.flipbook."
|
|
1229
1665
|
```
|
|
1230
1666
|
|
|
1231
|
-
<sub>`api.ogt` line
|
|
1667
|
+
<sub>`api.ogt` line 8376</sub>
|
|
1232
1668
|
|
|
1233
1669
|
<a id="type-FlipMode"></a>
|
|
1234
1670
|
|
|
@@ -1253,7 +1689,7 @@ enum FlipMode {
|
|
|
1253
1689
|
}
|
|
1254
1690
|
```
|
|
1255
1691
|
|
|
1256
|
-
<sub>`api.ogt` line
|
|
1692
|
+
<sub>`api.ogt` line 8385</sub>
|
|
1257
1693
|
|
|
1258
1694
|
<a id="type-FlipbookClipInfo"></a>
|
|
1259
1695
|
|
|
@@ -1284,7 +1720,7 @@ struct FlipbookClipInfo {
|
|
|
1284
1720
|
}
|
|
1285
1721
|
```
|
|
1286
1722
|
|
|
1287
|
-
<sub>`api.ogt` line
|
|
1723
|
+
<sub>`api.ogt` line 8431</sub>
|
|
1288
1724
|
|
|
1289
1725
|
<a id="type-FlipbookInfo"></a>
|
|
1290
1726
|
|
|
@@ -1315,7 +1751,7 @@ struct FlipbookInfo {
|
|
|
1315
1751
|
}
|
|
1316
1752
|
```
|
|
1317
1753
|
|
|
1318
|
-
<sub>`api.ogt` line
|
|
1754
|
+
<sub>`api.ogt` line 8443</sub>
|
|
1319
1755
|
|
|
1320
1756
|
<a id="type-Rig2D"></a>
|
|
1321
1757
|
|
|
@@ -1329,7 +1765,7 @@ A generational handle: a number the engine hands out. A dead handle is an error
|
|
|
1329
1765
|
handle Rig2D "A 2D rig (a cooked `.ogt` of `type rig2d`): bones, slots, region, mesh, bounding-box and child-armature attachments, IK constraints, child armatures and clips, from og.load.rig2d."
|
|
1330
1766
|
```
|
|
1331
1767
|
|
|
1332
|
-
<sub>`api.ogt` line
|
|
1768
|
+
<sub>`api.ogt` line 8478</sub>
|
|
1333
1769
|
|
|
1334
1770
|
<a id="type-Rig2DClipInfo"></a>
|
|
1335
1771
|
|
|
@@ -1358,7 +1794,7 @@ struct Rig2DClipInfo {
|
|
|
1358
1794
|
}
|
|
1359
1795
|
```
|
|
1360
1796
|
|
|
1361
|
-
<sub>`api.ogt` line
|
|
1797
|
+
<sub>`api.ogt` line 8557</sub>
|
|
1362
1798
|
|
|
1363
1799
|
<a id="type-Rig2DInfo"></a>
|
|
1364
1800
|
|
|
@@ -1374,6 +1810,7 @@ What og.load.rig2d registered, or og.anim.rig2dInfo reads back from a handle.
|
|
|
1374
1810
|
| `bones` | `readonly string[]` | `[]` | — | — | — | The bones' names, parents first. |
|
|
1375
1811
|
| `slots` | `readonly string[]` | `[]` | — | — | — | The slots' names, in draw order. |
|
|
1376
1812
|
| `constraints` | `readonly string[]` | `[]` | — | — | — | The IK constraints' names: an index here is IkTarget2D.constraint. |
|
|
1813
|
+
| `skins` | `readonly string[]` | `[]` | — | — | — | Its skins' names, `default` (the rig's own attachments) first: an index here is Skeleton2D.skin. |
|
|
1377
1814
|
| `clips` | `readonly Rig2DClipInfo[]` | `[]` | — | — | — | Its clips, in file order. |
|
|
1378
1815
|
|
|
1379
1816
|
```ogt
|
|
@@ -1385,11 +1822,12 @@ struct Rig2DInfo {
|
|
|
1385
1822
|
field bones List.String "The bones' names, parents first."
|
|
1386
1823
|
field slots List.String "The slots' names, in draw order."
|
|
1387
1824
|
field constraints List.String "The IK constraints' names: an index here is IkTarget2D.constraint."
|
|
1825
|
+
field skins List.String "Its skins' names, `default` (the rig's own attachments) first: an index here is Skeleton2D.skin."
|
|
1388
1826
|
field clips List.Rig2DClipInfo "Its clips, in file order."
|
|
1389
1827
|
}
|
|
1390
1828
|
```
|
|
1391
1829
|
|
|
1392
|
-
<sub>`api.ogt` line
|
|
1830
|
+
<sub>`api.ogt` line 8568</sub>
|
|
1393
1831
|
|
|
1394
1832
|
<a id="type-Skeleton2DBox"></a>
|
|
1395
1833
|
|
|
@@ -1412,7 +1850,7 @@ struct Skeleton2DBox {
|
|
|
1412
1850
|
}
|
|
1413
1851
|
```
|
|
1414
1852
|
|
|
1415
|
-
<sub>`api.ogt` line
|
|
1853
|
+
<sub>`api.ogt` line 8587</sub>
|
|
1416
1854
|
|
|
1417
1855
|
## Column kinds
|
|
1418
1856
|
|
|
@@ -1427,6 +1865,9 @@ Each is a factory, `SkeletonAsset(value?, options?)`, that makes one field of a
|
|
|
1427
1865
|
| <a id="column-BlendshapeSource"></a>`BlendshapeSource` | `BlendshapeSource` | `Uint32Array` | 1 | A BlendshapeSource field: the variant's index. |
|
|
1428
1866
|
| <a id="column-IkSolver"></a>`IkSolver` | `IkSolver` | `Uint32Array` | 1 | An IkSolver field: the variant's index. |
|
|
1429
1867
|
| <a id="column-IkSpace"></a>`IkSpace` | `IkSpace` | `Uint32Array` | 1 | An IkSpace field: the variant's index. |
|
|
1868
|
+
| <a id="column-SpringSpace"></a>`SpringSpace` | `SpringSpace` | `Uint32Array` | 1 | A SpringSpace field: the variant's index. |
|
|
1869
|
+
| <a id="column-SpringColliderShape"></a>`SpringColliderShape` | `SpringColliderShape` | `Uint32Array` | 1 | A SpringColliderShape field: the variant's index. |
|
|
1870
|
+
| <a id="column-Rig"></a>`Rig` | `Rig` | `Uint32Array` | 2 | A Rig handle field (0 is none): a humanoid map og.load.rig answered. |
|
|
1430
1871
|
| <a id="column-FlipbookSheet"></a>`FlipbookSheet` | `FlipbookSheet` | `Uint32Array` | 2 | A FlipbookSheet handle field. |
|
|
1431
1872
|
| <a id="column-Rig2D"></a>`Rig2D` | `Rig2D` | `Uint32Array` | 2 | A Rig2D handle field. |
|
|
1432
1873
|
|
|
@@ -1439,7 +1880,7 @@ column SkeletonAsset {
|
|
|
1439
1880
|
}
|
|
1440
1881
|
```
|
|
1441
1882
|
|
|
1442
|
-
<sub>`api.ogt` line
|
|
1883
|
+
<sub>`api.ogt` line 7771</sub>
|
|
1443
1884
|
|
|
1444
1885
|
```ogt
|
|
1445
1886
|
column ClipAsset {
|
|
@@ -1450,7 +1891,7 @@ column ClipAsset {
|
|
|
1450
1891
|
}
|
|
1451
1892
|
```
|
|
1452
1893
|
|
|
1453
|
-
<sub>`api.ogt` line
|
|
1894
|
+
<sub>`api.ogt` line 7778</sub>
|
|
1454
1895
|
|
|
1455
1896
|
```ogt
|
|
1456
1897
|
column GraphAsset {
|
|
@@ -1461,7 +1902,7 @@ column GraphAsset {
|
|
|
1461
1902
|
}
|
|
1462
1903
|
```
|
|
1463
1904
|
|
|
1464
|
-
<sub>`api.ogt` line
|
|
1905
|
+
<sub>`api.ogt` line 7785</sub>
|
|
1465
1906
|
|
|
1466
1907
|
```ogt
|
|
1467
1908
|
column RootMotion {
|
|
@@ -1472,7 +1913,7 @@ column RootMotion {
|
|
|
1472
1913
|
}
|
|
1473
1914
|
```
|
|
1474
1915
|
|
|
1475
|
-
<sub>`api.ogt` line
|
|
1916
|
+
<sub>`api.ogt` line 7799</sub>
|
|
1476
1917
|
|
|
1477
1918
|
```ogt
|
|
1478
1919
|
column BlendshapeSource {
|
|
@@ -1483,7 +1924,7 @@ column BlendshapeSource {
|
|
|
1483
1924
|
}
|
|
1484
1925
|
```
|
|
1485
1926
|
|
|
1486
|
-
<sub>`api.ogt` line
|
|
1927
|
+
<sub>`api.ogt` line 7812</sub>
|
|
1487
1928
|
|
|
1488
1929
|
```ogt
|
|
1489
1930
|
column IkSolver {
|
|
@@ -1494,7 +1935,7 @@ column IkSolver {
|
|
|
1494
1935
|
}
|
|
1495
1936
|
```
|
|
1496
1937
|
|
|
1497
|
-
<sub>`api.ogt` line
|
|
1938
|
+
<sub>`api.ogt` line 7825</sub>
|
|
1498
1939
|
|
|
1499
1940
|
```ogt
|
|
1500
1941
|
column IkSpace {
|
|
@@ -1505,7 +1946,40 @@ column IkSpace {
|
|
|
1505
1946
|
}
|
|
1506
1947
|
```
|
|
1507
1948
|
|
|
1508
|
-
<sub>`api.ogt` line
|
|
1949
|
+
<sub>`api.ogt` line 7838</sub>
|
|
1950
|
+
|
|
1951
|
+
```ogt
|
|
1952
|
+
column SpringSpace {
|
|
1953
|
+
doc "A SpringSpace field: the variant's index."
|
|
1954
|
+
array Uint32Array
|
|
1955
|
+
stride 1
|
|
1956
|
+
value SpringSpace
|
|
1957
|
+
}
|
|
1958
|
+
```
|
|
1959
|
+
|
|
1960
|
+
<sub>`api.ogt` line 8159</sub>
|
|
1961
|
+
|
|
1962
|
+
```ogt
|
|
1963
|
+
column SpringColliderShape {
|
|
1964
|
+
doc "A SpringColliderShape field: the variant's index."
|
|
1965
|
+
array Uint32Array
|
|
1966
|
+
stride 1
|
|
1967
|
+
value SpringColliderShape
|
|
1968
|
+
}
|
|
1969
|
+
```
|
|
1970
|
+
|
|
1971
|
+
<sub>`api.ogt` line 8232</sub>
|
|
1972
|
+
|
|
1973
|
+
```ogt
|
|
1974
|
+
column Rig {
|
|
1975
|
+
doc "A Rig handle field (0 is none): a humanoid map og.load.rig answered."
|
|
1976
|
+
array Uint32Array
|
|
1977
|
+
stride 2
|
|
1978
|
+
value Rig
|
|
1979
|
+
}
|
|
1980
|
+
```
|
|
1981
|
+
|
|
1982
|
+
<sub>`api.ogt` line 8309</sub>
|
|
1509
1983
|
|
|
1510
1984
|
```ogt
|
|
1511
1985
|
column FlipbookSheet {
|
|
@@ -1516,7 +1990,7 @@ column FlipbookSheet {
|
|
|
1516
1990
|
}
|
|
1517
1991
|
```
|
|
1518
1992
|
|
|
1519
|
-
<sub>`api.ogt` line
|
|
1993
|
+
<sub>`api.ogt` line 8378</sub>
|
|
1520
1994
|
|
|
1521
1995
|
```ogt
|
|
1522
1996
|
column Rig2D {
|
|
@@ -1527,4 +2001,4 @@ column Rig2D {
|
|
|
1527
2001
|
}
|
|
1528
2002
|
```
|
|
1529
2003
|
|
|
1530
|
-
<sub>`api.ogt` line
|
|
2004
|
+
<sub>`api.ogt` line 8480</sub>
|