/TaKe

๐ŸŽ A Path Tracer

Primary LanguageC++MIT LicenseMIT

๐ŸŽ TaKe Renderer

A path tracer based on UCSD CSE 168 renderer Torrey written in C++ 17. TaKe (็ซน, ใŸใ‘) means bamboo in Japanese. It is also a radical in the main author's Chinese last name ็ฎก.

This renderer is implemented from scratch except for the scene parser and some basic mathematical object classes.

Key Features

  • Monte Carlo path tracing
  • Bounding volume hierarchies (BVHs) acceleration
  • Textures
  • Microfacet BRDFs
  • Multiple importance sampling (both One-sample model and Multiple-sample model)
  • Importance sampled environment light / IBL
  • Multithreading acceleration
  • Mitsuba scene format parser
  • std::variant based polymorphism

Our primary objective is to seamlessly incorporate the key features from the following projects, all of which share the same author with the TaKe renderer:

Build

All the dependencies are included. Use CMake to build.

git clone https://github.com/TaKeTube/TaKe.git
mkdir build
cd build
cmake ..

It requires compilers that support C++17 (gcc version >= 8, clang version >= 7, Apple Clang version >= 11.0, MSVC version >= 19.14).

Scenes

You could also download the scenes from the following Google drive link: https://drive.google.com/file/d/1SrGaw6AbyfhPs1NAuRjxSEQmf34DPKhm/view?usp=sharing.

Run

Try

cd build
./take scenes/cbox/cbox.xml

This will generate an image "image.exr".

To view the image, use hdrview, or tev.

Gallery

Below are some images rendered by the above renderers:

room

Self-designed scene made using assets from https://polyhaven.com/

Disney principled BSDF

array

lorenz_attractor

Self-designed scene procedurally generated by Houdini

Heterogeneous volumetric rendering

colored_smoke

box_vol

hand

Self-designed scene

ReSTIR DI

restir

restir_scene

Self-designed scene

Acknowledgement

The renderer is based on Prof. Tzu-Mao Li's UCSD CSE 168 renderer Torrey.

It is heavily inspired by Lajolla, pbrt, mitsuba, the ray tracing series, and darts.

We use pugixml to parse XML files.

We use stb_image and tinyexr for reading & writing images.

We use miniz for compression & decompression.

We use tinyply for parsing PLY files.

Many scenes in the scenes folder are downloaded from: