Giter VIP home page Giter VIP logo

raytracer's Introduction

Raytracer

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

Features

General

  • Written in C++14
  • Developed for Windows and Linux
  • Optimized using SSE and AVX intrinsics (especially in performance-critical and low level math code)
  • Parsing scene description from a JSON file

Rendering

  • Low discrepancy sampling (scrambled Halton sequence)
  • Adaptive sampling (using more samples in noisy image areas)
  • Spectral rendering using hero wavelength method (Note: disabled with a macro 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)
  • Scene object types: Triangle meshes, Sphere, Box, Plane
  • 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)
    • Vertex Connection and Merging (Note: work in progress, not all lights and BSDFs are working properly)
    • Light Tracing (for debugging)
  • Supported light types: point, area (triangle or quad), spherical, directional, background

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
  • Supported pixel formats: 8-bit unsigned int, 32-bit float, 16-bit float, block-compressed BC1, BC4 and BC5
  • 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

raytracer's People

Contributors

witek902 avatar

Watchers

Baris avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.