The Tungsten Renderer

Tungsten is a physically based renderer I originally wrote in early 2014 for the Image Synthesis Rendering Competition at ETH, where it won 1st place with the image pictured above. It is intended for offline rendering in graphics research and is still in development, at least whenever I find the time. It lives on Github.

Tungsten is written in C++11 and makes use of Intel's Embree ray tracing library for fast ray-primitive intersection tests. It was written with performance in mind and exploits multithreading and SIMD where possible. On top of low-level optimization, sophisticated integrators, multiple importance sampling and solid-angle-adaptive light selection reduce the overall runtime by battling noise, and adaptive sampling makes sure that effort is concentrated in the noisiest regions in the image. Nobody likes Phong shaded spheres anymore, which is why Tungsten supports many geometric shapes and material models to make scenes more interesting. Participating media are also supported, including an atmospheric medium that can render planets from space.

At its current state, Tungsten is more of academic interest than for actual use. Crucial features such as motion blur are missing, and the lack of documentation is making it difficult for anyone but myself to use the renderer. These are things that are being worked on, but progress tends to be slow due to a consistent lack of free time.

Feature list

Below is an incomplete list of the features implemented in the renderer. If you're really interested, there is also the detailed (boring, outdated) project report from summer 2014.

Supported integrators



Bidirectional Path Tracing

Primary Sample Space Metropolis Light Transport

Progressive Photon Mapping

Light Tracing

Photon Mapping

Path Tracing

Material models



Hair

Smooth coat (varnish on top of configurable material)

Microfacet dielectric (GGX, Beckmann or Phong)

Microfacet conductor (GGX, Beckmann or Phong)

Diffuse Fibers

Thin-sheet dielectric

Rough Conductor Wires

Oren-Nayar

Plastic

Smooth dielectric

Smooth conductor

Alpha mapped surfaces

Bump mapped surfaces

Mixed (blend between two materials)

Lambert

Phong

In many instances, material parameters can also be specified via texture.

Shapes

Triangle meshes

Bspline curves (ribbons, cylinders, half-cylinders, camera-facing flats)

Spheres

Quads

Disks

Infinite spheres (for environment maps)

Infinite spherical caps (for sun-like emitters)

Camera model

Depth of field

Shaped Bokeh (configurable via texture)

Cateye effect

Chromatic aberration

Tone mapping (Filmic, Reinhard, Gamma)

Input formats

Curves: HAIR, FIBER

Meshes: OBJ, WO3

Textures: HDR, JPG, PNG, TGA, BMP, GIF

Gallery

Model Credits