/VQEngine

Multi-threaded DirectX12 renderer w/ HDR, PBR & Multi-monitor support

Primary LanguageC++GNU General Public License v3.0GPL-3.0

VQEngine

VQEngine is a DirectX12 renderer for prototyping of rendering techniques and experimenting with cutting edge technology.

Join the VQE Discord Channel for graphics, math and engine chatter!

Discord Banner 2

Screenshots

Data-driven (XML) Scenes & glTF Model Loading, HDRI Environment Maps, UE4's PBR model w/ IBL, ImGui UI & debug drawing, AMD FidelityFX CACAO, CAS, FSR1, SSSR, DNSR, SPD

Features

See Releases to download the source & pre-built executables.

Graphics

Display

  • HDR display support with scRGB HDR pipeline
  • Multiple window & monitor support
  • Refresh Rate
    • Custom
    • Auto (1.33 x monitor refresh rate)
    • Unlocked
  • VSync
  • Alt+Enter Borderless Fullscreen

Engine

  • Multi-threading
    • Worker threads
      • Parallel command list recording
      • Culling
      • Asset loading
    • Main + Simulation threads to decouple OS events from the update loop
  • glTF 2.0 model loading using assimp
  • Shader system
    • Shader cache
    • Multi-threaded shader compilation
    • Shader Model 5.0 (DXBC) & 6.0 (DXIL)
  • Automated build & testing scripts

Build

Make sure to have pre-requisites installed

To download the PBR & HDRI textures, run

  • Scripts/DownloadAssets.bat

Then, run one of the build scripts in Build/ folder,

  • GenerateSolutions.bat to build from source with Visual Studio
    • VQE.sln can be found in Build/SolutionFiles directory
  • PackageEngine.bat to build and package the engine in release mode and open _artifacts folder
    • VQE.exe can be found in Build/_artifacts directory

Run

Make sure to have installed

Double click VQE.exe.

Or, if you're using a terminal,

  • VQE.exe -LogConsole for logging displayed on a console
  • VQE.exe -LogFile="FileName.txt" to write out to a file.

Controls

Key
WASD+EQ Camera movement
Page Up/Down Change Environment Map
1-4 Change scenes
1 - Default Scene
2 - Sponza
3 - Geometry Test Scene
4 - Stress Test Scene
Shift+R Reload level
C Change scene camera
V Toggle VSync
M Toggle MSAA
G Toggle tonemapping gamma
J Toggle FidelityFX-SuperResolution1
B Toggle FidelityFX-CAS
N Toggle object bounding boxes
Shift+N Toggle mesh bounding boxes
Alt+Enter Toggle Fullscreen
Esc Release mouse

Settings

VQE can be configured through Data/EngineConfig.ini file

Graphics Settings
ResolutionX=<int> Sets application render resolution width
ResolutionY=<int> Sets application render resolution height
VSync=<bool>
Toggles VSync based on the specified <bool>
AntiAliasing=<bool> Toggles MSAA based on the specified <bool>
MaxFrameRate=<int> Sets maximum frame rate to the specified <int>
HDR=<bool> Toggles HDR swapchain & HDR display support

Engine
Width=<int> Sets application main window width
Height=<int> Sets application main window height
DisplayMode=<Windowed/Fulscreen> Sets Sets application main window mode: Windowed or Fullscreen

Command Line

VQE supports the following command line parameters:

CMD Line Parameter Description
-LogConsole Launches a console window that displays log messages
-LogFile=<string> Writes logs into an output file specified by %FILE_NAME%.

Example: VQE.exe -LogFile=Logs/log.txt
will create Logs/ directory if it doesn't exist, and write log messages to the log.txt file
-Test Launches the application in test mode:
The app renders a pre-defined amount of frames and then exits.
-TestFrames=<int> Application runs the sepcified amount of frames and then exits.
Used for Automated testing.

Example: VQE.exe -TestFrames=1000
-W=<int>
-Width=<int>
Sets application main window width to the specified amount
-H=<int>
-Height=<int>
Sets application main window height to the specified amount
-ResX=<int> Sets application render resolution width
-ResY=<int> Sets application render resolution height
-FullScreen Launches in fullscreen mode
-Windowed Launches in windowed mode
-VSync Enables VSync
-VSync=<bool> Sets Specified VSync State
-AntiAliasing or -AA Enables MSAA
-TripleBuffering Initializes SwapChain with 3 back buffers
-DoubleBuffering Initializes SwapChain with 2 back buffers

Note: Command line parameters will override the EngineSettings.ini values.

Scripts

File
GenerateSolutions.bat What it does
- Initializes the submodule repos
- Runs CMake to generate visual studio solution files in Build/SolutionFiles directory
- Launches Visual Studio

Flags
- noVS : Updates/Generates VQE.sln without launching a Visual Studio instance

Example : GenerateSolutions.bat -noVS
while VS is open to update solution files after modifying CmakeLists.txt without closing/relaunching VS
PackageEngine.bat What it does
- Runs GenerateSolutions.bat if the visual studio solution doesn't exist
- Builds the engine in Release configuration
- Moves build output into Build/_artifacts folder

Flags
-Clean : Runs Clean on VQE.sln projects before building
-DebugOnly : Builds the Debug binaries only
-Debug : Builds Debug binaries in addition to Release
-RelWithDebInfo : Builds the Release binaries with Debug info in addition to Release

Note: Release build is always on by default, unless -DebugOnly is specified

Example: PackageEngine.bat -Clean -Debug -RelWithDebInfo
will build all configurations after running Clean and copy the binaries into Build/_artifacts folder
TestVQE.bat What it does
- Runs VQE.exe with testing parameters, making the engine exit after rendering specified number of frames (1000 default).

Flags
-Debug: Tests the Debug build in addition to the Release build

3rd-Party