Install
$ agentstack add skill-summerengine-summer-engine-agent-vehicle-model ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Vehicle Model — Hard-Surface 3D Generation
Vehicles are the hardest 3D-gen category. Hard surfaces (flat panels, sharp edges, symmetrical bodies) expose every flaw the AI mesher has — smoothing-group artifacts on flat panels, asymmetric headlights, melted door seams. This skill exists to push the success rate up by giving the model multi-angle reference, picking the right backend, and using a secondary detail-texture pass to recover crispness on the body panels.
Backing tool: summer_generate_3d. Default model is hunyuan (best general quality). For pure hard-surface (clean spaceship, F1 car), try trellis first — it tends to preserve panel edges better.
When to use
- "Make me a player car for a racing game."
- "Generate a sci-fi fighter spaceship."
- "I need a hover bike for the desert level."
- "Create a mech for the boss fight."
- "Background traffic — generate three civilian sedans."
When NOT to use
- Character driving the vehicle → that's
summer:3d-assets/character-model. Generate them separately and parent the character to the vehicle's seat. - Vehicle interior (cockpit, dashboard) as a first-person view → generate as a separate "interior" prop via
summer:3d-assets/prop-modelwith first-person framing. - A scenery vehicle that never moves and is far from camera (parked truck in the distance) →
summer:3d-assets/prop-modelis fine; vehicle-model's overhead isn't worth it. - Procedural / customizable vehicles (modular ship parts) → use
summer:3d-assets/environment-kitto generate a vehicle-parts kit instead.
Polycount targets
| Use case | Tris | Pass via | |---|---|---| | Player vehicle (close camera, lots of screen time) | 15k–30k | target_polycount: 25000 | | Hero showpiece (cinematic, garage view) | 30k–60k | target_polycount: 50000 | | Background traffic (mid-range, multiple onscreen) | 2k–5k | target_polycount: 4000 | | Distant flyby / parked scenery | 1k–2k | target_polycount: 1500 |
Vehicles benefit more from polycount than props — flat panels need edge density to look right. Don't go below 2k for anything the camera will get close to.
Multi-angle reference — the single biggest quality lever
Vehicles are highly view-dependent. A front-only reference produces a mesh with great front detail and a melted rear. The fix: generate a front + 3/4 side composite reference before the 3D pass.
summer_generate_image(
prompt="A sleek red sports car, front view AND 3/4 rear-side view side by side, two angles in one image, white background, studio lighting, clean references for 3D modeling, isolated, no scenery."
)
Most image models will produce a two-view composite. Then feed it to image-to-3D:
summer_generate_3d(
kind="image-to-3d",
imageUrl="",
model="hunyuan",
options={ target_polycount: 25000 }
)
If the user has reference images already (concept art, photos), prefer those — composite them into a single image first if they aren't already.
Steps
1. Search before generating
summer_search_assets(query="", assetType="3d_model", source="all")
2. Pick model and polycount
For hard-edged vehicles (spaceships, F1, mechs), try trellis first — sharper panel edges. For organic-curved vehicles (muscle cars, motorcycles, classic boats), hunyuan handles the curves better.
3. Build the prompt
Pattern: + + + + isolated suffix.
| Goal | Prompt that works | |---|---| | Player race car | A sleek modern Formula 1 race car, aerodynamic carbon-fiber bodywork, large rear wing, exposed wheels, racing livery in red and white. Front and 3/4 side views. Game asset, stylized, clean white background, isolated vehicle. | | Sci-fi fighter | A sleek single-seat sci-fi space fighter, swept-forward wings, twin engine nacelles, glass cockpit canopy, painted matte gray with cyan trim. Front and 3/4 side views. Game asset, stylized hard-surface, white background, isolated vehicle. | | Hover bike | A rusted desert hover bike, exposed engine block, single seat, handlebars, no wheels (hover thrusters underneath), weathered orange paint. Front and 3/4 side views. Game asset, stylized, white background, isolated vehicle. | | Mech | A 4 meter tall bipedal combat mech, blocky armored torso, articulated arms with rifle and missile pod, thick legs with hydraulic pistons, painted olive drab with hazard stripes. Front and 3/4 side views. Game asset, hard-surface stylized, white background, isolated vehicle. | | Background sedan | A generic 90s civilian sedan, four doors, beige paint, slightly worn. Front and 3/4 side views. Game asset, low-detail stylized, white background, isolated vehicle. |
The phrase front and 3/4 side views is what triggers the multi-angle composite reference internally.
4. Confirm and call
> About to generate red_race_car via hunyuan, target ~25k tris, multi-angle ref. ~$0.60, ~90s. OK?
summer_generate_3d(
prompt="A sleek modern Formula 1 race car, ...",
model="hunyuan",
options={ target_polycount: 25000 },
wait=true
)
summer_get_asset(assetId="")
summer_import_asset_by_id(assetId="", path="res://assets/vehicles/race_car.glb")
5. Inspect for hard-surface artifacts
summer_inspect_resource(path="res://assets/vehicles/race_car.glb")
Open the import preview. Look for:
- Smoothing-group artifacts on flat panels (visible as banding under light) → fix in step 6 with a detail texture, or re-import with
Generate Tangents = onand a custom shader. - Asymmetric headlights / wheels → regenerate with
symmetric, mirrored bilateraladded to the prompt. - Melted door seams / panel gaps → run the detail-texture pass (step 6).
6. Optional: secondary detail-texture pass
For hero vehicles, run a texture-only pass to recover panel-line crispness without re-meshing:
summer_generate_3d(
kind="texture",
imageUrl="",
model="hunyuan",
options={ target_polycount: 25000 } // matched to existing mesh
)
This re-textures the existing mesh with sharper detail — panel lines, decals, weathering. Cheaper than re-meshing. Apply via material override in the editor.
7. Wire into the scene
| Use case | Parent type | Notes | |---|---|---| | Player-driven (car, bike, hover) | VehicleBody3D (Godot 4.5 wheeled) or RigidBody3D (free physics) | Add VehicleWheel3D children for wheeled vehicles | | Player-driven (spaceship, mech) | RigidBody3D or CharacterBody3D | Custom thrust / walk code, see summer:character-controllers | | Background scenery (parked, flyby) | MeshInstance3D under a Node3D | No physics, no collision needed for distant traffic | | Background traffic (moving but not interactive) | Node3D + AnimationPlayer driving the position | Cheap, no physics overhead |
Player car wiring:
summer_add_node(parent="./World", type="VehicleBody3D", name="RaceCar")
summer_add_node(parent="./World/RaceCar", type="MeshInstance3D", name="Body")
summer_set_prop(path="./World/RaceCar/Body", property="mesh", value="res://assets/vehicles/race_car.glb")
summer_add_node(parent="./World/RaceCar", type="CollisionShape3D", name="Collider")
# Add a BoxShape3D resource matched to the AABB
# Add VehicleWheel3D children at each wheel position
summer_save_scene
Background scenery wiring:
summer_add_node(parent="./World/Street", type="MeshInstance3D", name="ParkedSedan")
summer_set_prop(path="./World/Street/ParkedSedan", property="mesh", value="res://assets/vehicles/sedan.glb")
summer_save_scene
Anti-patterns
- Single-angle reference for a hero vehicle. Front-only → melted rear. Always go multi-angle for anything the player gets close to.
- Flat-shaded prompt for hard surfaces. "Smooth shading", "rounded edges" → loses the panel-line crispness that defines vehicles. Prefer "hard-surface", "panel-lined", "crisp edges".
- Skipping symmetry callouts. Vehicles are bilaterally symmetric — without
symmetric, mirroredyou get one headlight bigger than the other 30% of the time. - Asking the mesh pass to invent decals / liveries. It can't — the mesh has the silhouette but the decals get geometry-baked weirdly. Use the texture pass for liveries.
- Wrapping a background sedan in VehicleBody3D. Wastes physics for a parked car. Use MeshInstance3D under Node3D.
- Picking
meshy(legacy). Worse hard-surface fidelity than hunyuan or trellis.
Edge cases
- Tracked vehicle (tank). AI mesh-gen handles the hull but the tracks come back as a fused ring. Generate the hull only, then add tracks as a separate
summer:3d-assets/prop-model(or use a tiled texture on a torus). For animation, scroll the track texture's UV. - Articulated vehicle (mech with shoulders, hips, knees). The mesh is one piece — joints aren't separated. For animated mechs, treat as a humanoid: generate as
summer:3d-assets/character-modelwith the rig pass, then animate viasummer:animation/generate-motion(custom backend, prompt as "mech walks heavily"). - Vehicle with rotor (helicopter, drone). Generate without rotor, then add the rotor as a separate
summer:3d-assets/prop-modeland parent it. Spin via code in_process. - Open-top vehicle (convertible, jeep). Specify "open top, no roof" — defaults often add a roof.
- The user wants the cockpit interior visible. Generate exterior here, then a separate
summer:3d-assets/prop-modelfor the interior, and switch meshes when the camera enters first-person view.
Fallback (no MCP)
- Generate the multi-angle reference at the Summer dashboard (or Midjourney / nano-banana web).
- Upload to Hunyuan or Trellis web playground → image-to-3D → download
.glb. - Drop into
res://assets/vehicles/. - Wire as VehicleBody3D / MeshInstance3D in the Godot editor manually.
Handoff
After the vehicle is wired:
> race_car.glb placed at ./World/RaceCar as a VehicleBody3D. Next: > - Vehicle controls: WASD steering / accel — see summer:character-controllers for the vehicle controller pattern (or write directly with engine_force, steering, and brake on VehicleBody3D). > - Driver character: generate via summer:3d-assets/character-model and parent to the seat position. > - Engine sound + tire screech: summer:audio/sound-effect for one-shots, summer:audio/ambient-bed for the engine loop. > - Particles: exhaust smoke, dust trail, sparks on collision — summer:vfx/particles (when available) or built-in GPUParticles3D.
See also
summer:3d-assets/character-model— for the driver/pilot.summer:3d-assets/prop-model— for separable parts (rotors, decals as decals, modular kit pieces).summer:asset-pipeline/asset-strategy— meta-router.summer:character-controllers— for player-driven vehicle input wiring.references/mcp-tools-reference.md—summer_generate_3dschema, includingkind: "texture"for the secondary detail pass.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: SummerEngine
- Source: SummerEngine/summer-engine-agent
- License: MIT
- Homepage: https://summerengine.com/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.