Scene assembly
SkillAI & modelsUse when composing PlayCanvas Engine, React, or Web Components gameplay entities, model hierarchies, colliders, or physics objects to create one semantic root per object with calibrated visuals and predictable lifecycle ownership.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Scene assembly skill
What this skill tells your AI
The instructions your AI receives, as published by playcanvas/skills in skills/assemble-scene/SKILL.md and read by ahel’s review.
Represent one gameplay object with one named semantic root. Put gameplay position, heading, rigid-body, collision, and behavior on that root. Put calibrated render transforms below it.
Consume the existing tuning record from calibrate-model exactly once. If it is missing, stop and
calibrate the model; do not calculate or adjust asset tuning during assembly.
Assembly rules
- Name roots by gameplay role and use predictable names for repeated instances.
- Apply model calibration once inside the visual child; never reapply scale, grounding, or authored yaw during placement.
- Space neighbouring roots by their scaled footprints and pivot offsets from
calibrate-model, not by pivot position. A non-90° authored yaw rotates a footprint, so reserve its larger horizontal extent as a conservative radius. - Put rigid-body and collision components on the same root. Size colliders from measured bounds.
- Use local transforms below a parent and world transforms only for semantic roots.
- Keep UI, effects, cameras, and lights outside gameplay model hierarchies.
- Remove the root through its authoring surface's lifecycle. Unregister external events it owns.
- Do not scale rigid-body roots or skinned bones.
Prove placement
Declare intentional support, attachment, or containment relationships between roots. After a rendered frame, measure each relationship at the supported object's actual position. Use a mount point, collision ray, or geometry sample; use a support root's AABB maximum only when its top is flat across the full footprint. Record the signed contact gap: positive means floating and negative means penetration. A relationship name does not exempt the pair from this check.
Union descendant world meshInstance.aabb values for each semantic root and compare unrelated peer
roots. Any intersection with positive depth on X, Y, and Z beyond a small tolerance is an unresolved
placement failure: move the root from its calibrated footprint, or prove the apparent AABB overlap
is empty geometry from at least two materially different views. Never accept one model inside
another from a single screenshot.
Also check expected root counts, component descendants, aligned render and collider bounds, and
role-based names. Compare final dimensions with each calibration record's intended size and reference
object. Inspect composition and facing from images returned into your context by an image-capable
browser tool. A saved screenshot path, screen coordinate, AABB, or visibility flag is not visual
evidence. If you cannot inspect the image, report those claims unverified. Hierarchy and placement
claims require runtime values logged from the application itself, as the apply-conventions skill
describes.
Read exactly one reference matching the code being edited: direct Engine, React, or Web Components. Choose from imports and markup, not installed dependencies alone.
Signals
- GitHub stars
- 21
- Forks
- 4
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
assemble-scene- Source
- github.com/playcanvas/skills