Work in progress
RTGL1 is a library that simplifies the process of porting applications with fixed-function pipeline to real-time path tracing.
It's achievable with hardware accelerated ray tracing, low sample per pixel count and utilizing denoising algorithms to improve the image quality by aggressively reusing spatio-temporal data.
-
Requirements:
- 64-bit CPU
- GPU with ray tracing support
- Git
- CMake
- Vulkan SDK
- Python 3 (for building the shaders)
-
Clone the repository
git clone https://github.com/sultim-t/RayTracedGL1.git
-
Configure with CMake
- on Windows, with Visual Studio:
- open the folder as CMake project
- otherwise:
- specify windowing systems to build the library with, by enabling some of the CMake options:
RG_WITH_SURFACE_WIN32
RG_WITH_SURFACE_METAL
RG_WITH_SURFACE_WAYLAND
RG_WITH_SURFACE_XCB
RG_WITH_SURFACE_XLIB
- (optional) to build with DLSS: add the environment variable
DLSS_SDK_PATH
that points to a cloned DLSS repository, and enableRG_WITH_NVIDIA_DLSS
option - configure
mkdir Build cd Build cmake ..
- but make sure that projects that use RTGL1 can find the compiled dynamic library, as it usually assumed that it's in
Build/x64-Debug
orBuild/x64-Release
- specify windowing systems to build the library with, by enabling some of the CMake options:
- on Windows, with Visual Studio:
-
Build
cmake --build .
-
Build shaders
- Run
Source/Shaders/GenerateShaders.py
with Python3, it will generate SPIR-V files toBuild
folder
- Run
- RTGL1 requires a set of blue noise images on start-up:
RgInstanceCreateInfo::pBlueNoiseFilePath
. A ready-to-use resource can be found here:Tools/BlueNoise_LDR_RGBA_128.ktx2
RTGL1 supports shader hot-reloading (a target application sets RgStartFrameInfo::requestShaderReload=true
in runtime).
But to ease the process of building the shaders, instead of running GenerateShaders.py
from a terminal manually, you can install Visual Studio Code and Script Runner extension to it. Open Sources/Shaders
folder, add such config to VS Code's .json
settings file (of courser, it could be better done with VS Code workspaces).
"script-runner.definitions": {
"commands": [
{
"identifier": "shaderBuild",
"description": "Build shaders",
"command": "cls; python .\\GenerateShaders.py -ps",
"working_directory": "${workspaceFolder}",
},
{
"identifier": "shaderGenAndBuild",
"description": "Build shaders with generating common files",
"command": "cls; python .\\GenerateShaders.py -ps -g",
"working_directory": "${workspaceFolder}",
}
],
},
Then assign hotkeys to shaderBuild
and shaderGenAndBuild
commands in File->Preferences->Keyboard Shortcuts
.
Some games don't have PBR materials, but to add them, RTGL1 provides 'texture overriding' functionality: application requests to upload an original texture and specifies its name, then RTGL1 tries to find files with such name (appending some suffixes, e.g. _n
for normal maps, or none for albedo maps) and loads them instead of original ones. These files are in .ktx2
format with a specific compression and contain image data.
To generate such textures:
- Compressonator CLI and
Python3
are required - Create a folder, put
Tools/CreateKTX2.py
, create folder namedRaw
andCompressed
. - The script:
- scans files (with
INPUT_EXTENSIONS
) inRaw
folder - generates corresponding
.ktx2
file toCompressed
folder, preserving the hierarchy
- scans files (with
On RTGL1 initialization, RgInstanceCreateInfo::pOverridenTexturesFolderPath
should contain a path to the Compressed
folder.