Raytracing
Never did raytracing before, but tried it now and Iām hooked :-)
Gallery
Some images I have made so far:
Features
List of implemented features:s
- Basic Features
- rays and viewport
- camera position and orientation
- depth-of-field
- gamma correction (fixed 2.0 correction)
- Primitives and Meshes
- spheres, boxes, planes
- sphere UV mapping
- triangle mesh rendering
- volumes / fog
- raymarched objects
- generic materials: diffuse, metal, glass, checkered diffuse
- procedural materials: fractals, etc.
- textured objects (texture images)
- Rendering and optimisations
- monte-carlo based sampling and materials
- russian roulette early exit
- multi-threaded rendering
- rotated and translated objects, and re-used objects (instancing)
- axis aligned box intersections
- bounding volume hyrarchy hit optimisations for scene objects
- bounding volume hyrarchy hit optimisations for triangles within a mesh
- optional memory manager (optimised small object allocations) to ensure objects are located close together in main memory
- Advanced Features
- cloud runner (tested on AWS and DigitalOcean)
- procedural/textured lights
Todo:
- triangle mesh loading (see https://github.com/assimp/assimp)
- procedural content using noise (https://github.com/Auburn/FastNoiseLite)
- replace axis-math with matrix math
- add shadow rays
- optisation through importance sampling (for lights)
- data based optimisations
- de-noising
- z-buffer and rasterised debug views (like viewing BVH volumes)
- support larger scenarios rendering multiple frames or multiple scenes per cloud VM (specific to cloud runner)
- optimize cloud VM promisioning (cloud-local images, smaller images, faster building, etc.)
Feature blog
Ramblings on cool features and implementation details. And, actually trying to write something down makes me think of improvements.
- Rendering with Qt
- Building with CMAKE
- Running in the cloud with docker-machine
- Raytracing basics
- Random number generation
- Job system
- [Awesome C++] [TODO]
- Profiling and optimisations [WIP]
- Advanced Raytracing [WIP]
- Hit optimisations using a Bounding Volume Hyrarchy [WIP]
- Coordinates, Axis & Matrices [WIP]
- Camera Model [WIP]