Download

Source 2 Viewer v20.0

Overdraw heatmaps, 3D sound in the map and model viewers, rain and puddles on CS2 maps, and a graph view of how map entities are connected.

Overdraw Debug View

Renders a heatmap of triangle overdraw using the same shader as the Source2 tools, accurate to the game and can be used for optimising maps.

image

3D Sound System

Map and model viewers now play sound. vsndevts events are mixed on their own thread with distance volume curves, stereo panning and per-mix-group levels.

Performance Stats

New "Debug Performance" option showing general renderer stats, allocations and timings.

This (especially stats) can be used as an analogue for real source2 rendering to some degree in order to help optimise maps, things like total drawcalls, materials, etc are accurate.

image

Puddles and Rain

CS2 environment materials render their wet weather state, with puddles, a wetness sheen, scrolling wave normals and procedural rain splashes.

Entity I/O Graph

Entity lumps and maps now have an entity I/O graph tab, drawing every entity as a node with its Hammer editor icon and every connection as a labelled wire. Nodes link with the 3D viewer.

image

Pulse and Animation Graph Viewers

Pulse graphs are rebuilt from their compiled bytecode back into readable node graphs, and AnimGraph 1 graphs draw alongside them, both compiled and straight out of the editor. Every graph viewer shares one canvas with panning, zooming, search, filtering, island focus and image export.

image image

CS2 Bomb Blast Visualization

Mirrors CS2's Baked bomb damage debug view, drawn as animated arrows pointing along the blast direction, coloured from green where a blast is lethal through to red where it is harmless.

Untriangulated Hammer Meshes

Meshes decompiled into Hammer meshes are no longer a wall of triangles: adjacent triangles sharing a material are merged back into quads.

image

GUI

  • Added an entity I/O graph tab to entity lumps and maps
  • Added point_template spawn wires and two-way navigation with the map viewer
  • Added a pulse graph tab rebuilt from compiled Pulse bytecode
  • Added pulse loop nodes, timeline cells and variable hubs
  • Added an AnimGraph 1 graph tab for compiled and uncompiled animation graphs
  • Added a shared graph canvas with a zoom-faded dot grid, Ctrl+0 to fit, and wire gutters between columns
  • Added a graph sidebar with search, filters, a colour legend and image export
  • Added a CS2 bomb blast visualization
  • Added a bomb damage viewer for baked_bomb_damage.vdata_c files
  • Added a render statistics overlay for triangles, draw calls and lights
  • Added a particle snapshot (vsnap) viewer
  • Added a viewer for uncompiled KV3 text files
  • Added back and forward navigation to the package viewer
  • Added a "Level of Detail" dropdown to the model viewer
  • Added an Inputs tab to the entity info panel
  • Added a "Reconstructed phonemes" tab to sounds with lip-sync data
  • Added a plaintext phoneme .txt dump when extracting those sounds
  • Added an "Export image" dialog for SVG-backed images
  • Added a volume slider and per-tab muting
  • Added a Play Endcap button and detail level selector to the particle viewer
  • Improved the AnimGraph 2 viewer with expandable state machines
  • Model viewer
    • Added an "Additive (over bind pose)" checkbox
    • Improved "Show Root Motion" to walk the model through the loop point
  • File previews
    • Added a loading panel with the file icon, name and a progress bar
    • Changed previews to collapse the side panel when too narrow
  • Enabled barn lights by default
  • Changed the map viewer to open at a player spawn
  • Changed camera FOV to horizontal degrees at 4:3 defaulting to 90, and added "Viewmodel FOV"
  • Changed entity focus to avoid camera spots inside geometry
  • Changed "Show Render Timings" into a "Debug Performance" selector, cycled with Tab
  • Changed map loading to warm up shaders up front, removing fly-around stutter
  • Changed the entity properties grid to open resource paths on double click
  • Fixed concurrent OpenGL window creation crashing viewers and thumbnails
  • Fixed the console tab dropping lines when several threads logged at once
  • Fixed extracting a file over a larger one leaving the old tail appended
  • Fixed files added to a VPK being listed twice
  • Fixed models whose LOD0 is empty rendering nothing
  • Fixed the opening fly-in skipping straight to its end position
  • Fixed the FPS counter reading far too high after opening a scene
  • Fixed playback of some MPEG 2.5 MP3 files

Renderer

  • Added a 3D sound system to the map and model viewers:
    • Map ambience from env_soundscape, snd_soundscape, point_soundevent and snd_event_point
    • Animation sound events, following the named attachment
    • Player footstep, jump, landing, gear and fall damage sounds, plus CS2 viewmodel attacks
    • MP3 gapless trimming, 8, 16, 24 and 32-bit PCM, and MS ADPCM
  • Added a simulated entity system running map entities on a fixed 64 tick
  • Added 2.5D tiled light culling, with LightTiles, EnvmapTiles and Subgroups debug modes
  • Added a QuadOverdraw debug render mode painting overdraw as a heat map
  • Added dedicated shaders for Deadlock's pbr.vfx, environment_blend.vfx and citadel_overlay.vfx materials
  • Added wet weather rendering for CS2 environment materials
  • Added subsurface scattering, with per-vertex or computed curvature and per-channel normal softness
  • Added a second specular lobe for materials that author one
  • Added a second sun shadow cascade for sharper shadows near the camera
  • Added adaptive shadow map resolution for dynamic lights
  • Added the legacy light_omni, light_spot and light_ortho entities used by Half-Life: Alyx and SteamVR Home
  • Added real time light_rect area lights
  • Added local post processing volumes, crossfading over an entity's fadetime
  • Added rendering of path_particle_rope cables
  • Added rendering of the effects a model references in its particles_list
  • Added the env_particle_glow entity and particle sound events through C_OP_RenderSound
  • Added a dedicated first-person viewmodel pass, fixing the CS2 weapon clipping into geometry
  • Added a Debug Physics Traces checkbox drawing hulls, swept boxes and contact points
  • Added an opaque refraction pass, so refractive glass draws after the framebuffer grab
  • Added root motion for animation graph clips (vnmclip)
  • Added a Template Entities layer grouping point_template children with their template
  • Added engine-matching wildcard targetname lookups
  • Reworked the particle sprite and trail shaders around the spritecard's compositing model:
    • All fifteen SpriteCardTextureChannel_t channel masks and all seven blend modes in the sprite shader
    • Up to five texture layers, each with its own sprite sheet, plus gradient layers
    • Outlines, HSV shifting, desaturation, fog, and distance and edge-on fades
  • Improved particle trails to stretch along the direction of motion, taper from head to tail, and batch into one draw call
  • Implemented the particle endcap phase, with its eight operators and replaying endcap children
  • Implemented child particle systems honouring start delay, endcap-only and detail tier flags
  • Implemented 29 more particle initializers and operators, covering sequential paths, noise, culling, distance constraints and control point remapping
  • Implemented curved particle paths with the authored midpoint bulge
  • Implemented the F_USE_NEW_BLENDING height band blend for CS2 csgo_environment_blend materials
  • Implemented the normal morph bundle, so lighting on morphed faces follows the deformation
  • Improved nine particle functions to read fields they were ignoring
  • Improved specular shading with a multi-scattering environment BRDF
  • Rewrote walk mode player movement to be framerate independent:
    • Multi-plane collision clipping, stair steps, jump stamina and stuck recovery
    • Surfing and strafe jumping, switched on for bhop, surf, kz and dr maps
    • Brush entity collision, and walking on a model's own physics in the model viewer
    • Esc releases the mouse, and a second press leaves walk mode
  • Changed particle simulation to the engine's timing, instead of banking time and advancing at most one 1/120s step per frame
  • Changed particle randomness to the engine's seeded shared table
  • Changed the particle starting radius to the engine default of 5, from 1
  • Changed the renderer to bind vertex attributes to fixed canonical slots
  • Changed GPU culling to default off on Intel integrated graphics
  • Changed camera dragging to hide and pin the cursor instead of wrapping it at the viewport edges
  • Raised the barn light budget from 128 to 320
  • Removed the legacy CPU occlusion culling path in favour of the GPU depth pyramid
  • Fixed maps rendering far darker than in game
  • Fixed the pre-simulation fast-forward not re-running on restart, so a settled effect comes back relaxed
  • Fixed particle functions reading the wrong schema keys or ignoring authored fields
  • Fixed particle bounding boxes culling effects early or keeping them alive off screen
  • Fixed particles spawned in a sphere bunching toward its centre
  • Fixed untextured particle renderers drawing the error checkerboard
  • Fixed material textures landing on the wrong shader input
  • Fixed samplers left on texture 0 reading an incomplete texture
  • Fixed Multiply falling through to the additive blend function, and gave ModThenAdd its own
  • Fixed NaN pixels from pow(0, 0) in fog, vignette and levels adjustment
  • Fixed the MSAA resolve turning NaN samples into white that blew out bloom
  • Fixed directional lightmaps not normalizing their decoded light direction, and softened it on flat surfaces
  • Fixed cloth materials losing energy in both the direct and indirect lobes
  • Fixed lights pointing at the mirror image of their pitch
  • Fixed a vertical light_environment producing NaN sun shadow matrices
  • Fixed env_sky ignoring its brightnessscale
  • Fixed washed out RGBM light probes and cubemaps in SteamVR Home
  • Fixed unbound bone transforms making models render wrong on Intel drivers
  • Fixed aggregate fragments drawn with another fragment's transform
  • Fixed out-of-range tints such as a renderamt above 255 wrapping around
  • Fixed shadow, atlas and histogram buffers leaking when a tab was closed
  • Fixed animation graph clips (vnmclip) playing back too fast
  • Fixed procedural cloth bones staying at bind pose in the skeleton overlay
  • Fixed flex values and root motion leaking into the next animation
  • Fixed invisible playerclip hulls blocking ray traces
  • Fixed loading an asset with no physics parts crashing
  • Fixed the model viewer crashing when toggling mesh groups

CLI

  • Added a --game argument pointing at a gameinfo.gi file, so assets outside the game folder resolve
  • Improved the glTF animation filter to match by leaf name and report entries that matched nothing
  • Changed --output to write to the exact filename given for a single --vpk_filepath match
  • Fixed textures decompiled from a VPK not writing their image files
  • Fixed glTF exports from nested VPKs colliding at the output root
  • Fixed --stats on VPKs skipping .vcs, .nav, .vfe, .vfont and .uifont entries
  • Fixed --vpk_list silently extracting when combined with --output, which is now an error

Library

  • Added root motion to glTF animation exports, so a walk cycle travels instead of running in place
  • Added more of a model to glTF and DMX exports:
    • Morph target weight animation, so facial and flex animation plays
    • Additive animations as delta tracks, or composed with --gltf_compose_additive
    • The clips a model's animation graphs reference, plus secondary skeletons
    • Material groups (skins), local hierarchy overrides, and vnmclip float curves
  • Added writing of binary KV3 version 5, with LZ4 and Zstandard compression
  • Added a public entity simulation API in ValveResourceFormat.Renderer.Entities
  • Added typed entity I/O with EntityLump.Connection and EntityIOTargetResolver
  • Added untriangulated Hammer meshes to decompiled maps
  • Added animation graph clips to the animation API: AnimationGraphLoader, AnimGraphModelInfo and SkeletonRetargeter
  • Added typed vdata parsing in the new ValveResourceFormat.ResourceTypes.GenericData namespace
  • Added nav mesh data previously skipped as unknown bytes
  • Added a particle API for building systems without a resource, including PathParticleRope
  • Added eight members to ParticleField and the ParticleDetailLevel enum
  • Added ModelLodInfo describing a model's LOD levels and switch distances
  • Added the navmeshcustomdata1, modeldoc41 and vpcf66 KV3 format ids
  • Added the MSLT meshlet block, Texture.RadianceCoefficients and the remaining texture metadata
  • Added ShaderRegistry for mounting your own shader directories
  • Added support for version 71 compiled shaders
  • Implemented writing Panorama blocks back out
  • Improved NTRO parsing, printing enum fields as their enumerator name instead of a raw number
  • Improved decompiled animation graph layout to match the graph viewers
  • Improved tools asset info parsing
  • Improved decompiled shader output:
    • Dynamic expressions resolve more variable hashes to their real names
    • Eight more parameter UI types are named
  • Changed glTF export to bake the Source-to-glTF conversion into rest poses, vertices and keyframes instead of a root node
  • Changed map decompilation to fold duplicate point_template children into a single entity
  • Fixed decompiled angles collapsing when an object points straight up or down
  • Fixed misaligned lightmaps in glTF map exports
  • Fixed baked per-vertex lighting written into the glTF vertex colour attribute
  • Fixed the light_environment sun pointing the wrong way in glTF exports
  • Fixed extracted vnmclip clips coming out rotated
  • Fixed exported DMX files being rejected by Blender Source Tools
  • Fixed animations of different models overwriting each other on export
  • Fixed procedural cloth bones duplicated on model round-trips
  • Fixed models with more than 32 mesh groups
  • Fixed Hammer meshes ignoring their scene object transform
  • Fixed signed Integer64 entity properties printing as huge positive numbers
  • Fixed local addons not resolving their loose files or the other addons they depend on
  • Fixed a crash extracting an HDR cubemap that has no material unpack info
  • Fixed sprite sheet rectangles losing their last row and column
  • Fixed sounds carrying emphasis data losing all of their lip-sync phonemes
  • Fixed the clamp(x, 0, 1) to saturate(x) rewrite almost never firing in decompiled shader source
  • Fixed compiled shader texture channel mappings and dynamic combo ids
  • Public API moved around a lot this release:
    • Animation split into SequenceAnimation and ClipAnimation, with playback through one AnimationPlayer per skeleton
    • Camera speaks Source QAngles, and its pitch now measures positive downwards
    • ValveResourceFormat.Utils.GraphLayout was removed outright, with no public replacement
    • The EntityTransformHelper methods were renamed after what they return
    • Renderer.EnableBarnLights replaces the ViewConstants.ExperimentalLightsEnabled field
    • Formats use the engine's ImageFormat enum, removing Framebuffer.Stencil and the attachment format records
    • Vertex buffers share a VertexInputLayout API, removing DrawCall.VertexArrayObject
    • RenderMaterial owns MaterialInputs<T>, removing DepthOnlyProgram and collapsing Shader.SetUniform1-4
    • The legacy CPU occlusion and shadow binning APIs were removed, and IFileLoader now requires GetFileStream
    • A long tail of renames across textures, nav meshes, panorama, shaders and tools asset info

View commits since 19.2 | View milestone

Thanks to