Source 2 Viewer v21.1
Playable maps with working doors, buttons and triggers, in-app updates, animation graph playback in the model viewer, and cloth decompilation.
Cloth Decompiling
Decompiled models now keep their cloth. It is rebuilt from the compiled cloth data (FeModel) and written back into the vmdl, so it can be edited and recompiled.
- Covers nodes, springs, chains, jiggle bones, collision shapes and proxy sheets
- Proxy sheets are written out as their own DMX files, which the
vmdlreferences --skip_softbody_reconstructiondecompiles a model without its cloth
Cloth decompilation is experimental. Most cloth recompiles to the same simulation, but not all of it does, so bug reports and contributions are welcome.
Physics and Collision Views
Physics and collision are now much easier to read.
- Shapes draw see-through with edges
- Triggers and tools materials are textured with their class or material name
- A new Collision tree groups shapes by their interact-as tags
- Auto Vis Groups hides tool brushes the same way Hammer does
In-App Updates
The viewer can now download and install its own updates from the About dialog, on a stable or dev channel. Each download is checked against its build provenance before installing.
Entity System and Playable Maps
Every map entity now spawns and runs through the entity system.
- Play, Pause and Stop controls, and Stop resets the map so Play starts it fresh
- Doors, buttons, triggers, trains and logic entities behave as they do in CS2
prop_dynamicresponds to its inputs and outputs- Lights, fog, sky, post-processing and sounds run as entities, and many react to inputs
- Entity connections can be fired by hand from the entity panel
Animation Graph 2 Playback
Models now play their AnimGraph 2 (vnmgraph) graphs in the viewer, through a C# port of the Esoterica graph runtime that Source 2's newer animation graphs are based on.
- State machines, blend spaces, IK, warping and root motion all run
- The model viewer can edit graph parameters, drag gizmos and single-step
- The player body in walk mode is animated by the same graphs
Particle System Rewrite
Particle effects now look and behave much closer to how they do in game. The simulation was rebuilt to follow the engine, and more than 100 missing particle functions were added.
- Force generators, constraints, expressions and snapshots (
vsnap) - Particles collide with the world and spawn on animated models
- Particles draw as models, projected decals, merging blobs, light beams and branching lightning
- Effects from older games are upgraded through the engine's
vpcfversion chain up to version 66, so they play with the newest engine version
Model Decompiling
Decompiled models keep much more of the original model:
- IK chains and the legacy IK control rig
- Morph targets and the flex rules that drive facial animation
- Every physics joint type, ragdoll joints and body markup
- Attachment camera previews
Editable Hammer Paths
Ropes, cables and path entities in decompiled maps now come back as editable Hammer paths, with their nodes, tangents, closed loops and cable settings recovered.
VMix Graph Decompiling
Audio mix graphs (vmix) and graph-based vsnd sounds now decompile back to .vmix files for vmixtool.
VPK Editing
VPKs can now be created and edited in the viewer.
- Add, rename and remove files and folders
- Replace, skip or merge when something already exists
- Save as one file or split into chunk files, with unsaved changes tracked
- VPKs inside other VPKs open at any depth, including through
vpk:links - The CLI can pack a folder with
--vpk_create
Package Content Search
Package search now looks inside compiled files, so you can find a particle operator or material parameter anywhere in a VPK.
- Filter by match case, whole word, regex, folder and extension
- Cancelling a search keeps the matches found so far
- The CLI has the same search through
--vpk_search
Documentation
New documentation pages:
- Where Counter-Strike 2, Deadlock, Dota 2 and Half-Life: Alyx keep their files, and how to find a file
- Posing characters in Blender, taking screenshots and exporting images
- What each format supports and what survives a decompile
- Game search paths, reporting issues, privacy and the MCP automation server
The VPK guide now also covers creating and editing VPKs and recovering deleted files.
Half-Life: Alyx and VR Games
Half-Life: Alyx, SteamVR Home and Aperture Robot Repair now have their own lighting, shadows, fog, tonemapping and material shaders.
- Baked vertex lighting, mixed shadows and light cookies
vr_hairand the parallaxvr_eyeball- Citizens wear their configured outfits
Volumetric Fog
Deadlock and Half-Life: Alyx maps now show their volumetric fog, with fog volumes, height falloff and shadowed lights shining through it.
Real-Time Sun Shadows
Lightmapped maps now cast real-time sun shadows from static geometry on top of baked lighting, at Medium shadow quality and above. Very High quality adds a third shadow cascade.
Decals and Impact Effects
Shooting or knifing a surface now leaves a decal.
- Impact particles, sounds and water splashes
- Maps draw their
info_overlayandenv_decaldecals
Screen Space Ambient Occlusion
Deadlock materials now get ambient occlusion (XeGTAO).
Map Clutter
Small detail props stored as clutter now show up in maps. They draw as instanced models, and the GPU culls them and thins them out by screen size.
Entity Helpers
Selected entities now draw the same helpers as Hammer, generated from each game's FGD files.
- Volumes, radius spheres and direction arrows
- Light cones and falloff
- Lines to their targets
- Selection bounds with their edge lengths
Model Controls
The model viewer gained more controls:
- Body group dropdowns
- Flex controller and pose parameter sliders
- An attachment list, drawn in the scene
- Simulated jiggle bones
Deadlock Navigation Views
Deadlock's navigation space and flow map files can now be viewed as map viewer layers, showing blocks, transitions, grid cells and the flow clusters of each hull. Layers use the game's hull preset names.
Light Probe and Cubemap Debug Views
Two new debug views help track down why a surface is lit the way it is: one shows the sample grids of light probe volumes, the other colours reflections by the cubemap they came from.
Sprite Sheet Animation
Sprite sheets now animate in the texture viewer.
- Pick a sequence, with autoplay, loop and speed controls
- Show the full sheet, outlines or the cropped frame
- Extracting a sheet also recovers its sequence names, loop modes and original bounds
Per-Game Shaders
The renderer now has one shader per game shader, in per-game folders. Materials, bloom, tonemapping, fog and lighting follow each game instead of a shared approximation.
- NPR hero lighting in Deadlock
- Global light in Dota 2
- Weapon stickers and bottle liquids in CS2
- Environment map and light probe volume limits raised to 320
- Separate cubemaps and probes are packed into atlases at load
- Light probe volumes are looked up and blended per pixel
Scenes and Spawn Groups
- Rendering was split into scene views, and sun cascades and barn light shadows draw as their own views
- Skies, prefabs and stages load as spawn groups, and the 3D skybox draws through its own camera
- The octree was replaced with flat static and dynamic node sets
Particle Simulation
The particle simulation was rewritten to store particles as structure of arrays. It moved from the renderer into the library, can run without a graphics backend, and steps a scene's particle systems across the thread pool.
Loading and Memory
- Search paths and VPKs mount in the engine's order
- Resource blocks can parse on first access, so files only pay for what they use
- Material and particle textures stream in the background, smallest mip first
- CPU vertex buffers and unused KV3 data are released
- Hidden tabs and a minimized window give back texture memory and render targets
Performance
- Maps skip what can't be seen, using PVS and
info_visibility_boxculling - Aggregate props switch by LOD, and instanced ones use GPU-driven indirect draws
- The depth prepass is on by default
- Physics traces run up to 1.58x faster
GUI
- Particle viewer
- Added Normal, Normal + Endcap and Endcap Only playback modes, a Loop checkbox and a Pause button
- Added a "Collide With Floor" checkbox
- Added child effect links to the function list
- Map viewer
- Added Play, Pause and Stop controls
- Added Fire buttons to entity inputs and outputs
- Added a References tab to the entity info panel
- Added an "Auto Vis Groups" tree for hiding tool brush groups
- Added a "Collision" tree, also in the model viewer, replacing the "Physics Groups" list
- Added "Opaque Collision", "PVS Culling" and "Visibility Boxes" checkboxes
- Added collision details, physics solid type, mass and joint count to the details window
- Added navigation space and flow map layers for Deadlock maps
- The Show Tool Materials checkbox is now a Show Tools toggle that turns off while playing
- World layers are now a checkable tree nested by layer name
- Walk mode now starts playing the map when entered
- Following an entity name now selects every matching entity including wildcards
- Entity list icons now use the
iconspritehelper of each class - Moved the render mode dropdown above the viewport
- Removed the "Show Static Octree" and "Show Dynamic Octree" options
- Fixed layer toggles overriding objects hidden with Delete, and added U to show them again
- Fixed viewers staying paused after leaving fullscreen or the entity info window
- Model viewer
- Added body group dropdowns, and flex controller and pose parameter sliders
- Added an attachment list and visualization
- Added animation graph controls with parameter editors and gizmos
- Animation list now hides hidden sequences
- VPK and package viewer
- Added creating and editing VPKs
- Added Replace and Skip prompts for existing files, and a merge prompt for folders
- Added saving VPKs split into chunk files
- Added a warning before editing a signed VPK
- Added searching decompressed compiled files, with Match case, Whole word and Regex options
- Added Only in folder and Extension filters, and a Search in folder context menu entry
- Added opening, searching and copying
vpk:links to VPKs nested in other VPKs
- Updates
- Added downloading and installing updates from the About dialog
- Added stable and dev update channels
- Added a Restart to update button and highlighted the Update Available badge
- Added build provenance verification for downloaded updates
- Fixed the update check offering an older release to a newer build
- Texture viewer
- Added sprite sheet animation controls
- Particle textures now open with the alpha channel shown
- Fixed saved and copied images blending the viewer background into transparent pixels
- Material viewer
- Added a cable preview for
cables.vfxmaterials - Improved the sidebar with aligned rows and ranged sliders
- Parameter list now hides renderer-only parameters the shader does not declare
- Added a cable preview for
- Graph viewers
- Added more AnimGraph 2 node types
- Added entity I/O connection parameter maps to the I/O graph
- Improved graph layout with aligned cards and routed wires
- Improved the pulse graph tab to cover every compiled instruction
- Graph tabs now load in the background
- Fixed duplicate nodes in the entity I/O graph
- Export and progress
- Added elapsed time and estimated time left to the progress dialog title
- Replaced the export log dialog with a progress bar showing the current file
- Progress dialog now stays open and shows the total time and failure count
- Export failures now show a dialog with the first failed file
- Fixed GUI export skipping nested additional files
- Errors and logging
- Added the file path and parent file chain to error messages
- Added Check for updates and Report buttons to error dialogs
- Errors for files in newer formats now say the format may be unsupported
- Paths in tooltips, errors and logs now use
vpk:links and Steam-relative paths
- Added
steam:paths relative to an installed Steam app - Added sound metadata to the sound viewer tab
- Added duration and sound columns to the choreo scene list
- Added loading phase text under the file name
- Added "Close all other tabs" and Copy URL to the tab context menu
- Added a taskbar icon badge showing the game of the selected package
- Added a Discord button to the title bar
- Added drag and drop of relative paths and of paths as text
- Added copying the selected reference path with Ctrl+C
- Added graph viewer and audio player shortcuts to the bottom bar
- Added file icons for 20 more extensions
- Added
--mcpto start an MCP automation server in Debug builds - Improved load times
- Enabled raw mouse input for mouse look
- Repeated resource blocks now open in a single tab listed by embedded mesh name
- Scene viewer now uses the default fullscreen gamma of 2.2
- KeyValues blocks over 64 MiB now offer a Save as text button
- Audio previews now play through WASAPI
- Texture and graph viewers now stop presenting frames when nothing changed
- Hidden tabs and the minimized window now release texture memory and render targets
- Increased the default maximum texture size from 1024 to 10240
- Fixed settings being overwritten with defaults when the file could not be read
- Fixed closed tabs staying in memory
- Fixed map loading continuing in the background after closing its tab
- Fixed a crash when closing a tab while its file was still loading
- Fixed races in the render loop, package previews, tab disposal and shader loading
- Fixed reloading a file that was opened from a package
- Fixed object picking reading the row above the cursor
- Fixed multiline tab rows jumping out of order when selecting a tab
- Fixed windows minimized while maximized restoring to normal size
- Fixed the saved camera list not remembering the selected camera
- Fixed sounds not starting at the beginning when opened
- Fixed group box titles not rendering under Wine
Renderer
- Particles
- Added particles drawn as models
- Added particles drawn as projected decals
- Added particles drawn as a merging metaball surface
- Added deferred particle lights and light beams
- Added particle ropes drawn as splined ribbons
- Added screen-space particle effects
- Added branching lightning for particles
- Added upgrading every older
vpcfformat on load - Added spherical harmonics, depth and illumination gradient spritecard textures
- Added previewing unset control points at the particle editor defaults
- Added scene lighting to sprites, trails and ropes from light probes, the sun and barn lights
- Added collision with scene geometry and placing particles on the ground
- Added particle events that child systems emit from
- Added an effects bloom pass for bloom-only particles
- Added ripples, silt and foam on CS2 fancy water
- Added refraction and per-particle alpha test to spritecards
- Added depth feathering, motion vector sheet blending and distance alpha edge softness to sprites
- Added barn and capsule omni2 particle lights
- Added control points placed at entities named by
cpointkeys, plusdata_cpandtint_cp - Implemented the wind, plane and vortex force generators, and box, self and path constraints
- Implemented model, hitbox, bone and skinned snapshot functions, and scalar and vector expressions
- Implemented 47 more operators, 23 initializers, 18 pre-emission operators and 13 transform input functions
- Improved particle cables with Catmull-Rom curves, domed end caps and the cable shader
- Improved trails to composite every texture layer
- Improved sheet frames, cropping, flipping and view angle fades
- Improved emitters, restart and endcap handling, pre-simulation and time steps
- Particle culling and fading now use the root system's distances
- Particle systems now stop simulating when not drawn or past
m_flMaxDrawDistance - Scene particle systems now simulate on multiple threads
- Effects now play the same on every load
- Sprites and trails now draw as instanced quads sorted back to front
- Raised the particle limit from 5000 to 20000, and 100000 for GPU systems
- Fixed distortion layers drawing their texture as colour
- Fixed particle rotations using the wrong Euler angle order
- Fixed default values of 11 operators and initializers
- Fixed particles spawned mid-frame starting from a moving control point's end position
- Fixed particle sounds playing on after their particle died
- Fixed particle system bounds ignoring trail length
- Fixed particle cables and ropes not being pickable or outlined
- Map and entity system
- Added spawning of every map entity through the entity system
- Added entity helpers and selection bounds drawn over the final image
- Added
func_tracktrainandpath_tracktrains that carry the player - Added
func_breakable,func_brush,func_physical_buttonandfunc_combine_barrier - Added
trigger_once,trigger_multiple,trigger_lookandpoint_teleport - Added
logic_auto,logic_case,logic_relay,logic_timer,logic_compareandlogic_branch - Added
math_counter,ambient_genericandenv_explosion - Added
prop_dynamicinputs and outputs - Added move parent following for entity system entities
- Added loading
point_prefabandinfo_spawngroup_load_unloadstages as spawn groups - Added
point_templateruntime spawning withForceSpawn - Added
sky_camera_volumeskies with optional shared sun shadows - Added Panorama world panels as rectangles facing the player
- Added projected decals for bullet and knife impacts, and
info_overlaydecals - Added map clutter, material overrides and vertex stream overrides on placed models
- Added trigger volumes textured with their class name, and labelled tools materials
- Added doors, buttons and
func_movelinearwith locking and double doors - The 3D skybox now draws with its own camera, fog and lighting
- Fixed intact
func_shatterglasspanes drawing as broken glass - Fixed hitboxes and attachments on models using external meshes
- Fixed hitboxes drawing at the model origin
- Walk mode
- Added ladder climbing
- Added pressing buttons and doors with E, and riding moving platforms
- Added CS2 recoil patterns, bullet tracers, impact sounds and water splashes
- Added a crosshair
- Movement now uses fixed 64-tick steps
- Footsteps, takeoff and landing sounds now follow the surface underfoot
- Crouching now uses Counter-Strike duck speed, spam penalty and unduck clearance
- The player body now plays the model's animation graph with a full-body shadow
- The knife now uses CS2 timing, sounds and range
- Half-Life: Alyx, SteamVR Home and Aperture Robot Repair now use their own player hulls
- Removed ground pre-strafe
- Fixed the player getting stuck stepping along walls
- Fixed box overlap tests hitting just outside thin convex hulls
- Fixed older collision tagged
CONTENTS_SOLIDbeing passable - Fixed the camera moving along the view when leaving walk mode
- Animation and models
- Added AnimGraph 2 (
vnmgraph) playback - Added CS2 player weapon aiming and hand placement graph nodes
- Added sequence auto layers, pose parameter blends and flex morph masks in the mixer
- Added all eleven bone constraint types
- Added simulation of jiggle bones
- Added eyelid morphs driven by bone constraints on CS2 agent models
- Bone-merged models now pose by bone name when skeletons differ
- Fixed flex animations on models using an external morph set
- Fixed morph sets without a texture atlas and standalone
vmorf_csets failing to load - Fixed rotation order when blending additive animations
- Fixed meshes with two bone weights skinning incorrectly
- Fixed meshes with their own inverse bind pose deforming wrongly
- Added AnimGraph 2 (
- Lighting and shadows
- Added real-time static sun shadows in lightmapped scenes at Medium shadow quality and above
- Added a third sun shadow cascade at Very High quality
- Added light styles with
light_styles.vdatacurves and inputs and outputs - Added Deadlock lightmap version 8.5 support
- Added bicubic filtering of baked lightmap shadows
- Added per-pixel light probe volume lookup, blending and edge fading
- Added sky and ground bounce ambient where no light probe volume reaches
- Added rect light shading as area lights in Aperture Desk Job and Deadlock
- Added
disableshadowssupport for model entities - Added visible light geometry for
light_rectandlight_omni2withshowlight - Added
lighting_originattachments and shifting thin model lighting toward the viewer - Improved baked lighting for lightmap versions 8.1 to 8.4
- Improved barn, rect and omni2 brightness, colour temperature and shape rounding
- Improved light probe volume selection and object lighting
- Improved shadow quality in the model viewer
- Barn light limits now keep the largest lights on screen
- Hidden tools materials that block light now keep casting shadows
- Raised the environment map and light probe volume limits to 320
- Fixed moving objects keeping their spawn light probe, environment map and tint
- Fixed barn light shadows leaving out objects that block light
- Half-Life: Alyx, SteamVR Home and Aperture Robot Repair
- Added Aperture Robot Repair support
- Added baked per-vertex lighting on placed props
- Added spot light shadow maps (up to 16 per view) and light cookies
- Added mixed shadows with
info_dynamic_shadow_hintentities - Added Blinn-Phong and Schlick specular and projected environment maps
- Added
vr_monitor,vr_hairandvr_wireframe_hologramshaders - Added
vr_glass_markabledust and backlight - Added SteamVR Home tint masks, paint blend layers, glass fresnel and indirect light textures
- Added
ModelConfigListsupport for dressing Half-Life: Alyx citizens - Added
vr_xen_foliagevertex animation andvr_complexfoliage animation - Improved
vr_eyeball,vr_glassandvr_skin - Improved environment map and light probe assignment in VR maps
- Improved VR tonemapping and bloom
- Fixed SteamVR
vr_standardreflectance, metalness, gloss and normal decoding
- Deadlock
- Added screen-space ambient occlusion
- Added NPR hero lighting with stepped diffuse and a rim light
- Added
environment_layer,environment_simple,environment_parallax_layeredandcosmic_veilshaders pbrandenvironment_blendmaterials now always blend light probe volumes- Added projected decal materials
- Added per-pixel bloom for materials that override it
- Added Patron models with idle animation for
npc_boss_tier3 - Fixed overlay materials drawing as opaque and casting shadows
- CS2
- Added seam borders and bevels to environment blend materials
- Added biplanar UVs and per-layer UV controls to environment materials
- Added weapon stickers with wear, holographic and glitter layers
- Added character material adjustments for brightness, contrast, hue and saturation
- Added foliage trunk and branch deflection
- Added
csgo_simple_liquidbottle glass with liquid and bubbles - Reworked environment wetness with puddle height, wet edges and per-layer darkening
- Improved environment, foliage, complex, water and barn light shading
- Fixed opacity, ambient occlusion and direct specular of world shaders
- Fixed decal textures being read as linear
- Fixed the sun's specular highlight shining as a point
- Fixed the
csgo_water_fancyshader reading the wrong wave direction
- Dota 2
- Added sun, ambient light, fog and sky from
ent_dota_lightinfo - Added the fixed tonemap curve
- Added ambient effects on buildings, towers, trees and fountains
- Added constant layer animation of units such as Radiant towers
- Improved shading with global light, directional ambient and Phong specular
- Added sun, ambient light, fog and sky from
- Fog and post-processing
- Added volumetric fog with
env_volumetric_fog_controllerand fog volumes - Added
env_fog_controller, andfog_typeand angular fog toenv_sky - Added gradient fog from a texture, and two-colour linear fog
- Added the post-processing vignette
- Added the default auto exposure range from
gameinfo.gi - Rewrote the bloom mip chain per game
- Fixed bloom being weighted by exposure twice
- Fixed auto exposure clamping, compensation and adaptation speed
- Fixed auto exposure metering the scene before translucent surfaces were drawn
- Fixed cubemap fog blur and distance
- Fixed local post process volumes using the camera position instead of the player's
- Added volumetric fog with
- Culling and loading
- Added map visibility (PVS) culling of objects, particles and sun shadow casters
- Added
info_visibility_boxculling - Added texture streaming that loads mips by on-screen size
- Added aggregate LOD switching and GPU meshlet culling
- Improved physics trace speed by 1.17x to 1.36x for boxes and up to 1.58x for rays
- Improved map load time by skipping unused player animations and preloading resources
- Reduced memory use by releasing unused KV3 data and CPU vertex buffers after upload
- Enabled the depth prepass by default
- Enabled GPU-driven indirect draws for instanced aggregate props
- Particle textures now load asynchronously, smallest mip first
- Translucent sorting now uses closest-distance order
- The viewmodel now draws after the scene and its translucents
- Fixed occlusion culling hiding objects past the screen edge in the previous frame
- Debug views
- Added "Light Probe Grid", "Light Probe Grid Surface" and "Cubemap Debug Colors"
- Added RAM and GPU memory usage to the render stats
- Reworked the infinite grid with antialiased lines and a horizon fade
- Improved the selection outline with a fixed-width edge
- Physics shapes now draw edges as lines
- Translucent physics now draws with order-independent transparency
- The Cubemaps render mode now marks each cubemap
- Map collision now stays visible when world geometry is hidden
- Made the render timings window more compact
- Renamed the
IrradianceDebugrender mode toLightmapCharts - Fixed the selection outline ignoring morphs and outlining alpha-tested cutouts
- Fixed
QuadOverdrawcounting for alpha-tested and vertex-animated materials - Fixed the sky being too dark in render modes without post-processing
- Added mouse look for flight mode, toggled with Z
- Improved entity focus framing of long or thin objects
- Free-flight move speed now scales with the scene size
- Renderer now has one shader per game shader, plus a
fallbackshader - Material translucency, overlay and shadow casting now follow compiled shader attributes
- Fixed GGX specular highlights missing a factor of pi
- Fixed self-illumination masks reading three channels and being read as linear
- Fixed sound events failing to load when fields hold strings, lists or ranges
- Fixed flying faster when holding several movement keys
- Fixed rendering on the llvmpipe software OpenGL driver
CLI
- Breaking change:
--statsoptions were renamed to--test, such as--test_loader - Breaking change: conflicting or ineffective option combinations are now errors
- Removed the macOS x64 and Linux 32-bit ARM builds
- Added
--vpk_createand--vpk_create_chunk_sizeto pack a folder into a VPK - Added
--vpk_searchand--vpk_search_optionsto search file contents, withcase,word,regexandhexoptions - Added
--shader_list_combosand--shader_comboto list and decompile single shader variants - Added
--kv_flattento print KeyValues files aspath = valuelines - Added
--output -to print decompiled files to the console - Added
--skip_softbody_reconstructionto skip cloth when decompiling - Added
--gltf_keep_all_keyframesto disable animation keyframe reduction - Added
--quietand a summary of written files - Added
steam:paths andvpk:links as--input, andsteam:paths as--game - Added processing of VPKs inside VPKs with
--block,--alland the shader options - The CLI now exits with code 2 when files fail to process
--outputnow treats a path without a file extension as a folder--gltf_export_formatnow implies--vpk_decompile- The path filter is now case-insensitive with
*and?wildcards --blocknow takes multiple comma-separated blocks- Extension filters now accept a leading dot, and
--recursive_vpkno longer needs--recursive --vpk_dirnow lists files like--vpk_list--vpk_listnow also lists loose files in folders--vpk_verifynow verifies every VPK in a folder--vpk_decompilenow decodes non-resource files such as fonts--gamenow accepts the game folder- Output now joins package and inner file paths with a colon
- Fixed additional files losing their folders when decompiling into an output folder
- Fixed
--vpk_cachemanifests recording files that were skipped or failed - Fixed shader decompiles not picking the highest matched shader model per platform
Library
- Model decompilation
- Added cloth reconstruction from
FeModel - Added morph targets and flex rules
- Added IK chains and the legacy IK control rig
- Added every physics joint type, ragdoll joints and body markup
- Added
1DBlend,2DBlend,EmptyAnim,FaceposerKeys,ScaleSetandVSNAPnodes - Added animation group animations as anim files
- Fixed collision of skinned models being written in the wrong space
- Fixed meshes split across identical vertex buffers decompiling as several meshes
- Fixed animation DMX files overwriting a mesh or each other
- Fixed flex controllers of older games failing to load
- Added cloth reconstruction from
- Map decompilation
- Added recovery of ropes, path node entities and cable attributes as editable paths
- Added entity I/O connection parameter maps
- Added painted prop vertex streams and
materialoverrideonprop_static - Added texture axes, scale and offset to Hammer meshes
- Improved world geometry welding and splitting per material and tint
- Improved physics geometry by dropping triangles covered by render meshes
- Faces without UVs now use a grid-aligned projection
- Fixed meshes merging quads across seams, hard edges and vertex paint breaks
- Fixed brush entity rotation being lost
- Fixed baked prop tint and alpha being lost
- Fixed foliage props decompiling to Hammer meshes instead of
prop_static
- glTF export
- Added morph normal deltas, sparse accessors and target names
- Added AnimGraph 2 skeleton (
vnmskel) export - Added skeletons to standalone
.vmesh_cexports - Added world node material overrides and skins to map exports
- Improved animation export by reducing keyframes within a tolerance
- Improved file size with smaller vertex data types and skipped unused vertex data
- Exports now always include the armature
- Map exports now skip tools materials and lower LOD aggregate meshes
- Fixed normal maps being exported with alpha
- Fixed entity extras, now written per entity node with typed values
- Fixed alpha modes, unlit materials and tint colours
- Fixed instances with different tints sharing one mesh
- Fixed repeated skinned models not binding to their own skeleton
- Fixed prop skins replacing only one material
- Fixed clip durations and quaternion sign flips
- Fixed collision missing when stored in a referenced
.vphys_c
- Animation graphs
- Added AnimGraph 1 group decompiling
- Added time-controlled clips, alignment bones and more condition nodes to AnimGraph 2 decompiles
- Improved
vnmclipandvnmskelextraction to recover source filenames and base frames - Clips cut from one source animation now share a single DMX
- Fixed
vnmskelextraction not preserving the compiled bone order
- Compiled shaders
- Added support for compiled shader version 58
- Added uncompressed, dictionary-less Zstd and LZ4 static combo blocks
- Added mobile Vulkan attribute maps and specialization constants
- Added naming of globals buffers, texel buffers, push constants and storage images in Vulkan decompiles
- HLSL decompiles now use shader model 6.2 with native 16-bit types
- DXIL shaders now show their hash instead of throwing
- Removed s&box compiled shader support
- Fixed parsing of version 61 compiled shaders
- Fixed Vulkan binding offsets for most versions and mobile
- KeyValues3
- Added reading of binary int8 and uint8 values
- Fixed files with multiple or newer type flags failing to read
- Fixed LZ4 blobs failing to decode, and version 4 blob serialization
- Game and package loading
- Added
NestedPackagefor reading VPKs inside VPKs at any depth - Added
PackageSearchandResource.AnyBlockContentsfor content searches - Added
gameinfo_branchspecific.gireading andLayeredOnModmerging - Added game detection by Steam app id and from content search paths
- Added mounting of local addon folders, and the base game for addons without a gameinfo
- Added detection of Steam installed through Flatpak
- Added detection of a native Linux or macOS Steam when running under Wine
- Improved Steam detection from the registry,
XDG_DATA_HOME, symbolic links and Snap - Changed the mount order of search paths and VPKs
- Game folders now mount every
pakNN_dir.vpk - File reading now lets other programs write, rename and delete open files
- Fixed workshop content not finding its game in another Steam library
- Fixed VPKs named like
name_123.vpkbeing treated as chunk files
- Added
- Added the FGD parser,
EntityClassandEntityClassCatalog - Added
ReadModetoResource.Readfor parsing blocks on first access - Added
NavSpaceFileandNavFlowMapFilefor Deadlock navigation files - Added
ParticleSystemSimulationfor simulating particles without a graphics backend - Added the
vdsp,vwrltandvwenvmapresource types - Added decompiling of
vmixmix graphs and graph-basedvsndsounds to.vmix - Added Rubikon compound physics shapes
- Added soft-body
FeModelparsing in physics aggregate data - Added
R11_EAC,RG11_EACandR32_UINTtextures, and the mip compression method - Added
NTROdouble, AABB, rotation vector, matrix, Euler angle and unique id fields - Added support for textures with a legacy resource header
- Added support for animations that store frame data on their description
- Added support for tools asset info versions 8 and 16
- Added older world visibility layouts
- Added nav mesh places, hiding spots, corner gravity and movable mesh settings
- Added extracting fonts and
gnvgrid navigation files from packages - Improved sprite sheet extraction to recover sequence names, loop modes and original bounds
- Replaced TinyEXR.NET with a built-in EXR writer
- Replaced
SharpGLTF.ToolkitwithSharpGLTF.Core - Replaced ZstdSharp with the Zstandard support built into .NET
- Replaced the bundled LZMA SDK with a new span-based decoder
- Changed the target framework to .NET 11
ForceLDRnow applies on top of decode flags and exports HDR cubemaps as one LDR image per face- Malformed animation and graph data now throws
- Removed the resource file size mismatch check
- Fixed reading old
vsndsound info, resource manifests and sound stack scripts - Fixed Zstd-compressed mesh buffers in
MVTX - Fixed polymorphic structs, fixed-size arrays and nested pointers in
NTRO - Fixed concurrent reads of one resource corrupting each other
- Fixed anisotropic roughness textures decoding as normal maps
- Fixed BC5 hemi-octahedral normal maps decoding with transparent alpha
- Fixed raw JPEG, PNG and WebP textures extracting without their extension
- Fixed decompiled files and text dumps formatting numbers with the system culture
- Public API
Resource.Blocksis nowIReadOnlyList<Block>, andResource.Readlost itsverifyFileSizeparameterModelmesh methods returnModelMeshandModelMeshReference, andMeshGroupsreplacesGetMeshGroupsAnimationwas renamed toAnimationBaseColor32,MathUtilsandAABBmoved from the renderer toValveResourceFormat.UtilsControlPointand the particle enums moved toValveResourceFormat.ParticlesSboxShaderandMurmurHash2were removed- Many other public members were renamed or removed