Skip to content

shizukachan/RayTracedGL1

 
 

Repository files navigation

RTGL1

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.

Build

  1. Requirements:

  2. Clone the repository

    • git clone https://github.com/sultim-t/RayTracedGL1.git
  3. 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 enable RG_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 or Build/x64-Release
  4. Build

    • cmake --build .
  5. Build shaders

    • Run Source/Shaders/GenerateShaders.py with Python3, it will generate SPIR-V files to Build folder

Notes:

  • 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

Tools

Shader development

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.

Textures

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:

  1. Compressonator CLI and Python3 are required
  2. Create a folder, put Tools/CreateKTX2.py, create folder named Raw and Compressed.
  3. The script:
    1. scans files (with INPUT_EXTENSIONS) in Raw folder
    2. generates corresponding .ktx2 file to Compressed folder, preserving the hierarchy

On RTGL1 initialization, RgInstanceCreateInfo::pOverridenTexturesFolderPath should contain a path to the Compressed folder.

Projects

Screenshots

Screenshot 00 Screenshot 01

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 59.0%
  • C++ 37.6%
  • Python 1.8%
  • Objective-C 0.9%
  • GLSL 0.4%
  • CMake 0.2%
  • Awk 0.1%