AugmentClaude

Raea Bevy 3D

Build 3D scenes and games using TypeScript with Bevy rendering.

Installation

  1. Make sure Claude is on your device and in your terminal.

    Skills load from ~/.claude/skills/ when Claude Code starts up — so you need it on your machine first. If you don't have it yet, install it once with the command below, then run claude in any terminal to verify.

    One-time setup
    npm i -g @anthropic-ai/claude-code

    Already have it? Skip ahead.

  2. Paste into Claude Code or into your terminal.

    This copies the whole skill folder into ~/.claude/skills/raea-bevy-shinyobjectz/ — the SKILL.md plus any scripts, reference docs, or templates the skill ships with. Safe default: works for every skill.

    Faster alternative (instruction-only skills)

    Skips the clone and grabs only the SKILL.md file. Don't use this if the skill ships Python scripts, reference markdowns, or asset templates — they won't be downloaded and the skill will fail when it tries to load them.

    Quick install (SKILL.md only)
    Sign up to copy
  3. Restart Claude Code.

    Quit and reopen Claude Code (or any other agent that loads from ~/.claude/skills/). New skills are picked up on startup.

  4. Just ask Claude.

    Skills auto-activate when your request matches the skill's description — no slash command needed. Trigger phrases live in the skill's own frontmatter; you can read them in the “What this skill does” section above.

Prefer to read the source first? Open on GitHub.

When Claude uses it

Writing 3D scenes and 3D games in raea's TypeScript SDK (raea/3d), which Bevy 0.20 draws, and extending that SDK. Use when writing or fixing TSX with Camera3d, Mesh3d, lights, StandardMaterial and other materials, Model (glTF), ImagePlane, Bloom/Fog/ToneMapping or an ECS world drawn with Entities; when a 3D render or play looks wrong; or when adding a Bevy feature to the SDK (the TSX component, its raea-render rows, the engine system).

What this skill does

raea-bevy: Bevy through raea/3d

Agents write TSX; raea compiles each frame's 3D elements to raea-render rows and its engine draws them with Bevy 0.20. You never write Rust or shaders to make a scene, and you never use Bevy's API directly from TSX. A render and a live play draw the same rows with the same code, so they match whenever every value comes from the frame.

This is the same library the feed's agent reads with raea guide bevy/NAME (sdk/guides/craft/bevy.md routes it); the topic files here link to those, except rows.md and plugins.md, which only this skill has.

Which file to open

You are...Open
setting up the camera, camera moves, entities, 2D under and over 3Dscene.md
lighting: sun, bulbs, spots, ambient, shadows, brightnesslights.md
surfaces: colour, metal, glass, glow, clearcoat, picture maps, toon (cel) shading and ink outlines (ToonMaterial), wear (WearExtension), decals (Decal), a model's materials re-covered (a material inside its Model)materials.md
a whole scene to build and make believable: brief, routing (which tool makes which object: solid, field, generator, Tripo HD or Smart Mesh, stock), build order, review sheets (raea render --review), the judge, stall rulesscenes.md
the words to paste for a whole scene: the brief template, the builder prompt, the fresh-context judge promptprompts.md
shapes: primitives, Manifold solids, blended organic bodies (sdf), trees, terrain, rocks, plants, lofts (grow), Text3Dmeshes.md
people: Anny bodies posed by goals (a hand on a point, feet, gaze, a seat), motion capture clips, motion matching along routes round the furniture (Character, perform)characters.md
interiors: rooms, runs of units, windows and bays, seats turned to tables (faceToward), layout checks, wall decor (hang), the garden outside, daylight, 3D sound (Sound3D)rooms.md
motion: spins, springs, Sequences, model clipsanimation.md
a 3D game: state, input, entities, collisions, state machinesgames.md
a game's sound: one-shots on transitions (<Tone.Sfx>), buses, a bed ducked under a voice (Tone.js on raea)games.md (Sound), then raea guide motion/music
glTF models, pictures in space, media filesassets.md
a check names a Blender script (fix: raea blender run blender/X.py): convert, decimate, repair, split, bake, rig, cloth; one saved script per asset step, never the sceneblender.md
gaussian splats: a real scene or object trained from footage (raea splat train), <Splat> and its reveal, assemble, disperse, explode, wave, twist, morph, pulsesplats.md
liquids and goo: coffee dumped from a mug, a tap's stream, honey, things melting (<Goo>, sph or mpm, baked)liquids.md
bloom, fog, tone mapping, exposure, fisheye and lens distortion, motion blur, fire (<Fire>), frame looks (pixel, ink, painted illustration <Look mode="paint">, cartoon <Look mode="cartoon">)post.md
budgets, render-equals-play rules, what isn't there yetlimits.md
adding a Bevy feature to the SDK, or debugging the rowsrows.md
using a Bevy plugin (physics, networking, particles, any crate): declaring it, its generated TypeScript, calling it from a program (BevyApp), BRP as a dev toolplugins.md

The rules that keep a render equal to its play

  1. Every value from the frame (useCurrentFrame(), interpolate, spring, a game's state at the frame). No useState, useEffect, refs or useFrame; Math.random() draws new numbers every frame (seed what holds still).
  2. Rotation in radians (Quat.fromEuler, a fov); Manifold's .rotate() in degrees.
  3. Colours are hex strings (CSS variables don't reach the 3D).
  4. Name parts that come and go (<Mesh3d name="...">); parts are matched by name, else kind and shape in tree order.
  5. A part's shape is fixed; animate its transform, colour, opacity, emissive, roughness, metallic.
  6. One camera (the first), one set of effects (the first frame's; the lens and MotionBlur animate per frame).
  7. Import each component from its Bevy-named module (raea/mesh, raea/pbr, raea/light, raea/camera, raea/transform) or raea/prelude; Entity, Model (and Canvas3D for layered) from raea/3d; hooks, Sequence, staticFile from raea.
  8. Render and look: raea render EDIT.tsx --frame N -o F.png.

The modules, in the order a frame is made

raea's modules are named as Bevy's crates are (raea/camera is bevy_camera's names), so a name is where a Bevy developer would look. Read them in the pipeline's order; the order is for reading, not a set of import paths:

stagewhat happensmodules
sourcesimages, video frames, audio, generated contentraea/asset, raea/image, raea/video, raea/audio
evaluatestate for a time or a simulation stepraea/time, raea/state, raea/app (systems), raea/animation, raea/math, physics
composecontent, layers, cameras, effects combinedraea/transform, raea/ui, raea/sprite, raea/mesh, raea/pbr, raea/light, raea/camera
renderpixels or render targets (the engine draws; nothing chooses CPU or GPU)raea/post_process
outputpresentation, capture, encodingraea/app's window, the export's settings

A camera or a material belongs to more than one stage, which is why the stages aren't packages. An import is one of two kinds: raea/prelude for everything, or one Bevy-named module when a file wants one subject.

Checks in the raea repo

  • sdk/raea/bench/bevy/check.sh [EDIT.tsx]: render against baked play with 3D (SSIM >= 0.999) on the fixtures.
  • sdk/raea/bench/bevy/skills.sh: every example in this library renders.
  • sdk/raea/docs/bevy-coverage.md: the full coverage matrix and the proposed API for what's missing.

Related skills