SourceDemoRender Save

Multithreaded, hardware accelerated solution to create high quality movies for the Source engine.

Project README

Source Video Render

Download

Discord

Source Video Render (SVR, formely SDR) is used to record movies for the Source engine. SVR does not have video effects - if you need video effects, see HLAE.

SVR can record faster than realtime for normal videos, or with high quality motion blur.

Updates

You can use update.cmd in the SVR directory to automatically download the latest release. The latest SVR will be downloaded to svr.zip. You can extract this folder and SVR is now updated.

Game support

Game Windows
Counter-Strike: Source
Counter-Strike: Global Offensive
Team Fortress 2
Zombie Panic! Source
Empires
Half-Life 2
Half-Life 2: Deathmatch
Source 2013 SP mods
Synergy
Black Mesa
Hunt Down The Freeman

Prerequisites

Any DirectX 11 (Direct3D 11.3, feature level 12_0) compatible graphics adapter with minimum of Windows 10 1909 is required. Hardware feature support verification will occur when starting the launcher.

Startup

Steam must be started for SVR to work.

Use svr_launcher.exe to start SVR. The launcher will scan the installed Steam games in your system and the supported games will be listed. If you don't want to use the launch parameters from Steam, you can create a file called svr_launch_params.ini in the same folder as the launcher and insert a format like this (one line per game):

240=-width 2560 -height 1440

The key is the Steam app id and the value has the parameters to add.

It's possible to launch Source 2013 SP mods using this file by using the 220 app id (Half-Life 2) with a custom -game parameter. If a custom game parameter is used, the one specified by SVR will not be used. Do it like this:

220=-game <mod_name>

The following launch parameters are always added by the launcher: -steam -insecure +sv_lan 1 -console -novid.

When using svr_launcher.exe you are starting the standalone SVR, which modifies existing games to add SVR support. SVR stores the game build which it was tested and known to work on. In case a game updates, SVR may stop working and this will be printed to SVR_LOG.txt.

Recording

Once in game, you can use the startmovie console command to start recording a movie and the endmovie command to stop.

The startmovie command should be used like this:

startmovie <file> (<optional parameters>)

As an example:

startmovie movie.mov timeout=30

The above example will produce a video called movie.mov with a render region of 30 seconds. Videos will be placed in the data/movies/ directory.

The list of optional parameters are as follows:

Parameter Description
timeout=<seconds> Automatically stop rendering after the elapsed video time passes. This will add a progress bar to the task bar icon. By default, there is no timeout.
profile=<string> Override which rendering profile to use. If omitted, the default profile is used. See below about profiles.
autostop=<value> Automatically stop the movie on demo disconnect. This can be 0 or 1. Default is 1. This is used to determine what happens when a demo ends, when you get kicked back to the main menu.
nowindupd=<value> Disable window presentation. This can be 0 or 1. Default is 0. For some systems this may improve performance, however you will not be able to see anything.

When starting and ending a movie, the files data/cfg/svr_movie_start_user.cfg and data/cfg/svr_movie_end_user.cfg in data/cfg will be executed (you can create these if you want to use them). This can be used to insert or overwrite commands that should be active only during the movie period. Note that these files are not in the game directory, but in the SVR directory in data/cfg.

You can have game specific cfgs by using files called data/cfg/svr_movie_start_<app_id>.cfg and data/cfg/svr_movie_end_<app_id>.cfg. The app_id should be substituted for the Steam app id, such as 240 for Counter-Strike: Source.

It is recommended that you don't edit svr_movie_start.cfg and svr_movie.end.cfg as they may be changed in updates, which would overwrite your changes.

The execution order of the cfgs is as follows: svr_movie_start.cfg > svr_movie_start_user.cfg > svr_movie_start_<app_id>.cfg. Each cfg file can override the previous.

The commands that are placed in svr_movie_start.cfg are required and must not be overwritten. Most notably, the variable mat_queue_mode must be 0 during recording for recording to work properly.

Something's not working

If something is not working properly, please find the SVR_LOG.txt and ENCODER_LOG.txt file in the data/ directory and explain what you were doing and upload it to Discord or create a new issue here.

Interoperability with other programs

Due to the nature of reverse engineering games, it cannot be trusted that direct interoperability (with ReShade or HLAE for example) will work because the risk of collision.

Profiles

All recording settings are loaded from profiles which are located in data/profiles. The default profile is called default.ini and is the base profile of all settings. These profiles are shared across all games and are written in a simple INI format. The documentation for profiles is written inside the default profile here.

The default profile is used if no other is specified when starting the movie. You can override settings in the default profile by creating your own profiles inside data/profiles. When starting your movie you can then specify your new profile (see Recording above).

The default profile is always loaded first, and your custom profile is loaded on top. This allows you to override individual setting without copying the entire profile. To create your own profile, create a file with an .ini extension inside data/profiles/. You can now override settings in the default profile by putting in the settings you want to override.

Motion blur demo

In this demo an object is rotating 6 times per second. This is a fast moving object, so higher samples per second will remove banding at cost of slower recording times. For slower scenes you may get away with a lower sampling rate. Exposure is dependant on the type of content being made. The goal you should be aiming for is to reduce the banding that happens with lower samples per second. A smaller exposure will leave shorter trails of motion blur.

The X axis is the samples per second and the Y axis is the exposure (click on the images to see them larger).

960 1920 3840 7680
0.25 mosample_960_025 mosample_1920_025 mosample_3840_025 mosample_7680_025
0.50 mosample_960_050 mosample_1920_050 mosample_3840_050 mosample_7680_050
0.75 mosample_960_075 mosample_1920_075 mosample_3840_075 mosample_7680_075
1.00 mosample_960_100 mosample_1920_100 mosample_3840_100 mosample_7680_100

Building

  1. Extract ffmpeg-n5.1-latest-win64-gpl-shared-5.1 to deps\ffmpeg\.
  2. Copy contents of deps\ffmpeg\bin\ to bin\.
  3. Build deps\minhook\build\VC16\MinHookVC16.sln in Release.
  4. Open svr.sln.
  5. Call build_shaders.cmd from a Visual Studio Developer Command Prompt. In Visual Studio 2022, you can use Tools -> Command Line -> Developer Command Prompt.
Open Source Agenda is not affiliated with "SourceDemoRender" Project. README Source: crashfort/SourceDemoRender
Stars
284
Open Issues
10
Last Commit
6 days ago

Open Source Agenda Badge

Open Source Agenda Rating