VRAD++
Jump to navigation
Jump to search

Note:For Source 2013 Singleplayer games, you can create a folder named
Note:Any features which require Static prop flags greater than 0xFF are unavailable when compiling for the singleplayer format, as the static prop lump used by the older format only supports 8 bits of flags, instead of 32.
Developer(s)
Initial release
Jul 10, 2025
Stable release
May 4, 2026
Type
Map compiler
Distribution
Freeware
Download
VRAD++ is a community-made modification of Source's VRAD developed by ficool2.
Differences
- Scales up to 64 threads
- Small performance optimizations
- Shared LDR/HDR compiling:
- When using
-both, LDR lighting data will be redirected to HDR at no extra file size cost - This means you don't need to compile VRAD twice for LDR and HDR users anymore (compatible with both)
- Passing in
-ldror-hdrwill still explicitly compile in LDR or HDR mode only, respectively - HDR data will not be remapped if LDR data is already present
- Therefore if you need different LDR and HDR lighting, compile with
-ldrand-hdrseparately
- When using
- Bypassed "
numplanes+fakeplanes>=MAX_MAP_PLANES" limit - Light count is now unlimited instead of capped at 8192
- Added AppID mounting in gameinfo.txt
- Added shadow casting for dynamic props
- Set
vrad_model_cast_shadowsto1in the entity to enable this - This is intended for props that won't move and can't be a static prop, for example resupply lockers in TF2
- Uses the first frame of sequence 0, or uses the animation set by
DefaultAnim(like on prop_dynamic) - Modelscale is supported
- Set
- Added new light_projected light type
- Behaves like a env_projectedtexture but applied at compile time to lightmaps
- Same properties as light_spot, with an additional
texturenamekey (path to VTF) - Outer angle controls "size" of projected angle
- Alpha channel is multiplied with the output light (black - no light contribution)
- Non-square aspect ratios and roll angle are supported
- Renamed to light_spot after compilation so it can be toggled in-game
- Added support for light_directional light type
- Renamed to light_spot after compilation so it can be toggled in-game
- Added ambient occlusion baking
- Custom implementation that is an order of magnitude faster than AO in
Slammin /
CS:GO (!) - Set
-ambientocclusionor-aoto enable this - Customize with
-aoradius,-aoscale,-aopropsamples,-aofacesamples - Samples are automatically adjusted for
-fastand-finalmode - Default AO radius and scale is 32 units and 0.5 respectively
- Radius in 3D sky is correctly scaled (every other VRAD AO implementation has this bug)
- Use
-aodebugto visualize ambient occlusion
- Custom implementation that is an order of magnitude faster than AO in
- Added new QMC sampler for ambient, sunlight and ambient occlusion
- This allows lighting to converage to the ground truth faster
- Same sampler as used by modern raytracers, such as in
Blender - Less samples are required for a good result
- Since less samples are required,
-finalhas now been reduced to-extrasky 8by default (from 16)
- Added soft lights
- When
_light_radiuskeyvalue on a light is set, the light is treated as a sphere/disk - Allows for casting softer shadows
- Note that soft lights will take longer to compile than hard lights
- Added
-extrasoftparameter to control sample multiplier for soft lights- Defaults are 1, 0.25 on
-fast, 4 on-final
- Defaults are 1, 0.25 on
- Currently only supports light and light_spot
- When
- Added
-StaticPropSampleScale- Controls sample multiplier for prop vertex lighting (default is 1)
- Defaults to 4 with
-final, which will slightly increase compile times - However this will improve quality of prop lighting in areas starved of sunlight or bounced surfaces
- Added
-reflectivityscale - Added
-worldtextureshadows- Allows
$alphatestbrush textures to cast proper shadows like props - Requires
-textureshadows
- Allows
- Added
-translucentshadows- Similar to
-worldtextureshadowsbut for$translucentbrush textures - Requires
-textureshadowsand-worldtextureshadows
- Similar to
- Added
-forcetextureshadows- Forces texture shadows to be enabled on all props
- Added DXT3 format support for texture shadows
- Added support for
%alphatexture- Allows overriding texture used for texture shadows on geometry
- Added geometric edge pairing for brush entities
- This helps reduce seams where they touch world geometry or other entities
- Added
-nopairgeometricedgesoption to disable this behavior vrad_brush_pair_edgeskeyvalue can be used to disable this on a per-entity basis- Also added
-nopairedgesto disable edge pairing on the same entity
- Added Light Culling
- Significantly improves performance for open maps that use a lot of lights
- Greatly reduces lightmap filesize of the map when using named lights
- Comparison on an open map:
- 4 minutes 23 seconds -> 3 minutes 1 second
- File size: 62 MB -> 52 MB
-nolightcullcan be used to disable this if it causes problemsminlightcullintensitycan be used to adjust the intensity cutoff threshold- Default is 1 which is negligible levels of lighting
- Added experimental support for static props to shadow ambient cubes
- Disabled by default, use
-propambientto enable - Uses collision model of the static prop as the approximation
- Ambient cubes won't be generated inside solid static props
- Vertex lighting from the props will contribute to the ambient cubes
-StaticPropLightingdoes not need to be enabled- Note that this won't solve sunlight applying to entities shadowed by static props, as the engine ignores prop visiblity at runtime
- See this page for detailed info about this issue
- Disabled by default, use
- Added experimental support for named light_environment and light_directional
- Fixes static props having black lighting
- To use: you must "jail" the light entity by itself inside a nodraw cube in the void
- Not doing so will potentially lead to bad performance
- Named light environment still has engine bugs, mainly that props may have broken light after toggling the sunlight
- This can be workarounded by flipping the value of
r_radiosityin console - In
Garry's Mod, Lua can be used for this - In singleplayer games, you can issue a command with point_clientcommand or VScript
- Added support for Patch materials for loading texture shadows
- Added support for processing
Left 4 Dead 2,
Portal 2 and
Half-Life 2 (
) BSP formats
- Added support for processing
- Added
-patchlightmapsizeto set minimum lightmap size for patches (default is 16)- This controls how faces with lower lightmap scales get subdivided for bounced lighting
- Lower values will subdivide more, at the cost of increased compile time and memory usage
- This may sometimes solve issues with thin surfaces obstructed by geometry not receiving light
- Added
-choptexlights- Allows subdivision of faces that have texlights
- Can create more smoother-looking lights from faces but may take longer to compute
- Added
-fastradialfor using fast radiosity gathering like in-fastmode - Added support for
-LargeDispSampleRadius - Added
-dispsamplefactor- Controls radius of lighting influence multiplier for displacements. Default is 1
- Higher values such as 2.5 or 3 may fix black splotches on very large stretched displacements
- Added
-disppatchsamplefactor- Controls radius of bounced lighting influence multiplier for displacements. Default is 1
- Higher values may fix splotches of dark lighting on large, stretched displacements
-LargeDispSampleRadiusis the same as-disppatchsamplefactor 2.2
- Added
-indirectonlyto only bake indirect light - Added support for using decimals in lightmap scales
- Added support for reading static prop formats v7 to v14
- Added
-report_search_pathsto list current search paths for debugging - Added
-propdebugfor tracking down what props take a long time to compile - Significantly improved performance and memory usage of bounced lighting on faces with low lightmap scales
- Slightly improved displacement bounced lighting to be more granular
- Benefits thin/small displacements the most
- Added
-DisplacementLightingOldto use old calculations
- Improved vertex lighting for props
- Added
-StaticPropIndirectModeto use old behavior if desired
- Added
- Improved performance of static prop loading when using
-StaticPropPolys- This also fixes hangs on very large and sparse props
- Fixed maps with more than 13 million triangles taking a very, very long time to compile
- Fixed black seams appearing on displacements in
-fastmode - Fixed rays missing exact diagonal corner intersections
- Both of these bug exists in all other versions of VRAD
- Fixed prop lightmaps being dumped into wrong color space with
-dumppropmaps- Prop lightmaps are also now dumped into
sp_lightmapsdirectory of the game
- Prop lightmaps are also now dumped into
- Fixed prop lightmaps always using
fastlighting samples and ignoring-extrasky- As a result, prop lightmaps will take slightly longer to compile, but will look significantly better
- Fixed maps with radial vis (FarZ set in env_fog_controller) drawing 3D sky in 2Dsky-only areas
- Fixed light_environment
SunSpreadAnglenot using more samples under-final- Maps using a spread angle greather than 0 will take slightly longer to compile with
-extraskyas a result, but the result looks better compared to stock
- Maps using a spread angle greather than 0 will take slightly longer to compile with
- Fixed prop lightmaps causing very, very long compile times on models with invalid UVs
- Fixed
-OnlyStaticPropscrashing - Redundant vertex lighting is skipped for lightmapped props (saves compile time and file size)
.dx90.vtxdata is loaded for vertex lighting instead of.dx80.vtx- Broken vertex data for props will now be skipped over when compiling
- VPhysics is now an optional dependency (will compile successfully if its missing)
- Fixed bug where broken vertex data in props skipped vertex lighting for other props
- Fixed oversight where indirect lighting wasn't blended correctly with non-bump vs bump neighboring faces
- Fixed textureshadows defined in the .rad file not working if slashes were different
- Fixed rare crash related to surfaceprop parsing
- Fixed multiple light_environment or light_directional entities stomping over leaf sky flags
- Removed memory column from BSP statistics as its useless
- Named or styled lights are now sorted by brightness priority for faces
- Reduces occurence of bad lighting from overlapping named/styled lights
- Static prop lighting is no longer skipped on
-fastmode - Added
-scale,-ambient,-dlight,-sky,-notexscale,-coringdebug options - Unlimited texlight support in RAD files
- Comments in RAD files are now skipped
- Cleaned up formatting of some messages and warnings
Supported games
VRAD++ is currently available for all games on Team Fortress 2 branch, as well as Garry's Mod (64-bit only).
The older BSP format used by Source 2013 Singleplayer games is also supported, but the compilers need to be installed to a supported 64-bit game such as Source SDK Base 2013 - Multiplayer or Garry's Mod.
x64 in engine (bin) folder, then copy filesystem_stdio.dll, tier0.dll, vphysics.dll and vstdlib.dll from other games that have 64-bit support into it. drag and drop VBSP++ to the x64 folder you create and it should work as normalTodo: Guide on setting up Tools++ for Source 2013 Singleplayer.
External links
- Download from the official website (Tip: expand VRAD++ and scroll down to the bottom of the changelog)
- Download from the official GitHub repository (Tip: find the tools_plusplus.zip file in the Assets section of the latest release)
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||