Level Builder
Level Builder is the in-editor mesh authoring tool for creating reusable PS1-facing mesh assets. It is meant for compact level pieces, blockout-to-final geometry, and custom meshes that should live inside the project instead of only in the current scene.

A new cube in Level Builder. Choose an editing mode on the left, manipulate the mesh in the center, and check geometry, UVs and PS1 Readiness on the right.
Open the image to view it at full size.When Level Builder is narrow, its panels appear as Viewport, Tools, Meshes, and Inspector tabs. Select a tab to access its controls, or widen the panel to see the tools, mesh list, viewport, and Inspector side by side. Each panel can scroll vertically; the UI scale also determines how much space the controls need.
What It Creates
When you save a Level Builder mesh, the editor writes:
| Output | Location | Purpose |
|---|---|---|
| Source mesh | Assets/Meshes/*.pmsh | Editable Level Builder source |
| Compiled mesh | Library/meshes/*.msh | Runtime mesh asset |
| Cached source copy | Library/level_builder/*.pmsh | Recovery/cache copy for the editor |
| Asset database entry | Library/asset_db.json | GUID, display name, paths, and stats |
The scene should reference the mesh through the asset database GUID, not through a raw file path.
Basic Workflow
- Open View > Level Builder.
- Click New under Tools > Create (or Create Primitive when no mesh is open). Use Load Mesh Asset to edit an existing asset.
- Edit in Object, Vertex, Edge, or Face mode.
- Assign a texture through a material to the faces that need it.
- Open the UV Editor to unwrap, pack, preview, and validate texture coordinates.
- Use validation warnings to catch degenerate faces, long edges, non-manifold edges, T-junctions, and PS1-risky geometry.
- Click Save Mesh Asset.
- Use Place Mesh in Scene to create a scene GameObject from the saved asset.
- Adjust the generated Collider, material, transform, scripts, and gameplay components in the main Inspector.
When a mesh is saved or placed, Object-mode transform is baked into vertices and
the mesh transform is reset. That keeps saved .pmsh and runtime .msh data
predictable for PS1 export.
The editable PMSH format also preserves Object transforms, mirror settings, and locked state in recovery snapshots. Current files use source format version 2; older source meshes remain readable. Finish or cancel an active transform or UV drag before saving. Recovery snapshots skip unfinished gestures.
Primitive Types
Level Builder can create editable primitives such as:
- cube,
- plane,
- cylinder,
- sphere,
- pyramid.
These are Level Builder mesh sources. They are different from regular built-in scene primitives such as Cube or Plane on a Mesh Renderer.
Selection Modes
| Mode | Use it for |
|---|---|
| Object | Select and transform whole meshes in the Level Builder session |
| Vertex | Select individual vertices |
| Edge | Select shared mesh edges |
| Face | Select triangle faces |
Selection and hidden-face state is stored per open mesh, so switching meshes does not leak face, edge, or vertex selections between assets. Vertex, edge, and face edits should preserve shared topology by default. Use operations such as Extrude, Inset, Merge, Delete, Duplicate, and Subdivide intentionally when you want to change topology.
Transform and Camera Controls
Level Builder separates selection transforms from viewport navigation:
| Action | Shortcut |
|---|---|
| Move | G |
| Rotate | R |
| Scale | S |
| Constrain axis | X, Y, Z, or drag a colored gizmo axis |
| Snap | Hold Ctrl |
| Finer step | Hold Shift |
| Frame selection | F |
| Orbit camera | Right mouse drag |
| Pan camera | Middle mouse drag |
| Ortho front/side/top | Numpad 1, 3, 7 |
| Toggle perspective | Numpad 5 |
If a gizmo is active, dragging it should transform the selection instead of moving the camera.
Framing uses the selected geometry in the current mode. Press Escape to cancel a transform and restore its starting state. Undo and Redo follow the active mesh or UV workspace. See Keyboard Shortcuts for mode switching, duplication, and deletion controls.
Placing Meshes in Scenes
Place Mesh in Scene creates a regular scene GameObject with:
- a Mesh Renderer referencing the saved mesh asset,
- an AABB Collider based on the mesh bounds.
The collider is intentionally editable after placement. If the object should block the player, keep or tune the collider. If it is only a trigger or decorative mesh, adjust the Collider accordingly.
The PS1 build validation warns when a Level Builder mesh reaches the runtime path without a Collider, because that object can be walked through.
Assigning a Texture
A texture belongs to a material. In Level Builder, you add that material to a mesh slot and assign the slot to faces.
- In Project, right-click an empty area and choose Import Texture.... Select a PNG, BMP, or TGA image and wait for the import to finish. See Texture Import for size, format, and transparency settings.
- Right-click an empty area in Project again and choose Create Material. Give the material a descriptive name so you can find it later.
- Select the material in Project. In its Inspector, drag the imported texture into Main Texture. Material changes are saved automatically. See Materials for the other properties.
- Open View > Level Builder and create or load the mesh you want to texture. In the Level Builder Inspector, expand Materials. Drag the material from Project onto the drop area below a material slot's name. Use Add Material Slot if you need another material on the same mesh.
- Switch to Face mode and select the faces that should use that material. Click Assign to Faces on its slot. Repeat with other slots if different faces need different materials.
- Enable Texture in the Level Builder viewport toolbar to see the textured result.
- If the texture looks stretched or incorrectly placed, use Open UV Editor to adjust the selected faces. A planar projection is useful for a flat floor; Auto Unwrap + Pack provides a starting layout for more complex shapes. Keep existing UVs if they already map the texture correctly. See UV Editor for projection and editing controls.
- Click Save Mesh Asset to save the material slots, face assignments, and UVs. If the mesh is not in the scene yet, use Place Mesh in Scene.
If Assign to Faces is disabled, switch to Face mode and select at least one face. Dropping a texture onto an empty material slot does not create a material: assign a material first. Once the slot has a material, dropping a texture there changes that material's Main Texture. This also affects any other mesh using the same material; use a separate material when those meshes need different textures.
Changing a shared material saves that material immediately. Mesh Undo does not revert this separate asset edit; restore the texture in the material Inspector if needed.
UV Mapping
The dockable UV Editor follows the active Level Builder mesh. It can operate on the selected faces or the full mesh and provides box and planar projection, automatic unwrap and packing, island selection, texture preview, snapping, numeric transforms, and checks for out-of-range or collapsed UVs.
UVs remain part of the editable .pmsh source and are compiled with the mesh.
Use the dedicated UV Editor page for the complete workflow and
controls.
Saving/exporting also repairs T-junction edges deterministically. Inserted
vertices interpolate existing normals and UVs, so the compiled .msh closes
the raster seam without resetting the authored unwrap. Because repair changes
topology, review the compiled stats and reopen the UV Editor when a warning
reports a dense or unusual result.
PS1 Authoring Rules
Use Level Builder meshes as PS1 content, not as desktop-quality arbitrary models:
- keep meshes low-poly,
- avoid very long triangles,
- avoid tiny sliver faces,
- avoid coplanar duplicate faces and deeply intersecting props,
- subdivide large floors and walls into practical chunks,
- use simple materials,
- keep material slots at or below the PS1 limit of 64,
- validate before saving,
- keep colliders explicit.
For deeper target rules, see PS1 Rendering & Level Authoring and Visibility and Culling.