Skip to content

Releases: ValveResourceFormat/ValveResourceFormat

17.0

02 Jan 14:35
Immutable release. Only release title and notes can be modified.
17.0

Choose a tag to compare

Modernized GUI Theme

The entire GUI has been redesigned with a modern dark theme (while still based on Windows Forms; we are aware there are many small issues), many fixes were done to high DPI support, all icons have been replaced with scalable SVG icons, a custom titlebar has been added. The new changes include better main tabs, they now have fixed width which shrinks to fit without scrolling when you many tabs. Tabs now have a close button. The app logo has been tightened up.

Source2Viewer_gfKBRTcVtN
Source2Viewer_VgVBvjk3TI Source2Viewer_CCrdhijux5

Async Loading and Threaded Rendering

OpenGL rendering now runs on a dedicated background thread, significantly improving UI responsiveness during file loading and navigation. Resources are now loaded asynchronously to not block the UI. This also makes the experience of loading file previews in VPK nicer.

Animation Node Graph Viewer

Animation graphs 2 can now be visualized as interactive node-based graphs with automatic layout, wire routing, panning, zooming, and keyboard navigation support.

Source2Viewer_fd4mS5ES2v

Improved Audio Player

The audio player has been redesigned to look more modern and render the entire file audio waveform.

Source2Viewer_Xg1MNRJKpb

Improved Material Viewer

Materials now include an updated side panel which shows all the supported properties which can be changed on the fly.

Orbit Camera

It is now possible to orbit a camera around any object (raycast) in front of the camera while holding Alt.

GUI

  • Added Animation Node Graph Viewer for visualizing animation graphs
  • Added Material property editor panel with color picker and real-time material updates
  • Added vpost (LUT) file viewer support
  • Added camera orbit mode with physics ray tracing to automatically find orbit targets
  • Added camera transition animation when loading maps
  • Added smoother camera movement
  • Added panning with mouse wheel while holding modifier keys (Shift/Ctrl)
  • Added close buttons to individual tabs
  • Added ".." entry to navigate to parent folder in VPK list view
  • Added tab showing sizes of skipped raw buffers in resource viewer
  • Merged "check for updates" into the about dialog
  • Find button is always enabled and will also work on tabs that have text editors
  • Improved lighting by sampling ambient diffuse from cubemap when no light probe volumes exist
  • Improved keyboard movement in texture viewer
  • Improved exception dialog display
  • Improved the audio player
  • Changed to display root files when opening a VPK in list view
  • Changed to fade out point_camera entities when the camera gets close
  • Fixed panning camera (hold shift) to correctly pan the viewport
  • Fixed double-click on folders incorrectly opening files
  • Fixed double-clicking on VPK tree items
  • Fixed VPK preview models having their reader disposed prematurely
  • Removed horizontal scrolling on all tree views
  • Optimized loading maps
  • Optimized OpenGL bindings loading without reflection
  • Optimized game folder scanning to avoid duplicates from different AppIDs

CLI

  • Improved shader extraction to only decompile highest available shader model
  • Added a message if numeric input VPK is specified but _dir.vpk exists

Library

  • Added MeshOptimizer vertex codec v1 support
  • Added NavMesh v36 file format support
  • Added MeshAdjacencyBuffer block support
  • Added Deadlock model gamedata nodes support
  • Added physics body gamemarkup data for CS2
  • Added decompilation of FeetSettings to Feet vmdl nodes
  • Added SpecularColor to glTF exports
  • Fixed materials with specular factor losing textures in glTF export
  • Fixed flipped SrgbRead and sampler starting point (v70)
  • Reduced runtime reflection in file type detection

View commits since 16.0

16.0

20 Nov 12:49
Immutable release. Only release title and notes can be modified.
16.0

Choose a tag to compare

We've generated xmldocs for all public facing methods and properties in the library, and now an automatic API documentation is generated using docfx,
which is available at https://s2v.app/ValveResourceFormat/api/ValveResourceFormat.html

GUI

  • Settings will now open as a tab, instead of a window
  • Added orbit camera
  • Added EXR option for "save to disk" feature in Texture Viewer
  • Added mip size display in Texture Viewer
  • Added detection of unicode byte order markers in byte→text viewer
  • Added animation preview time and frame progress display
  • Enabled occlusion culling by default in the map viewer
  • Improved shadow map rendering to smoothly fade out last 8%
  • Improved "Transmissive Backface NdotL" to work for more material types
  • Ignore lower map mesh LoDs from rendering
  • Changed default SVG view to transparent
  • Fixed 3rd CS2 blendable material layer not appearing
  • Fixed wireframe mode to skip drawing the 2D skybox
  • Fixed texture viewer to resize output bitmap using selected mip level size
  • Fixed vwrld export not getting the full path
  • Fixed bookmarks not appearing instantly on explorer open
  • Fixed resource disposal when closing tabs
  • Changed to store env maps in separate AoS buffer with optimized instance indices
  • Changed to store light probes in combined buffer with max probe count of 128
  • Cleaned up renderer code to make it more self contained
  • This build has some known issues
    • Object Reference Exception when creating vpk from folder
    • Object Reference Exception when previewing a model within vpk

Library

  • Updated to .NET 10
  • Added basic support for exporting container based vsnd files
  • Added sound construction from CVoiceContainerEnvelope
  • Added support for NTRO indirections count 2
  • Added texcoord1 stream decompilation in vmap
  • Changed vnmskel dmx serialization to binary format
  • Fixed exporting vsnd data even if there is sound data
  • Fixed support for m_pSemanticName stored as byte array
  • Fixed decompiled .vnmskel crashing Source 2 tools on compile
  • Fixed _class being overwritten in nmclip extract
  • Fixed loading particles that use UI textures encoded as PNG or JPEG
  • Removed CSGOItem resource type, renamed CSGOEconItem to EconItem
  • Renamed Snap to ParticleSnapshot resource type, and the old ParticleSnapshot is now ParticleSnapshotLegacy

View commits since 15.0

15.0

26 Sep 20:04
Immutable release. Only release title and notes can be modified.
15.0

Choose a tag to compare

Resource Serialization
This release adds a first but important step in being able to serialize resources back to binary files
by just calling resource.Serialize(stream). Not all block types are supported, but most importantly
binary keyvalues3, plaintext blocks, and raw binary blocks (meshes) are supported.
This already allows writing a majority of modern files that do not require legacy blocks.

CS2 Water
Thanks to @H7perus for reverse engineering the CS2 Water Shader. This shader features refraction, ray marching, caustics, screen space reflections.

Source2Viewer_FancyWater.mp4

CS2 Foliage
Assets using the foliage shader now react to wind.

Source2Viewer_Foliage.mp4

GUI

  • Improved water shader rendering for CS2 maps
  • Added transmissive lighting for CS2 foliage materials
  • Added foliage vertex animation support
  • Fixed CS2 models being fully transparent in screenshots
  • Added physics wireframe rendering with line polygon mode
  • Improved entity handling - entities without classnames are now ignored
  • Added lightmap specular occlusion viewing
  • Pressing Escape now unselects any selected nodes
  • Added support for Layer 3 in CS2 Environment shader
  • Improved physics (clipbrush) renderer with better lighting and reduced flicker

CLI

  • Added Windows ARM64 build
  • Added VCS (shader) decompilation support
  • Added OS architecture to --version output

Library

  • Enabled AOT for the VRF library
    • As a test, added a ConvertBinaryKV3ToText method for unmanaged callers
  • Added KV3 Shaders support (vcs3)
  • Added resource serialization support for KV3 blocks
  • Added NmSkel decompilation and extended NmClip decompilation
  • Added WebP texture support
  • Added basic serialization support:
    • Added binary KV3 serialization to v4
    • Improved KV3 text parsing with format/encoding preservation
    • Added KV3ID struct and lookup system
    • Added serialization for RERL, MIDX, and MVTX blocks
    • Added support for plaintext block serialization
  • Moved SPIRV reflections from GUI to VRF library
  • Performance optimizations:
    • Improve FPS by rendering dense meshes first
    • Precompute linear material colors in CPU
    • Improved SrgbGammaToLinear performance
    • Reduced memory allocations in various parsers
  • Added tools asset info v14 support
  • Added entity_name KV3 flag support
  • Added KeyValues property to Model (Source 1 $keyvalues)
  • ResourceData is now abstract
  • Fixed gltf serialization to not perform a pointless deep clone

View commits since 14.1

14.1

01 Aug 10:06
Immutable release. Only release title and notes can be modified.
14.1

Choose a tag to compare

Source2Viewer_nQ2ewgmgtD.mp4

GUI

  • Added preliminary support for AnimGraph2
  • Allow maps to load if the sky shader uses an unsupported version
  • Fixed entities from point_template not being positioned correctly in the map viewer and glTF exports
  • Fixed hardware texture decoder queue to be more consistent
  • Fixed a few null exceptions

Library

  • Added support for new MVTX and MIDX blocks
  • Added support for compiler shader version 69 along with new zstd dictionary
  • Added basic exporting of vnmclip to glTF
  • Shader zstd dictionaries are now stored as resources instead of being hardcoded in the source code

View commits since 14.0

14.0

24 Jul 10:23
Immutable release. Only release title and notes can be modified.
14.0

Choose a tag to compare

This S2V release adds an entity list which allows you to filter and jump to entities in the map viewer, and view lines for the entity connections. Selection outlines have been added to properly visualize the edges of complex models.

Added selection outlines
Selection outlines

Added entity list
Entity list

Added physics export to glTF
Exported physics viewed in Blender

GUI

  • Added an entity list in map viewer, and standalone entity files
    • Double clicking an entity in the list will jump to it in the viewer
    • Has filtering by entity type, keys, and values
  • Added yellow outlines for selected models
  • Added AABB dimensions for selected models
  • Added model stats (vertex and triangle count, etc) in the model viewer
  • Added solid background checkbox to the model viewer to allow recording videos against a green screen
  • Added a checkbox to view entity connections as lines between entities
  • Added smooth camera transition when changing location programmatically in the map viewer
  • Added vwrld and vwnod data tabs to the map viewer
  • Added sun light based shading to Dota 2 maps and models
  • Added depth feathering to CS2 sprite effects shaders
  • Added saving original svg file from texture viewer
  • Added a 200ms delay before previewing files to allow double click to open
  • Added context menu option to open files without a viewer (useful for big maps)
  • Improved some map loading times by decoding vertex buffers in parallel
  • Canceling file contents search will now display partial results
  • Increased overall app font size
  • Fixed a crash on certain GPU drivers due to missing parallel_shader_compile extension
  • Reduced some VRAM usage by using mat3x4 instead of mat4x4 for some buffers
  • Upgraded to OpenTK 4, which is backed by the GLFW library

CLI

  • Printing large blocks like PHYS will now output to console every 64MiB instead of running out of memory on the 2GiB string length limit

Library

  • Improved glTF exporting
    • Added exporting of physics (vphys_c files and embedded PHYS blocks)
    • Physics are converted to meshes, and will use tool textures if available, and generated surface textures otherwise
    • Write all Source 2 material properties as glTF material extras
  • Added EntityIOTargetType enum
  • Removed obsolete Resource.Block.Read() method

View commits since 13.0

13.0

03 Jun 09:04
Immutable release. Only release title and notes can be modified.
13.0

Choose a tag to compare

This release mostly focuses on refactoring the Source 2 shader recompilation to further improve our understanding of the system and make it easier to actually browse through the compiled shader variants.

Screenshot showing shader decompilation output

GUI

  • New compiled shader browser with a tree structure of all the programs and variants
  • Added syntax highlighting for shader sources
  • Added a setting to change default code viewer font size
  • Code blocks that are bigger than 512 megabytes will fallback to plain textarea
    • FastColoredTextBox is in fact not fast enough to display Deadlock's physics file
  • Fixed inconsistent camera when opening files from model picker
  • Fixed file contents search skipping last archive
  • Fixed some particle operators
  • Renderer will now pause if the app is not active/focused
  • Single-file binary of S2V will now only extract native libraries instead of all the dlls into temp folder
  • Enabled drag-and-drop of files from Chrome based apps such as the explorer in VS Code
  • Disabled camera movement while holding control
  • Added UvDensity, LightmapUvDensity, MipmapUsage render modes, light probe volume debug grid spheres
  • Added R16G16B16A16_FLOAT vertex attribute format
  • Added special handler for viewing dmx files
  • Added renaming of inputs and structures in vulkan spir-v reflection where possible

CLI

  • Renamed the project from Decompiler to CLI, if you relied on the path to compile it yourself this is a breaking change

Library

  • Enabled C# nullables (still disabled in some files)
    • If you have nullables enabled in your project, you may need to add some extra null checks
  • Major refactoring of CompiledShader to align the structure and naming more closely to actual Source 2 shader code
  • glTF export improvements
    • Fixed not waiting for textures to export correctly
    • Exporting maps will now skip csgo_player_previewmodel models
    • Fixed multiple vertex buffers
    • Added small offset to overlays in gltf to reduce z fighting
    • Added exporting of light_environment
    • Export object tint as material base color
  • Added GridNavFile for parsing for grid nav (gnv) files
  • Added support for discovering content files from OfficialAddonRoot (CS2 community maps)
  • Added support for updated .nav files in Deadlock
  • Added support for changed VBIB in Deadlock
  • Added support for decompiling ADPCM wav files
  • Split hammer physics mesh to avoid issues with really big maps
  • Material decompiler will now export all cubemap and array images
  • Renamed SNAP to ParticleSnapshot
  • Renamed VXVS to VoxelVisibility
    • Come help us reverse engineer the vis_c files!
  • BlockType enum is now FourCC uint
  • Updated some enums to add missing values

View commits since 12.0

12.0

18 Apr 17:09
Immutable release. Only release title and notes can be modified.
12.0

Choose a tag to compare

S2V now features dark mode, texture viewer improvements, improved model decompiler, fixes to the explorer and the package viewer.

Dark mode
Dark mode is now available thanks to the release of .NET 9! By default it will follow your system theme, but you can change it in the settings.
There are a few issues in a some controls, but we expect these to be fixed in the next .NET 10 release.

Screenshot showing dark mode explorer tab

Texture conversions
We've replaced our BCn (DXT5, BC7, ATI1N, etc…) texture decoders with another library (which we've helped test) to have more correct
and faster decoding of these textures.

As a reminder, when exporting textures in GUI, they will be decoded using your GPU when possible, so it avoids these CPU reimplementations.
We've also fixed a few bugs in the GPU-based decoders and the texture viewer.

There are also new options in the texture viewer such as viewing separate channels and UV wrapping. Read more below.

Breaking change
If you are using the CLI to export resources into glTF, you must now specify --gltf_export_format argument.

Reminder that you can always download a dev build before a new release to test new fixes.

GUI

  • Added a setting to toggle the theme
  • Texture viewer
    • Added support for viewing standalone .svg files
    • Added R/G/B/A channel separation option
    • Added option to repeat texture twice to view the UV wrapping
    • Added texture sampling selection
    • Removed FPS counter
    • Texture viewer will no longer render frames if nothing changed (saves battery)
    • Fixed software mips to render at full size
    • Fixed decode flags resetting sometimes
  • Explorer
    • Added support for detecting workshop content with split vpks (CS2)
    • Files in bookmarks and recent will now display game icon
    • Paths in bookmarks and recent are now abridged with the game name
    • Fixed loading game icons after Steam update
  • Package viewer
    • Added sort arrow to headers
    • Fixed clicking size column to sort by descending on first click
    • Fixed right clicking files in search results not expanding the tree view nodes
    • Fixed performance of rendering large lists (e.g. if search results display 10k files)
  • Added Root Motion visualization to model viewer
  • Fixed baked lighting on the new Deadlock map
  • Fixed container sound files to not throw to view the KV3 data
  • Fixed mip levels being reduced to 0 pixels
  • Fixed hardware texture decoder not handling mip levels (only full size is exported though)

CLI

  • Breaking change: --gltf_export_format argument is now mandatory for exporting assets to glTF
  • Files outside of a vpk can now be exported to glTF
  • Recursive scanning will now read more supported files that are not resources (fonts, nav, flex scenes, closed captions)

Library

  • Added support for TBUF block (Deadlock)
  • Added UIFontFilePackage to decompile uifont files (you can decompile them with the CLI)
  • Added Animation Graph resource decompile support
  • Model decompiler
    • Groups animations into folders when available
    • Added AnimGameplayTiming annotation exporting
    • Added bone weightlist extracting
    • Added support for exporting models with 8 bone weights (also in glTF)
    • Fixed ragdoll colliders missing parent nodes
  • Added support for parsing binary blobs in text keyvalues3
  • Replaced BC1-BC7 texture decoders with a different implementation
  • Added export support to EXR for BC6h textures
  • Blocks now keep a reference to the parent Resource object
  • Fixed decoding non-power-of-two ETC2 textures
  • Fixed glTF exports to have deterministic texture indices
  • Fixed 3D textures not mip-mapping depth
  • Skip exporting aggregate meshes with a scale of zero in glTF
  • Exporting glTF with satellite textures will now save glTF to disk before textures finish exporting
  • Improved VfxEval OpCode names, fixed radians function mislabeled as Remap01ScaleOffset

View commits since 11.1

11.1

19 Dec 10:28
Immutable release. Only release title and notes can be modified.
11.1

Choose a tag to compare

This update was released to support new binary keyvalues 3 version added in Deadlock.

Reminder that you can always download a dev build before a new release is made to test the fixes.

Added navigation mesh visualization
Available in the map viewer, and when opening standalone nav files.
Screenshot showing navigation mesh in the map viewer

Happy holidays!
Certain models have procedural cloth bones which did not animate, and now they do. Also added support for new 8 boneweights per vertex.
Screenshot showing a Deadlock hero model

GUI

  • Added support for visualizing navigation meshes (.nav files)
  • Added rendering support for 8 boneweights per vertex (new Deadlock hero models)
  • Added support for animating procedural cloth bones (fixes clothes not animating)
  • Added basic css file highlighter
  • Catch gltf export exceptions in export dialog for better reporting
  • Fixed incorrect scroll jump when expanding a nested folder that has only one item
  • Fixed paused animations being off by a frame
  • Fixed multiple issues with animations
  • Implemented parsing Steam's librarycache/assets.vdf to get the game icons in beta client

CLI

  • --vpk_cache now writes a header with version which invalidates the cache when S2V version changes
  • Added special --i steam when using --stats to scan all Steam libraries automatically

Library

  • Rewritten binary keyvalues 3 parser, added support for v5
  • Added NavMeshFile to parse nav files
  • Added PCM8 sound format
  • Removed VBIB.CombineRemapTables
  • Fixed KV3 text parser incorrectly adding double quotes when reading flagged value inside an array

View commits since 11.0

11.0

03 Dec 17:54
11.0

Choose a tag to compare

NET .9

This release updates to the .NET 9 runtime. This brings a breaking change in form of enabling CET support, which may cause it to crash on unpatched Windows installations.

Signed binaries

The Windows executables are now signed!
Free code signing provided by SignPath.io, certificate by SignPath Foundation.

Experimental lights
Added a checkbox to activate experimental lights. If you love shaders, help us improve the rendering of these!

j

GUI

  • Executable is now signed
  • Added a welcome screen for new users
  • Added post processing (color correction) support to map viewer
  • Added an option to check for new updates daily
  • Added a button in settings that sets the FOV to match CS2
  • Added setting for shadow resolution
  • Added basic syntax highlighting in text viewer
  • Added render exposure slider in map viewer
  • Added hardware occlusion culling
  • Added a checkbox to activate experimental lights
  • Fixed mouse not moving past right edge in fullscreen
  • Various fixes for Deadlock updates
  • Improved lighting in SteamVR Home

CLI

  • Executable is now signed
  • Added --gltf_export_animations and --gltf_animation_list
  • Added --texture_decode_flags
  • --vpk_filepath now supports multiple paths separated by a comma
  • Parameters -a and -b will also process VPK inner files
  • Changed output of --vpk_list

Library

  • Updated to .NET 9
  • Removed REDIBlock, and upconvert it to KV3 based Resource Edit Info
  • Upconverted old EntityLump to KV3
  • Added SIMD implementation of MeshOptimizer vertex decoder
  • Added support for exporting HDR textures in EXR format
  • Implemented int16/uint16 in binary KV3
  • Added NmGraph resource types
  • Added GameFolderLocator (functions the same as the Explorer in GUI)
  • FindFileWithContext now support rooted paths
  • Do not fail material decompiler if the texture parameter no longer exists in shader file
  • Reduced allocations in various places
  • Updated ObjectTypeFlags
  • Fixed reading quoted keys in text kv3

View commits since 10.2

10.2

03 Sep 20:05
10.2

Choose a tag to compare

Implemented post processing and color correction, fixed lights in Half-Life: Alyx
We still have overall brightness to figure out, but maps looks closer to in-game now.
Some maps didn't even render the sun correctly, but now they do.

Initial support for Deadlock

Added a welcome screen for new users
Promotes basic things like setting default app for vpk files, enabling the new auto update checks, and shows the explorer right away.

GUI

  • Added a welcome screen for first time users
  • Added an automatic update check
    • Runs once upon app start
    • Will not check more than once a day
    • Disabled by default (can be toggle from the "Check for updates" menu)
  • Added color correction support with a new post processing shader in map viewer
  • FOV can now be specified with decimal points which allows matching in-game field of view exactly
    • Added a button to set the FOV to 4:3 which matches CS2 FOV exactly
  • Added a setting for changing shadow resolution
  • Fixed mouse not moving past right edge in fullscreen
  • Fixed incorrect lighting in Half-Life: Alyx
  • Fixed some shader issues in Deadlock

CLI

  • Added --gltf_export_animations and --gltf_animation_list to control which animations to export
  • Added --decompile as an alias to --vpk_decompile
  • Added --texture_decode_flags to control HDR exports
  • Changed --vpk_filepath to accept multiple paths with a comma
  • Changed output of --vpk_list to be more verbose
  • Parameters -a -b will also process VPK inner files

Library

  • Added ValveResourceFormat.IO.GameFolderLocator to find Steam game paths
  • Added support for exporting HDR textures in EXR format
  • Added SIMD optimized implementation of the meshoptimizer vertex decoder
  • Added support for int16 and uint16 types in binary kv3
  • Added resource types for animgraph2
  • Reduced allocations in various places
  • Only export default animation for entities in glTF map export

View commits since 10.1