Skip to content

Witek902/Raytracer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Physically Based Software Renderer

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages