• Stars
    star
    111
  • Rank 314,510 (Top 7 %)
  • Language
    C++
  • License
    MIT License
  • Created over 7 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Physically Based Software Renderer

!!! NOTE !!!

The project is not developed in this repository anymore. The source code was moved into NFEngine project: https://github.com/nfprojects/nfengine/tree/devel/Src/Engine/Raytracer

Raytracer

A side project which aims to build an efficient photorealistic software renderer.

Features

General

  • Written in C++14
  • Developed for Windows and Linux
  • Highly optimized using SSE and AVX intrinsics
  • Parsing scene description from a JSON file

Rendering

  • Low discrepancy sampling (scrambled Halton sequence)
  • Blue noise dithered sampling
  • Adaptive rendering (using more samples in noisy image areas)
  • Spectral rendering using hero wavelength method (Note: disabled by default)
  • Debug rendering mode (for visualizing depth, normal vectors, material parameters, etc.)
  • Camera simulation:
    • Depth of Field (circle or polygonal bokeh)
    • Barrel distortion
    • Motion blur

Geometry

  • Bounding Volume Hierarchy (BVH) used for scene and mesh traversal (two levels of BVH)
  • Supported shape types: triangle meshes, sphere, box, rectangle
  • Full per-object motion blur (translational and rotational)
  • Both single-ray and AVX-optimized stream packet traversal

Lighting

  • Supported light transport algorithms:
    • Naive Path Tracing (sampling only BSDF)
    • Path Tracing with multiple importance sampling (sampling both lights and material BSDF)
    • Bidirectional Path Tracing (with MIS)
    • Light Tracing (for debugging)
  • Supported light types: point, directional, background, area (any shape)

Materials

  • Physically based BSDFs: diffuse, metal, dielectric, plastic
  • Cook-Torrance BSDF for specular reflection with GGX normal distribution
  • Transparency and refraction
  • Normal mapping support

Textures

  • 2D bitmap textures
  • Supports most of DXGI formats, including bit-packed formats, BC1, BC4 and BC5 block compression
  • Supported file formats: BMP, DDS, EXR (thanks to https://github.com/syoyo/tinyexr library)

TODO list

  • Better material model and multilayer materials (e.g. introduce Disney-like "principled" material)
  • Procedural textures
  • Volumetric rendering
  • Optimize traversal and shading with SSE/AVX
  • Port to ARM NEON