> For the complete documentation index, see [llms.txt](https://lev-dev.gitbook.io/lev-dev-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lev-dev.gitbook.io/lev-dev-docs/levelops.md).

# LevelOps

This is the documentation for working with LevelOps. It will describe how to use all the tools.

LevelOps is a developing tool, and you can influence its development. If you find bugs or have suggestions for improvements or implementing new features, you can write about them on the forum, in our Discord channel, or via email.

<alexeyshipin2@gmail.com>

{% embed url="<https://discord.gg/YNZbT3Ymgj>" %}

The screenshots used the following assets, which are not included with LevelOps.

{% embed url="<https://assetstore.unity.com/packages/3d/environments/stylized-hand-painted-dungeon-free-173934>" %}

{% embed url="<https://assetstore.unity.com/packages/3d/vegetation/trees/natureforge-free-stylized-meadow-farm-kit-123574>" %}

{% embed url="<https://kenney.nl/assets/retro-fantasy-kit>" %}

## LevelOps Tools

After installing LevelOps, you will have access to the following new tools:

* Pin: Single object point spawn.
* Brush: Mass placement of objects using a brush.
* Line: Placement of prefabs along a line.
* SmartPaint: Voxel mode for intelligent painting.
* WallBuilder: Fast construction of modular walls.
* LivePhysics: Physical interactions with objects.

## Working with the Palette

<div data-full-width="true"><figure><img src="/files/qYjGzf9ZJzfYC64kX5S5" alt=""><figcaption></figcaption></figure></div>

When you select any of the tools, the Palette menu will open. This is where most of our actions will take place. First, we need to create a new brush. To do this, drag a prefab or prefabs to any area of the palette.

After dragging, a brush is automatically created. Information about it will be displayed in the right section of the palette.

## SmartPaint (Voxel Mode)

### Smart Rules

The direction is viewed along the X-axis. Roles are usually selected automatically, except for cases with stairs—their roles must be selected manually.

<figure><img src="/files/HbCnQ9pT4D97KJDh8dTm" alt=""><figcaption></figcaption></figure>

After setting up the prefabs, you can start painting.

<figure><img src="/files/TYH1BX1r2kQQJYfCwU0h" alt=""><figcaption></figcaption></figure>

### Modes and Controls

There are 4 modes, which can be toggled using Tab:

* Stroke (Brush): Freehand drawing.
* Box (Box): Drawing with solid rectangular fills.
* BoxHollow (Hollow Box)
* Ramp (Bridge / Ramp): Complex mode for creating stairs and slopes.
* Ctrl + LMB (Drag): Eraser mode.
* V (Hold) + Mouse Movement (Up/Down): Dynamic "extruding" of the structure's height (Extrude).
* C (Hold) + LMB: Stamp mode (point replacement or placement of a specific block).
* C (Hold) + Mouse Scroll: Smart Swap (cyclical switching of the current block's variations).
* Mouse Wheel (Click): Eyedropper (pick up a prefab from the scene).

## WallBuilder (Modular Wall Construction)

The next tool is the WallBuilder. You need to configure the outer and inner wall corners for it. Their roles must be selected manually.

It places walls on a grid, so you need to make sure the walls and corners match the dimensions. Also, remember that you can adjust the Rotation Offset for the walls.

<figure><img src="/files/BMYX5W366HwwW0XxhznZ" alt=""><figcaption></figcaption></figure>

There are two modes:

* Polyline
* Box (Perimeter / Box)
* Shift + RMB: Undo (delete) the last placed point without resetting the entire wall (Undo for a waypoint).
* Enter (or Numpad Enter): Finalize (Commit) and build the wall.
* F: Mirror/Flip the wall (Flip Side). Inverts the offset direction (wallFlipSide), so the wall faces inwards or outwards.

## Line Tool (Placement Along a Line)

### Modes and Navigation

* Nodes: The default mode. This is where the main work with the curve shape takes place—placing points, interpolation, and closing contours.
* Move Whole (W key): Allows moving the entire constructed line as a whole. The tool calculates the center of mass of all nodes and moves the entire group simultaneously without breaking relative distances.
* Rotate Whole (R key): Rotates the entire line around its center of mass. Useful for final adjustments of a fence or wall to match the terrain.

<figure><img src="/files/2X2f78MshSXijToSZQSq" alt=""><figcaption></figcaption></figure>

### Key Generation Settings (Builder Window)

All curve mathematics and prefab placement rules are configured in the Inspector.

* Smooth Path (Smoothing): Switches the construction logic from linear (Lerp) to cubic interpolation (Catmull-Rom).
* Lane System (Multi-lane): Allows generating objects in several parallel rows (laneCount). Fine-tuning of offsets (Padding), random jitter (Jitter), scale, and axis rotations is available.
* Avoid Overlaps: Hardware collision check before spawning the preview. Uses PWB\_SpatialAccelerator for OverlapBox casts, ensuring objects do not intersect each other.
* Align to Surface / Path: Allows projecting nodes onto complex terrain and aligning prefab normals to the curve direction.

### Controls and Hotkeys (in Scene View)

Interaction is based on contextual cursor hovering (Hover). The tool automatically understands whether you want to create a new point or modify an existing one.

* LMB on empty space: Add a new node to the end of the path.
* LMB on the line between points: Insert a new node into that segment. The point is automatically projected onto the line.
* Hover + LMB (Dragging): Grab an existing node and move it.
* Shift + LMB on a node: Delete a specific node from the spline.
* Ctrl / Cmd + LMB on a node: Toggle smoothing (Smooth) on that specific point. Allows making a specific corner sharp or smooth.
* LMB on the very first node: Close the line into a loop (Smart Loop) or open it.
* Ctrl + Mouse Scroll: Dynamically change the offset distance (Inset Distance) when Corner Snapping is enabled.
* Shift + S: Hide or show the "ghost" preview line that trails from the last point to the cursor.
* Enter (or Numpad Enter): Confirm the shape (Commit) and bake the objects into the scene.
* Esc: Exit the move/rotate modes back to node mode, or completely reset the current spline.

## Brush Tool (Mass Object Placement)

<figure><img src="/files/GJHVDySeqATg7ivEcChw" alt=""><figcaption></figcaption></figure>

### Smart Masking

In the palette (the brush window), you can configure layers:

* Alt + Right-click on a brush: Set White-List. The tool will paint only on top of objects from this brush (e.g., placing moss only on specific rocks).
* Alt + Left-click on a brush: Add to Black-List. The tool will ignore this type of object (e.g., when painting a forest, trees automatically will not spawn on top of houses; raycast rays will pass through them or be blocked by their AABB).

### Main Settings (Builder Window)

The distribution algorithm does not use pure random scattering but divides the radius into cells (Grid).

* Density: A strict limit on the spawn attempts per click.
* Spacing Guard: A key parameter. The brush will not place a new object if another object from the same brush is already within this radius. This check operates at O(1) thanks to spatial hashing.
* Min Drag Distance: The distance the mouse must travel for the brush to perform the next "stamp." This prevents hundreds of objects from spawning in one spot if the mouse is stationary.
* Surface Types: A surface filter. You can force the brush to paint only on Terrain, only on meshes, or everywhere (All).
* Max Slope: Restriction based on surface normal. If set to 45°, trees will not grow on steep cliffs.

### Basic Controls (Hotkeys in Scene View)

* LMB + Drag: Paint. Objects conform to the terrain shape.
* Shift + LMB + Drag: Eraser (Erase). Destroys objects of the current brush within the cursor's radius.
* S (Hold) + Scroll: Change brush radius.
* D (Hold) + Scroll: Change density (the maximum number of objects per single "stamp").
* C (Hold) + Scroll: Change Spacing Guard (the minimum distance between objects to prevent clumping).
* Alt (Hold) + Scroll: Dynamically adjust Surface Y Offset (useful for slightly "sinking" rocks into the ground).
* Esc: Exit the tool.

## LivePhysics (Physical Interactions)

<figure><img src="/files/TnTholjklb8bi4UQDWoS" alt=""><figcaption></figcaption></figure>

* Grab: Functions like the Gravity Gun from Half-Life. It creates an invisible anchor object (\_anchorObject) with a Rigidbody, attaches the selected object to it via a ConfigurableJoint, and moves the anchor with the cursor.
* Point: "Magnet" mode. The object is not rigidly attached to the cursor but is physically pulled toward a point on the surface (Raycast), using velocity interpolation.
* Spawner: A physical brush or "sprinkler." Generates objects from a given pool (weighted by probabilities) above the surface and drops them down with a specified scatter (SpawnScatter).

## Additional Tools: Mirror

We move on to the supplementary Mirror tool. It is located at the bottom of the Builder Window. It works with:

* Pin Tool
* Brush Tool
* SmartPaint
* WallBuilder

### Mirror: Pivot Definition Modes

The mirror has three modes for defining the pivot point:

* World Origin: Reflection relative to the world center (0,0,0).
* Selection Center: Reflection relative to the center of the currently selected object.
* Custom: Custom point. You draw interactive Gizmo planes that can be moved using arrows.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lev-dev.gitbook.io/lev-dev-docs/levelops.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
