Skip to content

drcd1/kurayami_renderer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

k u r a y a m i

A path tracer with an emphasis on advanced techniques for bidirectional rendering and path guiding

sample render

Sample render of "Bathroom" by nacimus

What is kurayami

It's my experimental bidirectional path tracer that I developed while doing my master's thesis with the topic: "Multiple Importance Sampling Weights for Metropolised Bidirectional Rendering Algorithms". The base renderer is a very flexible Vertex Connection and Merging/Unified Path Sampling [Georgiev et al, 2012,Hachisuka et al, 2012] implementation.

This experimental renderer seeks to address an issue found in MCMC renderers, which is that the "Balance Heuristic", used to compute relatively efficient MIS weights that are essential to decrease the variance in the renders, cannot be used accurately, as the sampling probability density of a MCMC chain is unknown.

The implentation of the final algorithm (src/renderer/vcm2.cpp) is essentially a combination of prior work by Grittmann et al [2019] and Šik et al [2016]. We found that we could sometimes get significantly improved results, in particular in areas of rough caustics.

results

The results of the final algorithm (last three images on the right) show some mild improvements over previous methods.

The codebase also implements some crude path-guiding techniques, as one of the original goals of the work was to mix path-guiding and MCMC methods in a novel way.

interactive tools

Optionally, the renderer includes interactive tools (with a basic real time renderer in Vulkan), which were particularly useful for visual debugging of the path-guiding data structures.

Should I use it

Probably not... at least not yet. It's here as a reference implementation of the work done in my Master's Thesis, though I hope I can extend it to something that can actually be useful for other people.

Dependencies

  • CMake OR scons
  • Embree
  • stblib
  • tinyexr

If you would like to compile the interactive tools, then you'll also need

  • glfw
  • vulkan
  • imgui
  • vickyr (custom vulkan renderer - link will be added soon)

How to compile

(Note: the compilation was tested on the latest versions of debian (clang and gcc) and windows (clang and msvc))

using scons

  • Configure the (absolute) paths to the libraries in config.py
  • run scons debug=${A} target=${B}, where ${A} is 'debug' or 'release', and ${B} is 'min' or 'tools'

using CMake

  • Configure the (absolute) paths to the libraries in cmake/config.cmake
  • run the cmake uild normaly

Why the name

I would have called it "hikari", the japanese word for light, but unfortunately my code is not as "simple and clean" as I'd like it to be.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages