Coder Social home page Coder Social logo

vga-group / tauray Goto Github PK

View Code? Open in Web Editor NEW
111.0 4.0 9.0 55.33 MB

The Tauray renderer

Home Page: https://webpages.tuni.fi/vga/

License: GNU Lesser General Public License v2.1

CMake 0.84% Python 0.90% GLSL 15.41% C++ 82.85%
lightfield path-tracing raytracing vulkan graphics siggraph-asia-2022

tauray's Introduction

Tauray

Sponza and lots of teapots rendered in Tauray.
The famous "Sponza" scene with teapots. 1920x1080 image (4096 spp, 4 bounces), rendered with Tauray in 15 seconds on a dual-GPU setup with RTX 3090 and RTX 2080 Ti.

Tauray is a real-time rendering framework, with a focus on distributed computing, scalability, portability and low latency. It uses C++17 and Vulkan, primarily relying on the VK_KHR_ray_tracing extension, but comes with a fallback rasterization mode that can be used on devices that do not have that extension.

Tauray development is led by the VGA research group in Tampere University. The project is described in a conference publication (DOI link), which includes performance benchmarks and more information on Tauray. A pre-print is available.

Measurements in the publication are done with the v1.0.0 release. For practical purposes however, we recommend always using the latest available release instead, as there are bug fixes and additional features included.

License

Tauray is licensed under LGPL version 2.1. You can find the license text in COPYING.LESSER. External dependencies in the external folder have their own licenses specified either at the start of each file or as separate license text files.

Features

  • Real-time path tracing (--renderer=path-tracer)
    • Accumulation mode (--accumulation)
    • Denoising (--denoiser=svgf or --denoiser=bmfr)
  • Offline rendering (--headless=output_file)
    • Animations with --animation
    • Output file type with --filetype=[png,exr]
  • DDISH-GI, as used in the DDISH-GI publication (--renderer=dshgi)
    • Remote probe rendering (--renderer=dshgi-server and --renderer=dshgi-client)
    • Note that scenes for DDISH-GI need to be authored to include the probe grid: use the included Blender glTF export plugin and place an irradiance volume!
  • Multi-GPU rendering (real-time and offline!)
    • All compatible GPUs are used by default (you can limit to one with --devices=0)
  • Light field rendering
    • Real-time for Looking Glass displays: --display=looking-glass
    • Offline: --camera-grid=w,h,x,y and --camera-recentering-distance=distance
  • VR rendering (--display=openxr)

And more, see the user manual for details.

Building

Clone the repository recursively with git clone --recursive https://github.com/vga-group/tauray/.

Tauray has been tested on the Ubuntu 22.04 operating system. Building on Ubuntu 22.04 can be done as follows:

  1. Install dependencies: sudo apt install build-essential cmake libsdl2-dev libglm-dev libczmq-dev libnng-dev libcbor-dev vulkan-tools libvulkan-dev vulkan-validationlayers libxcb-glx0-dev glslang-tools libassimp-dev
  2. cmake -S . -B build
  3. cmake --build build
  4. build/tauray my_scene.glb

Building with Windows is also possible but not recommended. You can use the CMakeLists.txt with Visual Studio. A vcpkg.json is provided in this repository to handle dependencies with Windows builds. Note that multi-GPU rendering is not supported on Windows.

Usage

To launch a simple interactive path tracing session with the included test model:

build/tauray test/test.glb --preset=accumulation

See the user manual for more detailed usage documentation.

Benchmarking with Tauray

To measure representative benchmarks with Tauray, please build a release build and disable validation:

  1. Delete your existing build directory (if applicable)
  2. cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
  3. cmake --build build
  4. build/tauray --validation=off -t my_scene.glb

You may also want to set --force-double-sided for better performance if your scene does not require single-sided surfaces. Also, remember to set --max-ray-depth appropriately for the type of benchmark, the default is quite high. It sets the number of bounces.

By default, Tauray will use all GPUs with support for the required extensions. If you wish to use a specific GPU on a multi-GPU system, use --devices=0 (or any other index; the first thing Tauray prints is the devices it picked.)

In the output with the -t flag, lines starting with HOST: are total frametimes, which you most likely want to measure. The first few frametimes of a run can be weird as in-flight frames haven't been queued properly and some initialization still runs, so please exclude those if possible. --warmup-frames can also be used for this purpose.

See the user manual for more detailed info on configuring Tauray for you benchmark setup.

Citation

If you use Tauray in a research paper, please cite our paper with the format below:

@inproceedings{Ikkala22,
    author={Ikkala, Julius and Mäkitalo, Markku and Lauttia, Tuomas and Leria, Erwan and Jääskeläinen, Pekka},
    title={Tauray: A Scalable Real-Time Open-Source Path Tracer for Stereo and Light Field Displays},
    year={2022},
    booktitle={SIGGRAPH Asia 2022 Technical Communications},
    series={SA '22 Technical Communications},
    location={Daegu, Republic of Korea},
    doi={10.1145/3550340.3564225},
    address={New York, NY, USA},
    publisher={Association for Computing Machinery},
    url={https://webpages.tuni.fi/vga/publications/Tauray2022.pdf}
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.