Warehouse Creator Extension#

The Warehouse Creator is an interactive plan builder that converts a 2D grid layout into a USD warehouse built from the Modular Warehouse asset pack. Sketch the floor plan in a top-down editor, place tiles from a block library, and generate the corresponding USD prims on the active stage.

The feature ships as two extensions:

  • omni.warehouse.creator.api — headless logic (grid engine, auto-tiling, plan-to-stage sync, and the column editing controller). Use it from scripts and tests with no UI dependency.

  • omni.warehouse.creator.ui — the Warehouse Builder window, toolbar, block library palette, variant property widget, and column placement workflow.

Installing and enabling the extension#

  1. Open Window > Extensions from the top menu.

  2. Search for omni.warehouse.creator.ui in the Extension Manager window.

  3. Click Install or Update if needed.

  4. Toggle the extension on. Enable Autoload to start it on every launch.

The UI extension pulls in omni.warehouse.creator.api automatically. Enabling the API extension on its own is supported for headless / scripted workflows.

Opening the editor#

Open Window > Warehouse Creator to show the Warehouse Builder window. The window contains:

  • An overhead 2D viewport centered on the grid origin.

  • A floating toolbar along the bottom of the viewport with all editing tools.

  • A block library palette docked to the side of the window.

  • A Warehouse Creator panel with the Generate Warehouse button and the collapsible Column Editor section.

The window builds on first open and stays in memory after you close it, so reopening is instantaneous.

Warehouse Builder window with the overhead viewport, floating toolbar, block library palette, and Warehouse Creator side panel.

Configuring the dataset source#

Configure asset paths from Edit > Preferences > Warehouse Creator. The page exposes:

Setting

Purpose

Cell Size (world units)

World-space size of a single grid cell. Controls both the editor grid and the generated tile spacing.

Wall Height (world units)

Height applied to the wall asset preset.

Center (floor) Asset

File name of the center/floor USD asset relative to the asset root.

Wall Asset

File name of the wall USD asset relative to the asset root.

Asset Root Path

Local or Nucleus root folder containing the warehouse assets. Point this at your downloaded Isaac Sim assets folder for the fastest editor and generation experience.

Cloud Assets URL

HTTPS fallback used when Asset Root Path is unset or unreachable.

Note

The Cell Size, Wall Height, and asset name settings depend on the asset pack you use. The default values match the Isaac Sim assets pack; for a custom pack, set the values manually. An asset pack is a collection of Center/Floor and Wall assets that share a variant system exposing every available option of each asset type as a reference. See the Modular Warehouse pack for an example of how to structure one.

For local performance, download the Isaac Sim assets pack (see Latest Release) and point Asset Root Path at [Isaac Sim Assets Path]/Isaac/Environments/Modular_Warehouse_New/. The block library palette and the warehouse generator both read from this location.

Editor workflow#

The editor operates on a logical grid. At generation time, each occupied cell becomes a center/floor prim and each exposed cell edge becomes a wall prim. The generator omits walls between two adjacent occupied cells.

The toolbar uses three categories of buttons:

  • Modal tools — mutually exclusive. Activating one deactivates the previously active modal tool.

    • wc_select Select

    • wc_move Move

    • wc_rotate Rotate

    • wc_draw Draw

    • wc_line Line

    • wc_box Box

    • wc_erase Erase

  • Toggles — coexist with any modal tool. Activating symmetry mirrors every drawing or erasing action across the chosen axis.

    • wc_sym_h Symmetry Horizontal

    • wc_sym_v Symmetry Vertical

  • Immediate actions — one-shot operations. They execute on click without becoming the active tool.

    • wc_flip_h Flip Horizontal

    • wc_flip_v Flip Vertical

    • wc_group Group

    • wc_ungroup Ungroup

    • wc_merge Merge

    • wc_subtract Subtract

    • wc_zoom_in Zoom In

    • wc_zoom_out Zoom Out

Selection-dependent actions (wc_flip_h Flip, wc_group Group, wc_ungroup Ungroup, wc_merge Merge, and wc_subtract Subtract) are disabled in the toolbar when the current selection does not meet their requirements.

Floating viewport toolbar showing the Select, Move, Rotate, Flip, Draw, Line, Box, Erase, Symmetry, Boolean, Group, and Zoom buttons.

Drawing tiles#

  1. Pick an asset in the Block Library Palette. The next drawing operation places this asset as the manual tile.

  2. Activate wc_draw Draw for free-form painting, wc_line Line for a straight-line drag, or wc_box Box for filled rectangles.

  3. Click and drag inside the viewport to add cells. wc_erase Erase removes cells with the same gestures.

To drop a single tile at the cursor without changing the active tool, drag a palette card directly onto the viewport.

wc_sym_h Symmetry Horizontal and wc_sym_v Symmetry Vertical mirror every drawing or erasing action across the world origin on the selected axis. Toggle them at any time without leaving the active drawing tool.

Warehouse Builder window with two ungrouped layouts drawn on the grid: a larger plus-shaped block straddling the origin and a smaller cluster of cells to the lower right.

Selecting and editing#

  • wc_select Select — click a cell to select it. Click and drag to draw a selection box. Selecting a grouped cell selects the entire group.

  • wc_move Move — drag selected cells or groups to a new grid location.

  • wc_rotate Rotate — click to rotate the selection 90 degrees clockwise. Use the keyboard shortcuts below for finer control.

  • wc_flip_h Flip Horizontal / wc_flip_v Flip Vertical — mirror the selection across the corresponding axis in place.

Hotkeys#

The window owns its hotkey scope, so the shortcuts only fire while the cursor is over the Warehouse Builder window.

Shortcut

Action

Delete / Backspace

Delete the current selection (cells and groups).

Esc

Clear the current selection.

Ctrl+Z / Ctrl+Y

Undo / redo the last grid command.

Left / Right

Rotate the selected cells 90 degrees counter-clockwise / clockwise. Hold Shift to rotate in place.

Space

Cycle to the next tool (when enable_hotkeys is enabled in the extension settings).

Grouping cells#

A group treats a set of cells as a single floating object. You can move, rotate, and flip a group as a unit, and the generator emits each group as a separate warehouse root prim.

  • wc_group Group — combine the selection into a new group. Requires at least two ungrouped cells or existing groups.

  • wc_ungroup Ungroup — stamp a selected group’s cells back onto the grid as ungrouped cells.

  • wc_merge Merge — combine two or more selected groups into one.

  • wc_subtract Subtract — remove the cells of later-selected groups from the first-selected group.

At generation time, each group becomes its own /Warehouse_group_<id> root prim with walls derived from its boundary. Adjacent groups can sit next to ungrouped cells without sharing walls.

Variant property widget#

The generator emits two tile types — Wall and Center — and each tile ships with a set of visual variants such as a loading dock, an access panel, or a window. After generation, select one or more tile prims in the stage and use the Warehouse Tiles section of the Property panel to switch the variant on every selected tile of that type.

Tip

In the viewport, set Select Mode to Component (right-click the toolbar) so individual tiles are selectable instead of the whole warehouse hierarchy.

Warehouse Tiles section of the Property panel showing the available variants for the Wall and Center tile types.

Generating the warehouse#

The Generate Warehouse button in the Warehouse Creator panel converts the current plan into USD prims on the active stage:

  • All ungrouped cells go under /Warehouse.

  • Each group goes under its own /Warehouse_group_<id>.

  • A center/floor prim is placed at every occupied cell, and a wall prim is added on every exposed edge, rotated to face outward.

A modal Generating Warehouse popup blocks input until the USD layers settle. This keeps the editor responsive while large layouts stream in.

Re-running Generate Warehouse replaces the existing root prims with a fresh layout, so you can iterate on the plan and regenerate without manual cleanup.

Generated warehouse rendered in the 3D viewport showing two separate root prims with floor, walls, and corner columns produced from the drawn plan.

Editing column placement#

Each warehouse block carries a quarter-column at every corner. Adjacent blocks combine their quarter-columns into a single full column. The Column Editor toggles individual full columns on or off after the warehouse is generated, without manually authoring per-block variants.

  1. Generate the warehouse, then select any prim under one of the warehouse roots. The Edit Column Placement button becomes available when the selection sits under a generated warehouse.

  2. Click Edit Column Placement to enter edit mode. The editor hides the ceiling and non-column geometry, highlights each column (green for kept, red for pending removal), and forces the viewport outline overlay on so the highlights remain visible.

  3. Click columns in the viewport to toggle each between Enabled (green) and Disabled (red). Drag a marquee to toggle multiple at once. Use the Enable All, Disable All, and Flip All buttons for bulk operations.

  4. Click Confirm to author the variant selections on the root layer, or Cancel to discard the pending changes. Both actions exit edit mode and clear the temporary visibility overrides.

Column editor session on a generated warehouse with kept columns highlighted green and pending-removal columns highlighted red.

Headless API#

For scripts, batch jobs, and tests, omni.warehouse.creator.api exposes the same generation pipeline without any UI:

import omni.usd
from omni.warehouse.creator.api import CellData, GridConfig, GridEngine, StageSyncer

cells = {
    (0, 0): CellData(),
    (1, 0): CellData(),
    (1, 1): CellData(),
}

engine = GridEngine(GridConfig(cell_size=10.0))
stage = omni.usd.get_context().get_stage()

placed = StageSyncer().sync(cells, engine, stage)

The ColumnEditorController mirrors the Column Editor workflow for headless use. Call enter() to begin a session, mutate the pending-disabled set with set_all(), flip_all(), or toggle_keys(), then call leave() with commit=True to author the selections.