manfredch/lyapunov/scene-construction
Claude Code and agent skill by manfredch/lyapunov
- community
Checking that the SKILL.md file is still in the repository.
Build and modify scenes in the Lyapunov 3D workbench: create/open/save Scenes, obtain environments through Blender, generative reconstruction, environment downloads or the asset library, and place/adjust objects. Use for requests such as build a scene, build a room, download an environment or place a table. Consult environment-planning as needed for complex creation or whole-environment restructuring; simple operations do not require a complete plan.
Install
npx vskill@latest install manfredch/lyapunov/scene-constructionSKILL.md
Scene construction workflow
Input: the requested scene/change plus the existing Scene, if any, with sceneId and current rev. Completion: verify the target entities in the 3D view or rendered image; keep changes in the same Scene with monotonically increasing rev; explain which layer changed and what it changed.
A Scene is a revisioned snapshot operated through product domain tools (scene_*), with results visible in the 3D view. Use domain tools for product state. File tools may read/write task-workspace scripts, reference indexes and artifact files (blender_run.python_script is itself a script file). Do not inspect or modify product state or product source through file tools.
Entry: plan by complexity, load by stage
- For complex new environments or whole-environment restructuring, load
environment-planningwhen useful and identify decision-relevant goals, unknowns, methods, dependencies, budget and acceptance. Native plan mode uses its native planning entry and approval rules, without `todo_write`; implementation-stage multi-step tasks may then use Todo for progress. Do not create a separate product-plan store. Simple open/import/local edits need no full plan. Continuing work reuses the current plan, sceneId and jobId. - Load the relevant skill only when its stage is needed:
environment-research: reference/source search, gap-driven iteration, source-page/licence checks, and a short task-local index of adopted references.photo-reconstruction: photo/video/sketch inputs as appearance/perspective evidence, calibrated dimensional estimates and CAD cross-checks.cad-import: drawings/CAD inputs as dimension/topology evidence.architectural-world: the complete Blender modelling/editing/export contract.asset-generation: individual assets/objects through procedural Blender, generation or downloads.environment-assets: public-environment search/download/assembly.unity-environment: current Unity delivery capabilities and boundaries.
This skill assembles stage outputs into one Scene and verifies them in the 3D view.
Routes: choose by requirements and combine when appropriate
- Blender generation, for editable collision-bearing buildings/rooms: prefer connected Blender MCP (
mcp__blender__*), otherwiseblender_run. Loadarchitectural-worldfor its detailed contract. 对完整场景建模,直接在同一 Blender 源项目内使用真实 viewport 截图检查布局、材质、照明和缺失部件,根据收到的图像修订,再截图复核;通过同一原生工具回路继续,不要求用户每轮导入 Viewer。截图必须作为图像工具结果进入后续模型步骤;若只返回路径或 image unavailable,明确报告未看图。保存完整可编辑 .blend,并导出包含实际使用贴图的 GLB 后,才做最终一次 Lyapunov 导入与 viewer_observe 对照。 - Generative world reconstruction, when a complete area must be generated: compare currently available entries such as
generate_hunyuanandgenerate_marbleusing the user's selected provider, supported input, quality, editability, representation and cost. Do not fix a provider solely from the shape; existing assets and task scripts may be combined. Paid work needs authorization. Accept actual receipts, artifacts and observation before registering/mounting them. - Environment downloads, for existing real environments:
scene_environment_search {query}(PolyHaven CC0) ->scene_environment_detailfor actual category/triangles/volume ->scene_environment_import. Loadenvironment-assets. The environment-library panel also offers built-in splats: machine-verified geometry bindings register collision representations, andsim_open/sim_syncgives the world the ground heightfield/wall boxes. Withtransform.position, ground placement follows point-cloud bounds (alignBottomToSurface). - Existing library asset: an
asset_listmatch mounts directly throughscene_mount.
Scene operations
- Lifecycle:
scene_create/scene_open {path}/scene_save {sceneId, path, portable:true}; portable copies dependencies for portability. Read withscene_list/scene_inspect. - Editing:
scene_editwith add/remove/update/reparent commits rev+1 throughexpectedRevisionCAS.update.changesreplaces entire top-level entity fields: supply full position/quaternion/scale fortransform, and full objects/arrays forcomponents/resources. Read complete current values withscene_inspectfirst. Empty entities organize hierarchy; visible models must come from assets. - Placement:
scene_mount {sceneId, resourceId, version, transform}uses metres, right-handed Z-up. Omitted transform uses the registered mount pose or identity at the origin. Explicittransform.positionaligns the bounds bottom to its height unlessalignBottomToSurface:false. The UI's add-to-current-scene action uses the same click-placement source. - History:
scene_history/scene_restore, validating current rev with CAS. - Save the current observation camera: when
camera_scene_saveis visible, usemode:current-viewto take the complete camera from the specified Viewer's displayed Frame without first starting a world or piloting it. Native presets/mount edits follow the actual schema. Body mounting requires body/world/generation from the same Frame. Permanent saving uses Scene CAS; preserve a failed draft rather than claiming it was saved.
Many instances of one asset, with distance-based LOD
Repeated plants/trees/statues/rails share one resource version. Viewer caches GLTF by resolved URL and shares geometry/materials/textures across instances instead of duplicating VRAM. Add lod declarations only where needed; Viewer switches by camera-to-entity distance. Do not build another Scene for distant objects or duplicate resource files.
Four steps, using existing tools rather than an import-implies-derivation pipeline:
- Create derivations in Blender; originals remain read-only. Import with
blender_run, applyDecimateor equivalent simplification, and export a separate GLB withexport_yup=Trueand source coordinates matching the original. - Register as a resource first:
scene_import {path: <derived.glb>, name, physicalize:false}without sceneId. It returnsresource.ref; sceneId would also mount an extra entity. Register the base similarly or withscene_environment_import. - Mount instances:
scene_import {path:<base.glb>, sceneId, transform}orscene_mount {sceneId, resourceId, version, transform}. Repetition means mounting the same version repeatedly. - Declare levels through a
scene_editupdate. Add derived refs to the entity's resources and write levels undercomponents.visual.lod.components/resourcesare whole-field replacements: inspect current values first and useexpectedRevisionCAS.
The contract rejects mistakes explicitly rather than silently selecting the wrong artifact:
minDistanceMis the entry threshold in metres, measured from the camera to the entity's world-bounds centre. Sort levels ascending; the nearest range uses the base. Choose thresholds from observation distance and simplification ratio; there is no universal default.rolematches a registered representation. Mesh resources normally use"visual", so derived levels userole:"visual". The level'sresourceId/versionmust already be registered and present in the entity'sresources.- A level pointing to the base URI is rejected with
LOD_LEVEL_NOT_DERIVED. Derivedsourceaxes/handedness/units must match the base, especially for source-coordinate-baked entities. - Derived node indices are a different namespace from original indices. A single-object export often has one node; copying the base
gltfNodecan select the wrong node or causeGLTF_NODE_NOT_FOUND. UsegltfNodeName, or omit it for base-name/unique-mesh resolution. Ambiguous multi-mesh addressing reportsLOD_LEVEL_NODE_AMBIGUOUSand retains the current display rather than guessing. - Matching position does not depend on equal node numbers. Exporting retained transforms or baking transforms into vertices both use the same world-position conversion.
- Verify
lodandresourceswithscene_inspect, then takeviewer_observeimages at near and far camera poses, checked against sceneId+expectedRevision. Near should use the detailed base and far the simplification. Counts alone do not prove LOD. - Entities with baked-animation mixers do not exchange LOD. Failed base loading falls back to the coarsest available level with missing-asset warnings instead of disappearing.
3D annotations: edit the current Scene in place by default
Annotations carry entity identity, entity-local coordinates and world coordinates at submission. viewer_annotation_send_ui delivers a user message; viewer_annotation_read retrieves the same image/text. Interpret it as a request to change the indicated location. Apply expressible `scene_edit` changes immediately to the current Scene:
- In-place changes first, retaining sceneId and annotations with rev+1: entity movement/rotation/scale, visibility, parentage, deletion/duplication and replacement below. Check whether a real consumer exists.
components.lighthas a Viewer consumer for kind/color/energy/direction. 选中实体的 PBR 材质可用components.materialOverride(kind:"visual/material-override")控制,支持baseColor:"#rrggbb"、roughness、metalness、emissive:"#rrggbb"、emissiveIntensity、opacity、textures、normalScale。未声明字段保留原材质;底色乘原贴图;法线倍率只对原有法线贴图生效。只覆盖该实体的视觉子树,GLB 共享实例互不污染;删除这个组件即恢复原材质。点云和非 PBR 不适用。普通 UI 在对象属性的“视觉材质”中写同一组件。 - Escalate to Blender only when new geometry/source material is required: opening/arch shapes, roof profiles, whole structures or source textures. Use
mcp__blender__*orblender_runon the source project, then export. - Continue in the same Scene after escalation:
- Receive with
scene_openif it aligns with the document. Identical same-scene content is an idempotent reopen; only same-identity resource-location changes may overwrite. Changed entity structure/resource identity reportsSCENE_ALREADY_EXISTS. - Use
scene_replace_resourcefor mounted-entity replacement;scene_import {sceneId}adds entities. Preserve identity, pose, parentage and user components. Multiple refs requirefromResourceId/fromVersion; expanded GLB groups use their root. - Collision/rigidBody/controller preservation uses actual per-node static geometry equality. Geometry changes, including internal pose/scale, require registered target derivations or report
REPLACE_RESOURCE_PHYSICS_NOT_DERIVED. Native robot articulation/mujoco/isaac/visual.robot, unverifiable compression/skinning/driving animation, or unsupported structure/source-coordinate changes require rebuilding mounting within the same Scene, explaining identity/annotation effects. Never change refs while retaining invalid derivations. If the tool is unavailable, record the concrete gap. - Never evade in-place updates by inventing a new sceneId, which would discard annotations, cameras and the user's working context.
Explain which layer changed and why each round: an in-place Scene edit or source geometry reconstruction in Blender. Do not replace that explanation with a generic fixed claim.
光照与材质的普通 Scene 控制
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingpackages/lyapunov-shell/skills/scene-construction/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/manfredch/lyapunov/scene-construction)