Our lifetime deal increases from $97 to $127 in03 days19 hours05 min54 secGet access for just $97 NOW
Studio

Seeding from a WorldPlan

Materialize a procedurally generated WorldPlan into a map — the seeder resolves each placement's semantic hint onto an asset you own, so a whole town lands as one undoable step.

AP
Aron Prins
Founder · Updated Jul 22, 2026 · 2 min read
On this page (4)

Instead of placing every asset by hand, you can seed a map from a WorldPlan — a procedurally generated layout of a settlement. The seeder reads each planned placement's position and semantic hint, matches the hint to an asset you own, and drops the whole scene in one step you can undo.

What a WorldPlan is#

A WorldPlan v1 is the output of the procedural world generator: a validated JSON document listing placements, each carrying a world position (x, z in metres), a rotation, and a semantic kind / assetHint such as cottage, shop-house, civic-hall, tree, bench, or street_light. The hint is a description of what belongs there, not a catalog slug — the seeder decides which of your assets fulfills it.

The mapping from a WorldPlan placement to a map placement is:

WorldPlanMap placementNotes
x, zx, zCopied verbatim — not grid-snapped (snap is a separate step).
rotationryOmitted when 0.
assetHint ?? kindassetRefResolved to an asset you own.
ididCarried through as the placement identity.
sWorldPlan has no scale, so scale stays 1.

Seeding a map#

Two entry points:

  • New from WorldPlan… in the project menu picks a plan file, creates a fresh map, and seeds it.
  • map.seedFromWorldPlan (command palette) seeds the current map. Run with no argument and it opens a file picker; called with a plan object (for example from window.studio) it seeds directly.

Either way the entire plan is added as one undo step — undo removes the whole seed at once.

How hints resolve to your assets#

The seeder maps each hint onto a slug from your owned and free catalog:

  1. an exact match on the normalized slug, then
  2. a keyword / substring match against the asset's slug, name, and category (three-character tokens or longer) — deliberately fuzzy, so suburban-house can resolve to shop-house via the shared house token.

A hint with no match is skipped. Because resolution is scoped to assets you own, seeding a plan you don't have full coverage for simply places what it can and reports the rest.

Seeded placements are named <Base>.<nnn> and routed to a layer by category — trees and rocks to Nature, houses and buildings to Structures, fences to Boundary, everything else to Props. A toast reports the result, for example Seeded 48 placement(s) · 6 skipped.

The seeder rejects a plan whose schemaVersion isn't 1. The full mapping contract is in Studio file formats.

Next#

Still stuck?

Ask us directly — we answer support mail ourselves.

Contact support
Share
Seeding from a WorldPlan — threejsassets.com