inspect-glblisted
Install: claude install-skill playcanvas/skills
# Inspect GLBs
Resolve `scripts/inspect.mjs` relative to this skill directory and run it before choosing entity
transforms or animation names:
```sh
node <skill-directory>/scripts/inspect.mjs public/models/Character.glb
node <skill-directory>/scripts/inspect.mjs public/models/{Ship,Enemy}_*.glb
```
The output provides:
- `dims` for calculating a uniform scale;
- `groundOffset` for the model wrapper's local Y position;
- `center` for the pivot offset from the geometry centre: a non-zero X or Z means the root's
position is not where the model appears, and Y feeds grounding;
- `boundsSource` and `boundsPose` for proving how and at which pose the bounds were measured;
- `requiresRuntimeCheck` for animated morphs, skins, and incomplete decoding;
- `nodePaths`, `clips`, `joints`, and `animationTargets` for animation setup and rig comparison;
- `morphed`, `morphAnimated`, and `skinned` for pose-sensitive assets.
## Bounds precision
`aabb`, `dims`, `center`, and `groundOffset` are decoded from actual vertex positions, default morph
weights, and each node's world matrix. Confirm both source and pose before relying on them:
- `vertices` means every primitive was decoded and the bounds are exact for `boundsPose`.
- `accessor-minmax` means at least one primitive could not be decoded, so its bounds fall back to the
node-transformed local box. That over-estimates a mesh which does not fill its own box on a node
rotated off-axis, by up to 41 percent for a 45-degree yaw. `bounds