Brushwork is a standalone, GPU-accelerated level editor designed for Source 1 engine maps (.VMF). Built with C++20, Qt 6.5+, and a native Vulkan 1.3 renderer, it replaces legacy Hammer with modern 3D viewport controls, real-time lighting previews, and enhanced geometry operations.
Game Directory Configuration
To mount textures, models, and entity definitions (.FGD), configure your target game path:
- Launch Brushwork and navigate to Tools → Game Configurations.
- Select your game profile (e.g.
Half-Life 2,Counter-Strike: Source,Team Fortress 2). - Set the Game Directory containing
gameinfo.txt(e.g..../steamapps/common/Half-Life 2/hl2). - Verify mounted VPK packages and FGD entity definition files in the mounted content list.
vbsp, vvis, and vrad can be selected in the Build Executables tab.
Brushwork provides the classic Quad Viewport layout alongside flexible single and split arrangements:
| Viewport | Projection | Primary Use |
|---|---|---|
| 3D Perspective | Vulkan 3D Camera | Real-time textured/shaded scene preview, gizmo transforms, face manipulation. |
| Top (X / Y) | Orthographic 2D | Plan view for layout, horizontal positioning, and room boundaries. |
| Front (Y / Z) | Orthographic 2D | Elevation view for heights, floor-to-ceiling sizing, and vertical entity placement. |
| Side (X / Z) | Orthographic 2D | Cross-section profile for structural alignment and incline clipping. |
Viewport Controls
| Action | Shortcut | Description |
|---|---|---|
| Freelook Camera | Right Click + WASD | Fly through the 3D perspective viewport with mouselook. |
| Fast / Slow Fly | Hold Shift or Ctrl | Accelerate or fine-tune fly speed during 3D freelook. |
| Orbit Camera | Alt + Left Click Drag | Orbit around current selection or center point. |
| 2D Pan | Right Click Drag | Pan 2D orthographic viewports smoothly. |
| Zoom In / Out | Mouse Wheel | Zoom centered on current cursor coordinates in 2D and 3D views. |
| Maximize Viewport | Shift + Z | Toggle active viewport between fullscreen and multi-split. |
Unlike legacy editors limited to 2D resize handles, Brushwork features native interactive 3D gizmos directly in the perspective view:
| Gizmo Mode | Shortcut | Operation |
|---|---|---|
| Translate | W | Axial arrows for single-axis translation; planar squares for 2D plane sliding. |
| Rotate | E | Color-coded rotational rings with angle snapping (15° increments default). |
| Scale | R | Uniform center cube scaling and per-axis stretch handles. |
| Universal | T | Combined translation and orientation handles for rapid level layout. |
| View Gizmo | Click in 3D | Orientation cube in top-right of 3D view; click axis to snap camera view. |
Block Creation
Select the Block Tool (Shift+B), drag a bounding rectangle in any 2D orthographic viewport, adjust dimensions, and press Enter to generate the convex solid brush.
Advanced Face Tools
| Operation | Description |
|---|---|
| Face Extrude | Select a face in 3D and drag outward or inward along its normal vector. |
| Face Inset | Offset boundary edges inward to create recessed panels and architectural trim. |
| Bevel | Chamfer selected edges with configurable bevel width without creating non-convex errors. |
| Clip Tool (Shift+X) | Define a 2-point or 3-point slicing plane to divide or trim solid geometry. |
| Vertex Edit (Shift+V) | Directly reposition vertices and edges. Invalid non-planar faces are automatically flagged. |
Brushwork reads native Valve Material Type (.VMT) and Valve Texture Format (.VTF) files directly from mounted games and loose material folders.
| Feature | Usage |
|---|---|
| Material Browser | Filter by texture name, keyword tags, or material shader parameters ($basetexture, $bumpmap). |
| Face Application (Shift+A) | Left click face to apply current texture; right click face to sample properties into tool. |
| Texture Alignment | Toggle between World and Face projection coordinates. Use Justify buttons (L, R, C, T, B) for automatic face alignment. |
| Fit & Scale | Automatically stretch or tile textures to match face dimensions with 1:1 aspect ratios. |
Support for Point Entities, Brush Entities, and Source 1 Input/Output logic:
- Point Entities (Shift+E): Click to place lights, prop_static models, info_player_start spawn points, and ambient audio sources.
- Brush Entities (Ctrl+T): Convert selected solid brushes into
func_detail(non-vis blocking geometry),func_door,trigger_multiple, orfunc_brush. - Entity Properties (Alt+Enter): Inspect KeyValues, flags, and the I/O event routing graph (Outputs → Target Entity → Input Action → Delay).
Press F9 to open the Run Map compilation dialog:
| Preset | Compiler Parameters |
|---|---|
| Fast | vbsp (Geometry only, rapid leak and navigation check). |
| Normal | vbsp + vvis -fast + vrad -bounce 2 |
| Final / HDR | vbsp + vvis + vrad -both -final -staticproppolys |
Compiled BSP files can launch directly into your target game executable with customizable launch flags (e.g. -dev -console -allowdebug +map <mapname>).
| Command | Shortcut | Category |
|---|---|---|
| Select Tool | Shift + S | Tools |
| Block Tool | Shift + B | Tools |
| Texture Tool | Shift + A | Tools |
| Entity Tool | Shift + E | Tools |
| Clipping Tool | Shift + X | Tools |
| Vertex Tool | Shift + V | Tools |
| Translate Mode | W | Gizmo |
| Rotate Mode | E | Gizmo |
| Scale Mode | R | Gizmo |
| Grid Size Up / Down | ] / [ | Grid |
| Tie to Entity | Ctrl + T | Entities |
| Entity Properties | Alt + Enter | Properties |
| Run Map / Compile | F9 | Build |