This document describes how to build VibeyMapTools from source. Expect CMake, some dependencies, and a sprinkle of vibes. ✨
Same workflow, new name, extra toys. If you used ericw-tools, this should feel instantly familiar.
| ericw-tools | VibeyMapTools |
|---|---|
qbsp |
vmt-bsp |
vis |
vmt-vis |
light |
vmt-light |
bspinfo |
vmt-bspinfo |
bsputil |
vmt-bsputil |
maputil |
vmt-maputil |
lightpreview |
vmt-preview |
Still the same (legacy comfy mode):
- Quake II + Remaster support stays put (
-q2bsp,-lightgrid,-world_units_per_luxel) 🧠🎮 - CLI flags, map formats, and output expectations
- Upstream docs still apply: https://ericwa.github.io/ericw-tools/ 📚
VMT upgrades (build + release glow):
vmt-prefix on every binary so ericw-tools can live side-by-side 🧹✨- Semantic versioning + tag-driven releases with CI-built packages 📦🚀
- Build metadata +
version.hhfor scripting and diagnostics 🧾🛠️
- CMake 3.14+
- C++20 compiler:
- Visual Studio 2019+ (Windows)
- GCC 9+ (Linux)
- Clang 10+ (macOS/Linux)
- Git (for submodules)
- Intel Embree 4.x + oneTBB (required for
vmt-lightbuilds)
- Qt6 (for
vmt-preview) - NVIDIA CUDA Toolkit + OptiX SDK 7.x (GPU raytracing)
- Intel Open Image Denoise (OIDN) (AI-based lightmap denoising)
# Clone with submodules
git clone --recursive https://github.com/themuffinator/VibeyMapTools.git
cd VibeyMapTools
# Configure
mkdir build
cd build
cmake .. -G "Visual Studio 17 2022" -A x64
# Build
cmake --build . --config Release# Install dependencies (Ubuntu/Debian)
sudo apt install cmake build-essential libembree-dev libtbb-dev
# Clone with submodules
git clone --recursive https://github.com/themuffinator/VibeyMapTools.git
cd VibeyMapTools
# Build
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --parallel# Install dependencies via Homebrew
brew install cmake embree tbb qt@6
# Qt6 is only needed for vmt-preview
# Clone and build
git clone --recursive https://github.com/themuffinator/VibeyMapTools.git
cd VibeyMapTools
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --parallel- Single-config generators (Ninja, Makefiles): set
-DCMAKE_BUILD_TYPE=Release|RelWithDebInfo|Debug. - Multi-config generators (Visual Studio, Xcode, Ninja Multi-Config): use
--config Release|RelWithDebInfo|Debugand skipCMAKE_BUILD_TYPE. - Release enables LTO/IPO by default; Debug and RelWithDebInfo disable IPO for faster iteration.
VIBEYMAPTOOLS_ASAN=YESenables AddressSanitizer (Clang/GCC; MSVC where supported).VIBEYMAPTOOLS_TIMETRACE=YESemits Clang-ftime-traceJSON per translation unit.NO_ITERATOR_DEBUG=ONdisables MSVC iterator debugging for speed.
If CMake cannot find them, pass the package config paths:
cmake .. -Dembree_DIR=/path/to/embree/lib/cmake/embree-4.x -DTBB_DIR=/path/to/tbb/lib/cmake/tbbvmt-preview is built when Qt6 is available and ENABLE_LIGHTPREVIEW=ON.
Required components
- Qt6 Core, Gui, Widgets, OpenGL, OpenGLWidgets
Windows (Qt Online Installer)
- Install Qt 6.x (MSVC build) with the components above.
- Point CMake at the Qt install:
cmake -B build -DENABLE_LIGHTPREVIEW=ON -DCMAKE_PREFIX_PATH="C:\Qt\6.6.2\msvc2019_64"Linux (Debian/Ubuntu)
sudo apt install qt6-base-dev qt6-base-dev-tools libgl1-mesa-dev
cmake -B build -DENABLE_LIGHTPREVIEW=ONmacOS (Homebrew)
brew install qt@6
cmake -B build -DENABLE_LIGHTPREVIEW=ON -DCMAKE_PREFIX_PATH="$(brew --prefix qt@6)"Verification
In CMake output, ensure Qt6 is detected and ENABLE_LIGHTPREVIEW remains ON. The
vmt-preview binary should appear in build/ after a successful build.
This enables the -gpu path in vmt-light (OptiX-backed raytracing). If OptiX isn't found, -gpu
falls back to Embree and prints "GPU Raytracing compiled out."
1) Install the prerequisites
- NVIDIA GPU + recent driver
- CUDA Toolkit (from https://developer.nvidia.com/cuda-toolkit)
- OptiX SDK 7.x (from https://developer.nvidia.com/designworks/optix/download)
2) Set OptiX SDK path
Point OPTIX_ROOT_DIR at the OptiX SDK root (the directory that contains include/optix.h).
Windows (PowerShell):
$env:OPTIX_ROOT_DIR = "C:\ProgramData\NVIDIA Corporation\OptiX SDK 7.7.0"Linux/macOS (bash/zsh):
export OPTIX_ROOT_DIR=/opt/optix/OptiX_SDK_7.7.03) Reconfigure + rebuild
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release4) Verify OptiX is detected In CMake output you should see:
CUDA found. Checking for OptiX...OptiX found at <path>
5) Run with GPU tracing
vmt-light -gpu mymap.bspIf you still see "GPU Raytracing compiled out", OptiX headers were not found. Double-check the
OPTIX_ROOT_DIR value and that include/optix.h exists.
Troubleshooting
- If CUDA isn't found, set
CUDAToolkit_ROOTor install a matching Toolkit version for your GPU driver. - If the build system caches a failed OptiX lookup, delete
build/or clear the CMake cache.
Download from https://www.openimagedenoise.org/downloads.html
cmake .. -DOpenImageDenoise_DIR=/path/to/oidn/lib/cmake/OpenImageDenoise| Option | Default | Description |
|---|---|---|
ENABLE_LIGHTPREVIEW |
ON | Enable Qt-based vmt-preview |
DISABLE_TESTS |
OFF | Skip building tests |
DISABLE_DOCS |
OFF | Skip docs build |
VIBEYMAPTOOLS_ASAN |
OFF | Enable AddressSanitizer for all targets |
VIBEYMAPTOOLS_TIMETRACE |
OFF | Enable Clang -ftime-trace output |
CMAKE_BUILD_TYPE |
Release | Build type (Debug/Release/RelWithDebInfo) |
After a successful build, you'll find in build/:
| Binary | Description |
|---|---|
vmt-bsp |
BSP compiler - converts .map to .bsp |
vmt-vis |
Visibility compiler - calculates PVS |
vmt-light |
Light compiler - calculates lightmaps |
vmt-bspinfo |
BSP information utility |
vmt-bsputil |
BSP manipulation utility |
vmt-maputil |
Lua scripting for .map workflows |
vmt-preview |
Realtime lighting preview (experimental) |
cd build
ctest --output-on-failurepython tests/regression.pyTo update golden hashes after intentional changes:
python tests/regression.py --update- Ensure Embree 4.x and oneTBB are installed
- Pass
embree_DIRandTBB_DIRto CMake if needed
- Set
OPTIX_ROOT_DIRto the OptiX SDK path - Install CUDA Toolkit first
- Set
OpenImageDenoise_DIRto the OIDN CMake config directory - OIDN is optional; the bilateral filter will be used as fallback
- IDEs sometimes miss the full CMake configuration
- The project should still compile correctly via CMake
- 4-space indentation
- Allman brace style
- snake_case for functions, PascalCase for classes
- Create feature branch
- Implement changes
- Update tests in
tests/ - Update documentation (CHANGELOG.md, WIKI.md)
- Submit pull request
VibeyMapTools uses Semantic Versioning:
- MAJOR.MINOR.PATCH (e.g., 2.1.0)
VERSIONstores the base (next) version- Git tags
vMAJOR.MINOR.PATCH[-prerelease]are the source of truth for releases - Non-tag builds append
-dev.<commits>+g<sha>or+dirtymetadata - CMake generates
version.hhwith compile-time constants inbuild/include
#include <version.hh>
// Access version info
printf("VibeyMapTools %s\n", vibey::version::full());
printf("Built on %s\n", vibey::version::build_date());
// Feature detection
if (vibey::version::has_optix()) {
// GPU raytracing available
}- Update
VERSIONandCHANGELOG.md - Create an annotated tag:
git tag -a v2.1.0 -m "Release 2.1.0" - Push the tag:
git push origin v2.1.0 - The Release GitHub Action builds and drafts the release with packages
GitHub Actions provides:
- Multi-platform builds (Windows, Linux, macOS)
- Automated testing on pushes and pull requests
- Draft releases with packaged artifacts on version tags