organic-model is a skill from the Summer skill library: a guide your AI agent reads when the task matches, so it builds the good version on the first try. Generate organic 3D shapes (trees, rocks, mushrooms, plants, crystals) where irregularity looks natural.
When your agent uses it
- Generating organic shapes — trees, rocks, mushrooms, coral, bushes, alien plants, vines, crystals, fruit, bones
- A level needs vegetation, rocks, or other natural shapes where irregularity reads as realism
Install
summer setup installs every skill for your agent. To add only this one:
claude-code for your agent, such as codex or cursor. See Skills for every option.
The skill
Organic shapes (trees, rocks, mushrooms, coral, alien flora, crystals, vines, bones) are the most forgiving category for AI 3D generation. Lumps look natural. Asymmetry looks natural. Smoothing-group artifacts read as bark texture. The “melted” look that ruins vehicles and characters is fine on a mossy boulder. This is the cheapest, fastest way to fill out a scene, and the first choice when the user says “this scene feels empty”. The failure rate is the lowest of any 3D-asset family. Backing operation:assets.generate_3d (it answers with a job: jobs.wait until it finishes). Default hunyuan works well here, but trellis is faster and the quality difference is hard to see on organic shapes. Pick trellis when generating many at once.
When to use
- “Make me a pine tree.”
- “Generate five different rocks I can scatter.”
- “I need glowing mushrooms for the cave.”
- “Fill this forest scene with foliage.”
- “Alien plants for the planet surface.”
- “Coral for the underwater level.”
- The user wants visual density quickly and cheaply.
When NOT to use
- Character (humanoid, even if “tree-person”) →
character-model(rigging matters). - Vehicle, weapon, hard-surface object →
prop-modelorvehicle-model. - Tileable ground (grass field, sand) →
asset-strategyPipeline 2 (textures, not meshes). - Animated organic (Venus fly trap that opens, breathing pod) → generate static here, animate in-engine with bones or shape keys.
- A single hero-tree centerpiece (Yggdrasil, the One Tree) — generate via
prop-modelwith higher polycount and detail attention.
Polycount targets
Organic geometry tolerates aggressive polycount cuts because the silhouette is irregular — viewers can’t spot poly-count drops the way they spot a low-poly cylinder.
Generating a forest? Make 3 hero trees + 5 background trees + 3 rocks at low polycount, then scatter via
MultiMeshInstance3D for hundreds of copies at near-zero rendering cost.
Steps
1. Search before generating
2. Build the prompt
Pattern:<species> + <state/condition> + <key features> + isolated suffix. Organic prompts are shorter than prop prompts — the model already knows what a tree looks like.
Organic prompts that DON’T work:
3. Confirm and call
About to generateFor batch generation, batch the confirmation:pine_tree_01viatrellis, target ~2k tris, ~30s. This uses credits. OK?
About to generate 3 trees + 3 rocks + 5 mushrooms (11 generations, ~5 min). All low-poly via trellis. OK?
dryRun: true on one call gives its credits (estimate.credits) for the batch confirmation. Start every generation of the batch first, then wait on the jobs.
4. Generate variation, not duplication
If the user wants “five rocks”, don’t generate one rock and copy it five times in the scene — generate five subtly different prompts:5. Wire into the scene
Hero tree:
.glb cannot be assigned to MeshInstance3D.mesh. An imported .glb is a scene, not a Mesh — on the shipped 4.6.1 binary ResourceLoader.get_recognized_extensions_for_type("Mesh") returns ["tres", "mesh", "res"], with no glb. summer_instantiate_scene adds it as a child in one op. (For the MultiMeshInstance3D path below you do need a real Mesh: pull it out of the instantiated scene’s MeshInstance3D in script, or save it as a .tres.)
Every scene-mutating tool takes an explicit scenePath; node paths are relative to that scene’s root (./).
Forest scatter (MultiMesh): create a MultiMeshInstance3D, assign a MultiMesh resource referencing the tree mesh, set instance_count to e.g. 100, and populate set_instance_transform() from a script with random positions + rotations. See scene-composition for the scatter pattern.
6. LOD and billboards
For dense forests, the cheapest fix beyond MultiMesh is the billboard imposter:- Generate the tree mesh once at high polycount.
- Render it from one angle to a transparent PNG (an
EditorScriptcan capture a viewport). - Use that PNG as a
Sprite3Dwithbillboard = enabled. - Swap from
MeshInstance3DtoSprite3Dat ~50m camera distance withvisibility_range_endon the mesh andvisibility_range_beginon the sprite (both onGeometryInstance3D), or a custom LOD script.
Anti-patterns
- Generating “a forest” as one prompt. Returns a single fused mesh — useless for placement. Always one species per generation, then scatter.
- Regenerating the same species 5 times for variety. Generate 5 different species/states/colors for true variety; identical regenerations don’t differ enough.
- High polycount on background organics. A 30k-tri rock used 50 times in the background tanks the frame rate. Cap distant organics at 2k.
- Ignoring MultiMeshInstance3D. 100 individual MeshInstance3D nodes = 100 draw calls. 100 instances of one MultiMesh = 1 draw call. Same visual result.
- Adding collision to every leaf and pebble. Player only needs collision on things the body can hit. Skip it for distant scenery and small ground litter.
- Using
meshy(legacy). No reason to —trellisis faster andhunyuanis higher quality.
Edge cases
- Animated foliage (wind sway). Generate static here, then add wind sway via a hand-written vertex displacement shader on the material. No animation rig needed.
- Underwater organics (kelp, anemones). Same flow; expect Hunyuan to add a “ground attachment” base unless you say
floating, suspended in water. - Branching meshes (vines, roots) come back too thick. Specify
thin tendril, fine branches, or accept and scale Y down in the editor. - Snow / ice / frozen variant. Add
covered in snow, frosted, ice crystalsto the prompt — works well on trees and rocks. For temperature variants of the same scene, generate the variant rather than retexturing. - Crystal/glass organic. Mesh comes back opaque. Generate the geometry, then assign a
StandardMaterial3Dwithtransparency = ALPHAand emissive in the editor. - Bones, skulls, dead trees. All work; organic forgives them more than props would. Add
weathered, sun-bleachedfor desert / tundra feel.
Without Summer Engine
In a session without Summer Engine tools (the assets profile; thesummer-assets skill has the whole loop), do steps 1-4 and skip steps 5-6 (scene wiring, LOD). Save the file where the person asked with out (the summer-assets skill says how), and tell them the path and format. The file is GLB; level of detail and billboards are the person’s engine’s job.
Fallback (no MCP)
- Run prompts at the Summer dashboard or any 3D-gen web playground (Hunyuan, Trellis, Meshy).
- Download
.glbfiles intores://assets/organic/. - Build scatter scenes manually in Summer Engine.
Handoff
After the organic models are scattered:Forest scatter ready: 3 species atres://assets/organic/, 100 instances each via MultiMeshInstance3D in./World/Forest. Next:
- Wind shader (sway in breeze): hand-write a vertex displacement shader.
- Ground texture (grass beneath the trees):
asset-strategyPipeline 2 for tileable ground.- Lighting / fog (forest mood):
3d-lightingfor ambient + directional sun + volumetric fog.- Ambient audio (forest birds, leaves):
ambient-bed.- Hero props (a stump, a fallen log, a shrine):
prop-modelfor the hand-placed standouts.
See also
prop-model— for hand-placed standout pieces.environment-kit— pair with this skill: kit pieces give the architecture, organic gives the natural softness.asset-strategy— meta-router; ground textures and skyboxes go to Pipeline 2 / panoramic gen.scene-composition— MultiMeshInstance3D scatter pattern.summer_docs_readidreference/mcp-tools-reference— how to callassets.generate_3d;summer_searchreturns its exact input.
From a shell
No Summer MCP tools in this session? Run each one as a command; whensummer --version is missing or below 4.0, use npx -y summer-engine@latest in place of summer. Fields are flags in kebab-case (--scene-path res://main.tscn) or one --input '<json>', and summer ops describe <op> prints the exact input. The summer-cli skill has the rest.
Related skills
character-model: Generate a rigged humanoid (player, NPC, enemy, boss) from a T-pose reference, previewed before rigging.environment-kit: Generate a modular environment kit: walls, floor tiles, pillars, doors, arches in one visual style.prop-model: Generate one static 3D prop (sword, barrel, chest, lantern, statue): one object, no rig, a MeshInstance3D.vehicle-model: Generate a hard-surface vehicle (car, spaceship, mech, boat, tank) as a static or VehicleBody3D mesh.asset-strategy: Route any ‘I need a [thing]’ asset request to the right skill: 2D, 3D, audio, video, VFX or animation.ambient-bed: Generate a long looping location ambience (forest, dungeon, city, cave) on the Ambient bus.
Source:
library/skills/organic-model/SKILL.md, rendered from summer-engine@4.3.0 on npm.
