Download

Source 2 Viewer v19.1

A thumbnail grid for browsing files with live previews, support for more light types in maps, and faster rendering of large maps.

Thumbnail Grid View

The file explorer now supports a thumbnail grid view with live-rendered previews of models, materials, and textures. Toggle between list and grid layouts, and resize thumbnails with Ctrl+Mouse wheel or the slider. Thumbnails are rendered on a background thread using the full OpenGL pipeline.

Thumbnail Grid

Barn and Omni Light Support

Added rendering of barn (cone-shaped) and omni2 (point) lights. Barn lights support perspective and orthographic projection, cookie textures, soft edge falloff, and dynamic shadows.

Before After
No barn lights With barn lights

GPU-Driven Culling

Scene rendering now uses a GPU-driven culling pipeline. A compute shader tests every meshlet AABB against the camera frustum, a hierarchical depth pyramid
(occlusion culling), and a screen-size threshold. This reduces draw overhead in large scenes. Meshlet level culling is available on most Source 2 maps built 2023 and forward.

S2VMeshletCulling

World visiblity (vvis)

Added support for parsing .vvis files and visualizing the clusters.

World visibility debug

AnimGraph 2 Clip Playback

AG2 animation clips can now be played back directly in the model viewer. Clips are loaded from referenced .vnmclip files, organized by folder name alongside AG1 animations.

Improved AG1 Decompilation

Decompilation of AnimGraph 1 state machines now covers 35+ node types. State machine condition scripts, virtual parameters, and proper node connection mapping are also supported.

GUI

  • When opening another file from disk, it will open in an exiting S2V instance
  • Added thumbnail previews to package explorer
  • Added Ctrl+Mouse wheel to change grid size, persisted across sessions
  • Added SVG save button, saves at current zoom level
  • Added bitmap save button for image resources
  • Added controls grouping in renderer sidebar (Render, Model, Camera, Debug sections)
  • Added detailed per-pass render timing viewer option
  • Added searching for tools asset info data in package viewer
  • Added syntax highlighting for TypeScript files, XML highlighting for vsvg
  • Added mouse sensitivity option that matches source engine behavior
  • Added particle operator list display in the particle viewer
  • Added meshlet, skinning, and VBIB VRAM stats to model viewer
  • Added Discord link to the About window
  • Improved syntax highlighting KeyValues based on actual tokens instead of regexes
  • Improved UV tiling toggle smoothness in the texture viewer
  • Enabled automatic update checks by default
  • Changed model viewer to show tools materials by default
  • Changed shadow resolution option to a shadow quality option
  • Changed to apply VSync and FOV settings immediately when switching to GL tab
  • Changed to allow orbiting in walk mode
  • Changed to start scanning game directories in parallel before main window loads
  • Changed file explorer to persist across tab switches instead of being recreated
  • Changed input handling to accumulate keys so they are not lost at low frame rates
  • Fixed shadow setting not being saved
  • Fixed preview resource being disposed too early
  • Fixed UI and event memory leaks
  • Fixed animgraph viewer crashes
  • Fixed texture viewer stealing focus and not respecting max texture size
  • Fixed image viewer crash when opening Gray8 PNG files
  • Fixed image viewer alpha premultiplication by forcing the alpha codec to unpremultiplied
  • Known issues:
    • Application hangs when capturing screenshot with Ctrl+C. (Fixed in dev build)

Renderer

  • Added GPU-driven frustum, occlusion, and size culling via compute shaders with multidraw indirect
  • Added barn (cone) and omni2 (point) light rendering with shadow atlas
  • Added compute shader MSAA and depth resolve (replacing blit operations)
  • Skipped outline rendering overhead when nothing is selected
  • Added "Tool Entities" world layer for triggers, nav meshes, etc.
  • Added world layer for entities disabled by default (e.g. CS2 Wingman spawns)
  • Added support for particle snapshots
  • Added particle light rendering using omni2 lights
  • Added more particle operators and initializers, with child systems inheriting control points from parent
  • Added RGBM6 texture decoding to the GPU decoder and texture viewer
  • Added rendering of backfaces into shadow maps
  • Added world visibility cluster visualization
  • Separated vr_standard into its own shader, distinct from complex
  • Implemented csgo_simple_3layer_parallax shader with parallax-mapped triple layer blending
  • Standardized diffuse lobe formula to match Counter-Strike 2 (pure Lambert)
  • Improved fog entity to only copy rotation from env_sky
  • Improved rendering of SteamVR maps (foliage, cubemaps, sun shadows in v1 lightmaps)
  • Improved particle model preview
  • Changed world loader methods to public for granular loading control
  • Fixed IBL color space when LDR based compression is used.
  • Added ability for materials to customize texture address mode (UV Wrap, Repeat)
  • Fixed alpha test to properly utilize alpha-to-coverage
  • Fixed YCoCg skybox rendering
  • Fixed csgo_environment blend color correction and detail overlay
  • Fixed csgo_environment metalness default value
  • Fixed set by feature not handling (not) equal constraint types in VFX evaluation
  • Fixed missing scene object skins
  • Fixed crash when crouching with no physics present
  • Fixed AG2 additive animations not displaying anything
  • Fixed swapped axis in text renderer

CLI

  • Added nav mesh file export to glTF
  • Removed [archive index] log line when dumping

Library

BREAKING: KV3TextSerializer, KeyValues3, KVObject, KVValue have been removed from this library.
KV3 parsing is now powered by ValveKeyValue.

BREAKING: Entity now extends KVObject from ValveKeyValue, and Entity.GetPropertyUnchecked has been removed.

  • Improved AnimGraph 1 node decompilations
  • Added AnimGraph 2 clip playback on models
  • Added world visibility (vvis) support
  • Added full equirectangular projection for decompiled cubemap textures
  • Added export of NmSkeletonRefs, Animgraph2Refs, and CitadelEventIDToBodyGroupMapping_t
  • Added vpcf65 to KV3 ID lookup
  • Added enabled combo comment to SPIR-V reflection output
  • Added shader source files to parsed VFX data
  • Added new ObjectTypeFlags values
  • Added new AnimGraph node fields
  • Added default value parameter to KVObject property getters
  • Named all VfxEval opcodes
  • Changed Texture.Reflectivity from float[] to Vector4
  • Changed LineSceneNode to public
  • Changed MurmurHash2.Hash to be case-insensitive, with HashCaseSensitive added for the previous behavior
  • Added MurmurHash2.Hash version that accepts a single uint
  • Added normal and additive blending methods to FrameBone (CTransform in Source2)
  • Improved shader combo constraint solver
  • Fixed UV mapping on decals in glTF exports
  • Fixed GetUnsignedIntegerProperty on negative integers (e.g. SteamVR Home m_nDefaultMeshGroupMask)

View commits since 18.0 | View milestone

Thanks to