Code Monkey home page Code Monkey logo

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}
}

tauray's People

Contributors

eero-lehtinen avatar erfanmo77 avatar juliusikkala avatar makitalo avatar pjaaskel avatar sasamiyatu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

tauray's Issues

validation errors

When running test.glb on Intel(R) Arc(tm) A770 Graphics I see multiple validation errors of following type:

Validation Error: [ VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03710 ] Object 0: handle = 0x55f2895b06e0, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x63ff8904 | vkCmdBuildAccelerationStructuresKHR:For each element of pInfos, its scratchData.deviceAddress member must be a multiple of VkPhysicalDeviceAccelerationStructurePropertiesKHR::minAccelerationStructureScratchOffsetAlignment. The Vulkan spec states: For each element of pInfos, its scratchData.deviceAddress member must be a multiple of VkPhysicalDeviceAccelerationStructurePropertiesKHR::minAccelerationStructureScratchOffsetAlignment (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03710)
(minAccelerationStructureScratchOffsetAlignment for this device is 64)

OpenXR and VR instruction

Hi, thanks a lot for the wonderful project. I would like to explore the real-time path tracing part on a VR. I have currently a HTC Vive Pro Eye. Could you give some instructions about the openxr part? I had a brief look over your paper and the user manual. Unfortunately could not find clear instructions.

Library API

It would be very useful to make the core of Tauray operate more like a library, where it could be integrated as a part of other projects.

One of the potential issues with this is that many parts of Tauray may currently assume that the number of objects or materials in the scene does not change while the program is running. Tauray also has this kind of odd architecture where it avoids re-recording command buffers like plague. This most likely won't work well if the scene composition constantly changes.

One thing I would link with this is that I really want to get rid of the object-oriented, inheritance-based node design and replace that stuff with an entity-component style approach. I've done this once in a non-public Vulkan renderer, and it seemed to make the scene handling much simpler in the end.

  • Move from scene class hierarchy to ECS
  • Ensure everything works when scene composition changes during runtime
  • Specify a public API

USD Hydra render delegate

It should be possible to use Tauray as a USD Hydra backend. This would be a path to allow running Tauray within Blender, which could be nice to have.

In practice, needs #27 first.

Scene file used in the paper

Great Work!
Can you kindly share the scene files used for comparisons between ddgi and DDISH-GI?

Best Regards

ANARI implementation

Supporting ANARI would be really cool, but I have no use case in mind currently. Low priority due to that.

Requires #27 first.

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.