Render Comparison on GitHub

26 Mar 2020

GitHub Repository

Times are changing, so I started a new repository, called render_comparison on GitHub.

A Short History

Before the year 2000 my rendering research was purely a hobby, but the main idea was to get hold of as many renderers I could and render as many images as I was able to. There was no science in it, just joy to learn about rendering and what was available at that time.

In 2000 I made a big decision. I left my well paid job and started to work for Ton Roosendaal, or better for his company, NaN (Not a Number), in the Netherlands. During that time I wrote a lot of Python scripts to import and export data into/from Blender. This was also the first time I worked from home (as many of you are currently forced to do). First home was in Berlin, Germany, every 6 weeks I travelled to Amsterdam or Eindhoven, then I moved my home to London, UK, until NaN went bancrupt and I had to find a new job.

From that time on rendering research (or research in general) was my job (or at least part of my job). I worked for Moving Picture Company, Mill Film, the former film department of The Mill, both in London. Then I moved to Greater Los Angeles, USA, and worked for Digital Domain and mental images (later part of Nvidia). I moved back to Berlin (still working for Nvidia), to London (back to The Mill), and finally back to Berlin.

In the meantime rendering moved away from REYES (e.g. early RenderMan by Pixar), or pure ray tracing (e.g. mental ray by mental images), towards (uni-directional) path tracing (e.g. Arnold by Solid Angle, now Autodesk) and/or other global illumination techniques. If you want to learn about those, the best advice I can give you is to read the PBRT book (since October 2018 the full text is available for free in an online edition). The C++ code and my own Rust implementation is there to learn from ...

Back to the Repository

I went through several phases and some are still online, others are lost in time and space. Lets forget about the time before global illumination (it's still worth to study and have knowledge about it). One approach was to start with Radiance (images taken from my own slides):

Slide from
Blender Conference in 2014

And somehow go from there to other global illumination (GI) renderers:

Slide from Blender Conference in 2014

Traces of this approach can be found here:

  1. Radiance vs. YouNameIt
  2. export_multi
  3. rs-pbrt-test-scenes
  4. download section of this web page

Now, let's dig into the new repository by looking at one of the simplest scenes to start with.

The Cornell Box

Cornell
Box rendered by Cycles

Blender

Cycles (free)

Just load the provided scene (cornell_box/blend/cornell_box.blend from the repository) and press F12. The screenshot below shows Blender version 2.79, but higher Blender versions should work as well:

Windows 10
screenshot of the Blender v2.79 Cornell Box.

appleseed (free)

After installing blenderseed and selecting appleseed as your Render Engine you should be able to just press F12 to render:

Windows 10
screenshot of Blender v2.82 and appleseed.

Indigo Renderer (commercial)

After installing Blendigo and selecting Indigo as your Render Engine you should be able to just press F12 to render:

Windows 10
screenshot of Blender v2.82 and Indigo Renderer.

LuxCoreRender (free)

After installing BlendLuxCore and selecting LuxCore as your Render Engine you should be able to just press F12 to render:

Windows 10
screenshot of Blender v2.82 and LuxCoreRender.

OctaneRender (commercial)

There is a OctaneRender for Blender plugin. Windows version only. The download links provided (on their user forum) are for Enterprise License Holders. For me that wasn't really a plug-in (or addon as they call it in Blender world), but rather a specially compiled Blender v2.81 with Octane (Render Engine) support (press F12).

Windows 10
screenshot of Blender v2.81 and OctaneRender.

Houdini

Even though there was a RenderManForBlender addon, it looks like it's kind of abandoned, therefore I went down a different route and you need a Houdini Indie license for rendering e.g. with Pixars RenderMan (PRMan).

RenderMan (commercial)

There is a non-commercial RenderMan version which works with Houdini (Indie):

Windows 10 screenshot
of Houdini 18 with PRMan 23.

Standalone

Maxwell (commercial)

For Maxwell you need a commercial license (at least that's what I got). On the left you see Maxwell Studio, on the right Maxwell Render, both using two GeForce RTX 2080 Ti cards for rendering.

Windows 10
screenshot of Maxwell Studio and Maxwell Render.

Guerilla Render (commercial)

Even though the Guerilla Render is a commercial product you can get an unlimited license for free to discover its features.

Windows 10 screenshot of Guerilla Render.

PBRT (free)

For PBRT you have to build the renderer yourself by compiling it from sources (either follow the instructions for the C++ code or follow the instructions for Rust on the getting started with rs-pbrt page). After that you can render like this:

$ cd cornell_box/pbrt
# C++
$ ~/builds/pbrt/release/pbrt cornell_box.pbrt
pbrt version 3 (built Apr  1 2019 at 17:45:44) [Detected 28 cores]
Copyright (c)1998-2018 Matt Pharr, Greg Humphreys, and Wenzel Jakob.
The source code to pbrt (but *not* the book contents) is covered by the BSD License.
See the file LICENSE.txt for the conditions of the license.
...
$ display -gamma 2.2 pbrt.exr
# Rust
$ ~/git/github/rs_pbrt/target/release/rs_pbrt cornell_box.pbrt
pbrt version 0.8.1 [Detected 28 cores]
Copyright (c) 2016-2020 Jan Douglas Bert Walter.
Rust code based on C++ code by Matt Pharr, Greg Humphreys, and Wenzel Jakob.
...
$ display pbrt.png

A little known fact is that I do provide two executables which allow you to render with rs-pbrt and Arnold (see Blender to Arnold blog):

# rs-pbrt
# -s, --samples <samples> pixel samples [default: 1]
# -i, --integrator <integrator>
#     ao, directlighting, whitted, path, bdpt, mlt, sppm, volpath
$ ./target/release/examples/parse_blend_file -s 16 -i path cornell_box.blend
$ display pbrt.png

The --integrator <integrator> option allows to render with:

  1. ao - Ambient Occlusion (AO)
  2. directlighting - Direct Lighting
  3. whitted - Whitted’s Ray-Tracing
  4. path - (Unidirectional) Path Tracing
  5. bdpt - Bidirectional Path Tracing (BDPT)
  6. mlt - Metropolis Light Transport (MLT)
  7. sppm - Stochastic Progressive Photon Mapping (SPPM)
  8. volpath - Path Tracing (Participating Media)

The parse_blend_file should work on every non-renderer-specific .blend file I provide in the repository, but not on every .blend file in general. The Arnold version is not ready for public consumption yet and there is a Arnold-For-Blender on the horizon.