# Scaled Colliders one shape resource, many sizes, and the collider matches the mesh. ```{raw} html ▶ Run in browser ``` **Tags:** `physics` `3d` `scale` Three crates share ONE ``BoxShape3D``. They are drawn at different sizes because their nodes are scaled, and they COLLIDE at those sizes too: each rests at its own scaled half-height, so the outline you see is the outline the simulation uses. Scale belongs to the body, not to the shape. A shape resource is shared -- these three crates are one backend collider between them -- so it cannot bake in one node's size; the node pushes its ``world_scale`` through with its pose instead, and every backend applies it to its own instance of the geometry. That is also why a resource can be handed round freely: it costs one collider however many bodies use it, and it releases that collider when you let it go. Not every collider can express every scale. A sphere has one radius, so squashing one on a single axis has no representation and the seam says so with a clear error rather than quietly picking a number -- which would put the collider back out of step with the mesh, the very thing scale exists to fix. Press 4 to see the error text; the ball keeps the size it had. Shows: - ``Node3D.scale`` reaching the collider, at build time and live. - One ``BoxShape3D`` shared by three bodies of three different sizes. - The per-kind scale rule: boxes take a scale per axis, spheres need a uniform one. - Mirroring (a negative component) counting as uniform, so a sprite-style flip is not an error. Controls: 1 - grow the middle crate (live rescale) 2 - shrink it back 3 - squash it on Y only: a box can do this 4 - try the same squash on the ball: refused, with the reason Arrows - orbit the camera R - rebuild the scene Escape - quit Run: uv run python examples/features/physics/collider_scale.py Headless self-check: uv run python examples/features/physics/collider_scale.py --test ## Source ```{literalinclude} ../../examples/features/physics/collider_scale.py :language: python :linenos: ```