This article's documentation is for anything that uses the Source engine. Click here for more information.

VRAD++

From Valve Developer Community
Jump to navigation Jump to search

English (en)Translate (Translate)

VBSP++VVIS++VRAD++BSPZIP++

Stub

This article or section is a stub. You can help by expanding it.

Developer(s)
Initial release
Jul 10, 2025
Stable release
Feb 3, 2026
Operating system
Windows
Type
Map compiler
Target engine(s)
Source
Distribution
Freeware

VRAD++ 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 -ldr or -hdr will 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 -ldr and -hdr separately
  • 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_shadows to 1 in 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
  • 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 texturename key (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' Source Map Tools Slammin / Counter-Strike: Global Offensive CS:GO (!)
    • Set -ambientocclusion or -ao to enable this
    • Customize with -aoradius, -aoscale, -aopropsamples, -aofacesamples
    • Samples are automatically adjusted for -fast and -final mode
    • 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 -aodebug to visualize ambient occlusion
  • 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 Blender
    • Less samples are required for a good result
    • Since less samples are required, -final has now been reduced to -extrasky 8 by default (from 16)
  • Added soft lights
    • When _light_radius keyvalue 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 -extrasoft parameter to control sample multiplier for soft lights
      • Defaults are 1, 0.25 on -fast, 4 on -final
    • Currently only supports light and light_spot
  • 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 $alphatest brush textures to cast proper shadows like props
    • Requires -textureshadows
  • Added -translucentshadows
    • Similar to -worldtextureshadows but for $translucent brush textures
    • Requires -textureshadows and -worldtextureshadows
  • 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 experimental support for static props to shadow ambient cubes
    • Disabled by default, use "-propambient" to 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
    • -StaticPropLighting does 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
  • 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_radiosity in console
    • In Garry's Mod 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 HL2 (SDK13 Singleplayer) BSP formats
  • Added -patchlightmapsize to 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 support for using decimals in lightmap scales
  • Added -report_search_paths to list current search paths for debugging
  • Added -propdebug for 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 -DisplacementLightingOld to use old calculations
  • Improved vertex lighting for props
    • Added -StaticPropIndirectMode to use old behavior if desired
  • Fixed maps with more than 13 million triangles taking a very, very long time to compile
  • 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_lightmaps directory of the game
  • Fixed prop lightmaps always using fast lighting 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 SunSpreadAngle not using more samples under -final
    • Maps using a spread angle greather than 0 will take slightly longer to compile with -extrasky as a result, but the result looks better compared to stock
  • Redundant vertex lighting is skipped for lightmapped props (saves compile time and file size)
  • .dx90.vtx data is loaded for vertex lighting instead of .dx80.vtx
  • Broken vertex data for props will now be skipped over when compiling
  • Fixed bug where broken vertex data in props skipped vertex lighting for other props
  • 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 -fast mode
  • Added -scale, -ambient, -dlight, -sky, -notexscale, -coring debug 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 Team Fortress 2 branch, as well as Garry's Mod 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 Source SDK Base 2013 - Multiplayer or Garry's Mod Garry's Mod.

Note.pngNote: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.
Todo: Guide on setting up Tools++ for Source 2013 Singleplayer.

External links

  • Download from the official website ( Tip.pngTip: expand VRAD++ and scroll down to the bottom of the changelog )
  • Download from the official GitHub repository ( Tip.pngTip: find the tools_plusplus.zip file in the Assets section of the latest release )