Scene Assembly
arjun988/blender-skills
Large scene layout in Blender with collections, linking, overrides, streaming-friendly organization, and set assembly via MCP.
Assemble or edit LunCoSim's 3D world: load scenes, spawn objects, place, move, rotate, scale, tune, or clear them.
$ npx skills add LunCoSim/lunco-sim --skill build-usd-scene -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LunCoSim/lunco-sim build-usd-scene --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/build-usd-scene .claude/skills/build-usd-scene && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "build-usd-scene" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/build-usd-scene into .claude/skills/build-usd-scene/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-usd-scene", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LunCoSim/lunco-sim/tree/main/skills/build-usd-sceneType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LunCoSim/lunco-sim --skill build-usd-scene -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LunCoSim/lunco-sim build-usd-scene --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/build-usd-scene .agents/skills/build-usd-scene && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "build-usd-scene" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/build-usd-scene into .agents/skills/build-usd-scene/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-usd-scene", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LunCoSim/lunco-sim --skill build-usd-scene -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LunCoSim/lunco-sim build-usd-scene --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/build-usd-scene .cursor/skills/build-usd-scene && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "build-usd-scene" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/build-usd-scene into .cursor/skills/build-usd-scene/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-usd-scene", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LunCoSim/lunco-sim.git --path skills/build-usd-scene--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LunCoSim/lunco-sim --skill build-usd-scene -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LunCoSim/lunco-sim build-usd-scene --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/build-usd-scene .gemini/skills/build-usd-scene && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "build-usd-scene" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/build-usd-scene into .gemini/skills/build-usd-scene/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-usd-scene", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LunCoSim/lunco-sim build-usd-sceneInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LunCoSim/lunco-sim --skill build-usd-scene -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/build-usd-scene .github/skills/build-usd-scene && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "build-usd-scene" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/build-usd-scene into .github/skills/build-usd-scene/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-usd-scene", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LunCoSim/lunco-sim --skill build-usd-scene -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LunCoSim/lunco-sim build-usd-scene --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/build-usd-scene .opencode/skills/build-usd-scene && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "build-usd-scene" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/build-usd-scene into .opencode/skills/build-usd-scene/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-usd-scene", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
build-usd-sceneAssemble or edit LunCoSim's 3D world: load scenes, spawn objects, place, move, rotate, scale, tune, or clear them.
Build Usd Scene is an agent skill from LunCoSim/lunco-sim. Assemble or edit LunCoSim's 3D world: load scenes, spawn objects, place, move, rotate, scale, tune, or clear them. USE THIS SKILL for requests such as "put a lander near that crater", "spawn rovers", "load the Moon scene", "add rocks", "move this", "set its mass or material", or "build a scene with X and Y". For the agent mid-code: LoadScene, SpawnEntity, MoveEntity, TransformEntity, SetObjectProperty, a catalog entryid, a .usda file, or a placement/ lighting issue. Project-specific: USD is the source of truth…
Its SKILL.md is about 6.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Collaborative Multiphysics Cosimulator For Space Missions 🌎🚀🌚. The licence is Apache-2.0.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 43f1301. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are rhai).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Build Usd Scene loads about 6.7k tokens when it runs. Until then it costs about 236 tokens; SKILL.md has 3,417 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from LunCoSim/lunco-sim at commit 43f1301, republished under its Apache-2.0 licence (© LunCoSim). 3,417 words, ~6,697 tokens.
.claude/skills/build-usd-scene/SKILL.md (or your agent's skills folder).The 3D world is OpenUSD, projected to Bevy ECS — USD is the source of truth,
the ECS scene is its projection. You build the world by authoring USD (via
commands that apply reversible ops), not by mutating ECS directly. Drive it over
the API (--api, port 4101; launch per test-via-api).
Design background: 21-domain-usd.md,
usd-source-of-truth.md.
This skill owns mounting and scene placement. For authoring the reusable assembly itself, switch to the interactive Assembly Editor runbook, which keeps a headful preview visible and routes every edit through the document/journal command boundary.
When placement, framing, contacts, terrain fit, or other scene appearance is under review, use the headful production window and leave it visible to the user. Headless/API-only runs can confirm typed state, but cannot establish that the scene looks correct; do not use them as a substitute for viewport review.
For a repeatable scene assembled from authored USD components, use the
namespaced Rhai model_authoring tool instead of scattering independent
commands. Read the exact document/root and generation, then create a dry
recipe:
let context = model_authoring::model_context(doc, root, "@root@");
let recipe = model_authoring::scene_recipe(
doc, "@root@", scene_spec, context.generation);scene_spec may contain references, terrain, cameras, initial_state,
routes, and programs. Review and apply recipe.ops with
assembly_edit::batch or the proposal flow. Route entries go to
waypoint_editor; program entries go to assembly_edit::attach_program.
For reusable or independently edited routes, author the route scope in a
separate USD route-plan asset and compose it into the scene; bind all available
programs from the subject with rel programs and select the active canonical
program path explicitly when more than one is present.
Missing parents/paths, invalid lunco:// identities, and stale generations
fail before a plan is returned. Use readiness_report and
port_graph/wiring_plan before running the composed scene. The complete API
is in scripting-guide.md.
Before assembling a scene, choose its world/time contract. The complete option
matrix is in assets/tutorials/README.md;
the short version is below.
| Scene contract | Author | Use it when |
|---|---|---|
| Fixed instructional world | A real DistantLight reference such as lunco://lighting/sun.usda, with an authored rotation; omit the celestial payload. | Teaching UI, spawning, or basic controls where changing sunlight is not the subject. |
| Ephemeris world | Reference lunco://celestial/solar_system.usda under SolarSystem; author the site anchor on the scene root when needed. Add LunCoEpochAPI and a non-zero double lunco:time:epochJd on the scene root when a repeatable date is required. | Teaching a real lunar day, antenna pointing to a body-relative station, orbital motion, or another feature whose result depends on celestial time. |
| Existing world | Reference or payload the authoritative scene that already owns gravity, lighting, time, and celestial content. | Adding a lesson or assembly whose subject is behaviour, not scenery. |
| UI-only lesson | Omit the payload; the tutorial launcher clears an outgoing lesson scene before showing the UI-only lesson. | Teaching menus, commands, or workbench concepts. |
After the USD stage and queued structural projection settle,
scene.time.select runs once. It selects the authored non-zero root epoch when
present; otherwise it selects current computer UTC converted to TDB. Physics,
celestial placement, USD animation sampling, and DEM construction wait for
that result. CPU-generated render meshes may continue streaming while this
decision is applied. Missing time for a celestial source and an invalid
LunCoEpochAPI value produce runtime warnings and epoch-api-missing-time
lint findings. Author a root epoch when the scene must reproduce the same
celestial date across launches. A fixed light is a complete scene contract
without an orbital provider.
Moving scene objects use ordinary USD animation. Author their translation as
double3 xformOp:translate time samples in the scene's USD asset; each sample
time is elapsed seconds from the scene's TDB epoch multiplied by the stage's
timeCodesPerSecond (USD uses 24 when the metadata is omitted). The shared USD
animation adapter samples these values from physical presentation time, with
BigSpace splitting for a direct Grid child. Do not add a mission-specific
trajectory component or downloader for authored motion.
For tutorial payloads, use the fixed contract for onboarding scenes such as
first_drive.usda, and the ephemeris contract for driving_basics.usda and
slope_test.usda. rover_variants.usda reuses driving_basics.usda, while
the lander mission reuses scenes/luncosim/lander_ops.usda; do not copy their
environment or silently choose a second clock.
The engine runs in one fixed canonical frame: Y-up, right-handed, −Z-forward,
SI metres, f64. Any external asset (USD upAxis/metersPerUnit, glTF, Blender)
is converted once, at the importer — never branch on convention in your own
placement math. A position you pass to SpawnEntity is Y-up metres.
| Command | Params | Does |
|---|---|---|
LoadScene | {path, root_prim} | Load a USD scene. path is a root-qualified lunco://… or twin://… address. root_prim empty = the stage's defaultPrim. |
ClearScene | {} | Tear down the current scene. |
RestartScene | {} | Reload/reset the current scene. |
SpawnEntity | {entry_id, position:[x,y,z], rotation?, producer_id?} | Instance a catalogued prefab from the spawn catalog (list_bundled / ListBundled). Raw-file runtime spawns are admitted for the next fixed tick and return their stamp plus reserved root id. API, direct typed, and actorless Rhai callers supply a stable nonzero producer_id; Twin Rhai keeps its stable actor identity and omits it. Document-backed spawns remain USD journal operations. |
MoveEntity | {…} | Reposition an existing entity. |
TransformEntity | {entity_id, translation, rotation} | Set an existing entity's complete active-frame pose as one undoable USD edit. |
SetObjectProperty | {entity_id:u64, property, value} | Set a named property (both strings; value is coerced by property type). |
SelectEntity | {…} | Select (drives the gizmo/inspector). |
SetPorts | {target, writes:[[name,val]], producer_id?} | Set a persistent input intent (e.g. drive a spawned rover); external API/direct and actorless Rhai callers provide a stable nonzero producer_id and receive the next-tick admission stamp. Twin Rhai uses its actor identity. For live targets, the local Port Inspector uses the active LocalUser session identity and also commits at a fixed tick. Use ReleasePort or ReleaseControl to release it — see author-scenario for behavior. |
ReleasePort | {target, name, producer_id?} | Release a named hold at its ordered fixed-tick commit after earlier admitted writes. External API/direct and actorless Rhai callers provide a stable nonzero producer_id and receive the admission stamp. Twin Rhai uses its actor identity. |
ReleaseControl | {target, producer_id?} | Release all local input holds after earlier admitted writes. It does not change endpoint values; authored stop policy writes named values through SetPorts. External API/direct and actorless Rhai callers provide a stable nonzero producer_id and receive the admission stamp. Twin Rhai uses its actor identity. |
Discover the live set with DiscoverSchema; discover spawnables with list_bundled.
For scene selection readback, use query("InspectSelection"); it returns
stable API ids in selection order, the current primary id, stable selected USD
paths, and the current stale-entry count. The query is available in GUI and
headless hosts. A tool that must retain selection across structural scene
projection should use the returned USD path rather than authoring a transient
runtime prim or caching an entity id.
LoadScene {path:"lunco://scenes/…/foo.usda", root_prim:""} for an existing
scene, or start from the loaded default and add to it. ClearScene first if
replacing.list_bundled → pick an entry_id.SpawnEntity {entry_id, position:[x,y,z], rotation?, producer_id?} (Y-up metres).
For raw-file runtime scenes, the response data carries the fixed-tick
admission stamp and reserved root id; the root receives that same id when
it materializes. API and actorless Rhai calls include a stable producer id.MoveEntity or TransformEntity / SetObjectProperty (colour, mass, material, scale) /
SelectEntity to inspect.CaptureScreenshot → target/x.png → Read it (see
inspect-simulation for reading state back)..usda scene file under
assets/scenes/ (the runtime edits are USD ops; save them into the layer).$LUNCOSIM_BIN --validate <scene.usda>;
for a composed world, run the authored Rhai scene gate and inspect its
verdict. --validate catches parse/composition/lint failures but does not
prove that the light remains stable during runtime.lunco:, name the standard field this would be. If USD owns the concept, use its schema. A vendor namespace is correct only for semantics USD does not define, and it must cover only that new concept. For a parametric surface of revolution, author only the LunCo-specific profile/shape fields; patch sampling and degree belong to the standard patch attributes.Scope has no script-readable ports through the owner hierarchy. Apply LunCoProgramAPI to the entity whose script reads the outputs, or connect the child program's outputs explicitly by USD prim path. The restriction is on script traversal, not on USD port connections.UsdPhysics joint between two bodies and let the solver provide contact, limits, reaction forces, and joint ports. Do not duplicate dimensions or motion state in a script.UsdPhysicsDriveAPI:linear and author physics:type = "force" with drive:linear:physics:stiffness (N/m) and :damping (N·s/m). The canonical USD-to-Avian reader preserves that SI force law and uses Avian's implicit SpringDamper realization when the driven body has a positive authored mass; it derives equivalent frequency and damping ratio for stable integration, without creating a second spring or changing the authored coefficients. Its stroke and its load then come off the joint's own displacement and force ports. No Modelica model and no rhai script restates the spring — a second spelling of one spring puts two writers on one fact, and which wins becomes a function of load order. Author physics:type explicitly: the coefficients mean newtons under "force", while an "acceleration" drive is mass-normalized and has no honest newton readback at all, so its force port reads nothing. Missing mass, angular coefficient drives, and negative coefficients are not repaired by a fallback; the USD linter reports the invalid or conditionally unstable authoring.PhysicsDriveAPI:linear to a PhysicsPrismaticJoint; author physics:type = "force" with stiffness, damping, and maxForce. The native Avian prismatic joint is the sole axial mechanism, and its measured displacement and output-only force are the public state. Do not duplicate standard fields under lunco:*; missing or invalid fields fail projection and are never replaced by a target, force cap, or solver-resolution workaround.force = stiffness * (targetPosition - displacement) under the authored force convention. A landing leg's compression must read NEGATIVE displacement, which fixes the axis to point the way the mechanism EXTENDS. physics:axis can only name "X"|"Y"|"Z", so a raked or reversed axis is carried by physics:localRot0 (quaternions are (w, x, y, z)), and the limits follow it: a landing leg is lowerLimit = -stroke, upperLimit = 0, rest at 0. Get this right in the joint and nothing downstream needs a sign fixup; get it wrong and every consumer grows one.lunco:sensor:range / :imu / :contact) are authored INSTRUMENTS that read those physics and add mount offset, range limits and out-of-range behaviour; they are what a GNC model should see, because a computer knows only what its instruments report. Getting it backwards is not a style question: gate a landing leg's behaviour on the ALTIMETER — whose datum sits above the pads — and a hand-copied constant has to restate that offset, lighting the legs before touchdown. A constant in a .mo that exists only to translate between two prims' positions means the wire is wrong. (USD has no standard sensor schema at all — core UsdPhysics stops at bodies/colliders/joints, and Omniverse invents its own too: PhysxContactReportAPI, IsaacContactSensor. lunco:sensor:* is the legitimate vendor-namespace case.)PrismaticJoint's force port — rather than re-deriving it. When a visualization "happens too early", suspect something is publishing an input rather than a result.Cone with its APEX UP. Verify the authored axis and orientation in a render before adding a corrective rotation.pow. Exponentiation is registered under the OPERATOR name ** only (packages/arithmetic.rs), so pow(x, 0.7) throws Function not found: pow (f64, f64) every tick — and because a scenario's error is per-tick and non-fatal, the rest of that function silently never runs. Use x ** 0.7.environment/starfield_sky.usda pattern: an Xform with
LunCoProceduralSkyAPI and MaterialBindingAPI. USD projection
stamps ProceduralSkybox and the renderer uses its fullscreen background
pass, so there is no radius, culling volume, collision surface, or mesh
vertex shader to maintain. Use UsdLuxDomeLight for a textured environment
light; it is a separate lighting contract.star_density, point_size, brightness). A camelCase inputs:starDensity is a dead wire: no error, no effect, and hours of "why does tuning the sky do nothing".illuminance / 2^EV100, so a scene that copies a DistantLight intensity from one file and an exposureEv100 from another lands stops away from either. Author both on purpose: the sun prim's inputs:intensity and the LunCoEnvironment prim's lunco:env:exposureEv100.SolarSystem reference makes body poses ephemeris-driven. The policy uses a valid non-zero lunco:time:epochJd on the selected scene root, or current computer UTC converted to TDB when no epoch is authored. Time-dependent consumers wait for the decision. Missing or invalid authored time warns and is linted; author a root epoch for repeatable scenes.LoadScene path must be root-qualified — use lunco://scenes/luncosim/lander_ops.usda for a shipped asset or twin://<authority>/… for an opened Twin. Use the currently assigned Twin authority from asset discovery; never reconstruct it from a manifest name or retain an outgoing mount URI (see mount identity). Use OpenFile for a native filesystem path or standard file: URI. Encode URI filenames through lunco-storage::file_path_to_uri; the opener uses file_uri_to_path before I/O. Windows drive and UNC paths remain native paths unless explicitly URI-encoded; never construct a file URI by prefixing file:// to a native path. Native composition encodes its root as a standard file URI and resolves sibling filenames through lunco-usd-compose::canonicalize_at; propagate its Result so invalid file addresses reject the operation. Native binary/texture/source projection must follow the typed native admission contract: use the originating live Twin authority and preserve AssetPath through the actual load, with glTF labels attached separately. Native references must use the current worker-prepared admission table; filesystem case aliases and containment are resolved off the UI thread, and absent/stale entries reject visibly.LoadScene address or absent USD asset pipeline returns an error before admission. Check the command result; a warning alone must never count as an accepted load.UsdRead::asset_identifier and shared typed admission; keep raw strings for authoring. References and sublayers must not reanchor texture, program, shader, albedo or DEM sources to the root scene. DEM source is a directory; its existing worker owns lookup and heightmap I/O. In a Twin, an asset value spelled as an OpenUSD search path (@terrain/site@, no .//../) resolves beside its layer first, then from the Twin root and its caches; .//../ spellings and composition arcs are strictly layer-relative. Missing consumed provenance rejects visibly; unanchored asset time samples are not admitted.load_asset_path adapter. Keep #, %, spaces and Unicode in the filesystem path; attach Bevy labels separately. Validate OpenFile, Twin scene opening, LoadScene and RestartScene against the same existing document and exact current authority.OpenFile captures FileDocumentAdmission before worker I/O and validates its resolved runtime owner before installing source. New documents capture creation scope; forks retain source scope; private session restores belong to Application. Saving a path does not change runtime lifetime. See the source lifetime contract.Twin::open stores the resolved root, including the Windows verbatim prefix. Opening a USD file inside that root remains a document-only open; it does not replace the running Twin.TwinRoots::register_twin URI-encodes the manifest/folder name at mount admission. Keep the displayed name unchanged and use the returned authority; spaces, Unicode, %, #, / and ? in a name do not authorize reconstructed load addresses.entry_id must be in the catalog — an unknown id logs unknown entry '…' and no-ops. List first with list_bundled.defaultPrim sentinel: an empty path means "the stage's default prim". A stage without defaultPrim is an invalid scene mount and fails visibly.UsdPhysics collision footprint (slope-aligned, and it considers a physics obstacle under the chassis). An asset without a defaultPrim or collision footprint is rejected visibly; placement never invents dimensions or a lift. The API SpawnEntity path uses the explicit position supplied by the caller, so pass a real Y. On admission, the physics owner validates the authored pose against the live terrain using the collider's support geometry for convex shapes; a persisted pose that now overlaps after terrain changes remains held and must be repaired through TransformEntity or removed through DeleteEntity.Standalone) session a SpawnEntity instantiates exactly one rover; it is not also re-projected from the document (that path is suppressed to avoid a double-instantiation / vanish-on-reload).SelectableRoot in the world frame — not GridAnchor. If the gizmo grabs the wrong thing or the wrong frame, that tag is why.SetDocumentSource for live scene building — it replaces the whole source and cancels in-flight work. Submit typed scene commands (SpawnEntity/MoveEntity/TransformEntity/SetObjectProperty), and let their handlers lower the intent through the existing USD operation path.author-scenario; its self-driving GNC is authoring-vessel-controllers..usd, .usda, or .usdc source text directly, even
for a temporary preview. Open the exact document, inspect its authored layer
and edit target, submit schema-aware commands or typed ApplyUsdOp(s), save,
and inspect the result. If the authoring API is missing a needed operation,
extend that API before changing the scene.LoadScene.entry_id instead of list_bundled.SetDocumentSource to build a scene incrementally — use the typed scene commands and their USD operation path.Transform directly and expecting USD to remember it — author the USD.© LunCoSim, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/build-usd-scene of LunCoSim/lunco-sim.
Open the folder on GitHubat commit 43f1301
Build Usd Scene next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Build Usd Scene this skillLunCoSim/lunco-sim | 107 | — | ~6.7k | Automated safety check: Pass | Apache-2.0 | |
| Scene Assemblyarjun988/blender-skills | 283 | — | ~569 | Automated safety check: Pass | MIT | |
| Bio Genome Assembly Metagenome AssemblyGPTomics/bioSkills | 1.2k | 1 repos | ~5k | Automated safety check: Pass | MIT | |
| Threejs World Generationcalesthio/OpenMontage | 66k | — | ~2k | Automated safety check: Pass | AGPL-3.0 | |
| Scene Menu BarPostHog/posthog | 40k | — | ~3.2k | Automated safety check: Pass | Custom licence | |
| Bio Genome Assembly Long Read AssemblyGPTomics/bioSkills | 1.2k | 1 repos | ~4.6k | Automated safety check: Pass | MIT |
arjun988/blender-skills
Large scene layout in Blender with collections, linking, overrides, streaming-friendly organization, and set assembly via MCP.
GPTomics/bioSkills
Assembles microbial-community sequencing into metagenome-assembled genomes (MAGs) with metaFlye (ONT), metaSPAdes/MEGAHIT (Illumina), and hifiasm-meta/metaMDBG (PacBio HiFi), then recovers genomes…
calesthio/OpenMontage
Build deterministic, editable, free-viewpoint Three.js worlds from text or structured briefs.
PostHog/posthog
Conventions for adding or editing the SceneMenuBar above a scene's <SceneTitleSection.
GPTomics/bioSkills
Assembles genomes de novo from noisy long reads (Oxford Nanopore R9/R10/Dorado, PacBio CLR) with Flye (repeat graph), Canu (correct-trim-assemble OLC), NextDenovo, Shasta, Raven, wtdbg2, or miniasm…
GPTomics/bioSkills
Decides whether and how to polish a draft genome assembly to raise consensus accuracy (QV) with read-type-matched tools - Racon and medaka (ONT consensus), dorado polish, Polypolish and pypolca…
LunCoSim/lunco-sim
Generate concise LunCoSim nightly GitHub release notes with platform downloads, installation guidance, an AI-agent mission prompt, and a changelog link.
LunCoSim/lunco-sim
Build or repair a reusable scene component through a live LunCoSim Editor session.
LunCoSim/lunco-sim
Build or review a componentized LunCoSim USD assembly with a realistic, dimensionally checkable presentation.
LunCoSim/lunco-sim
Author and review LunCoSim behavioral, asset-backed, component, mission, visual, and requirements-verification tests.
LunCoSim/lunco-sim
Create, extend, register, or debug a reusable LunCoSim Rhai tool library for live USD authoring, component linting, inspection, or test support.
LunCoSim/lunco-sim
Author an interactive tutorial, guided lesson, onboarding flow, coach-mark tour, or objectives checklist in LunCoSim.
Assemble or edit LunCoSim's 3D world: load scenes, spawn objects, place, move, rotate, scale, tune, or clear them. Build Usd Scene is an agent skill from LunCoSim/lunco-sim. Assemble or edit LunCoSim's 3D world: load scenes, spawn objects, place, move, rotate, scale, tune, or clear them.
Build Usd Scene fits situations like: requests such as put a lander near that crater; load the Moon scene; build a scene with X and Y.
Run `npx skills add LunCoSim/lunco-sim --skill build-usd-scene -a claude-code`. Or copy the skill folder (skills/build-usd-scene in LunCoSim/lunco-sim) into .claude/skills/build-usd-scene in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LunCoSim/lunco-sim --skill build-usd-scene -a codex`. Or copy the skill folder (skills/build-usd-scene in LunCoSim/lunco-sim) into .agents/skills/build-usd-scene in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LunCoSim/lunco-sim --skill build-usd-scene -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/build-usd-scene, .gemini/skills/build-usd-scene, .github/skills/build-usd-scene and .opencode/skills/build-usd-scene in your project.
SKILL.md names no scripts, command-line tools or credentials: Build Usd Scene is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Build Usd Scene is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.7k tokens (SKILL.md is roughly 27k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Build Usd Scene: Scene Assembly (arjun988/blender-skills, 283 stars), Bio Genome Assembly Metagenome Assembly (GPTomics/bioSkills, 1.2k stars), Threejs World Generation (calesthio/OpenMontage, 66k stars) and Scene Menu Bar (PostHog/posthog, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LunCoSim (a GitHub organization) maintains it in LunCoSim/lunco-sim, which has 107 GitHub stars. The repository holds 40 skills in this directory. The repository was last updated on October 10, 2026.
Source: LunCoSim/lunco-sim on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.