Skip to content

Latest commit

 

History

History
85 lines (65 loc) · 2.74 KB

README.md

File metadata and controls

85 lines (65 loc) · 2.74 KB

!!! 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