Ottocento Renderer is a study project developed by Lucas M. with the intent of learning the building blocks of Raytracing and Graphics Programming in C++. The core idea is to build a basic rendering application with a codebase that can be used as a model for new experiments, mainly focused on learning the algorithms, architecture/design patterns, performance optimizations and math related to the different sides of computer graphics. It is important to notice that, since this is a study project, most of the features of a regular rendering application will be missing, as well as sophisticated optimization algorithms. Still, I hope to learn each concept to the best of my ability as I go.
This project is highly resourced from The Cherno's Ray Tracing series, available in his YouTube Channel, as well as using the RayTracing in One Weekend book, also recommended by Cherno. Both are really great to understand many of the core concepts of RayTracing. I will also leave other links in the Resources
topic.
This application uses an app template from Walnut, developed by Studio Cherno — unlike the example within the Walnut repository, this keeps Walnut as an external submodule and is much more sensible for actually building applications. See the Walnut repository for more details.
Once you've cloned, run scripts/Setup.bat
to generate Visual Studio 2022 solution/project files. Your app is located in the WalnutApp/
directory, which some basic example code to get you going in WalnutApp/src/WalnutApp.cpp
.
- To see how we style our code, please refer to the Code Style Guide.
- A proper development report with my progress is in the works.
- Simple functioning camera.
- Moveable Camera with WASD + Mouse controls.
- Ray casting and Sphere Intersection.
- Pathtracing accumulation.
- Multiple lights in a scene with the possibility to spawn more lights and control its parameters.
- Multiple objects in a scene with the possibility to spawn more objects and control its parameters.
- Physically Based BRDF Materials wiht Schlick GGX calculation.
- Metallic Materials using the same BRDF Materials as above.
- Camera Depth of Field Blur (Still in the need of being enhanced).
- Basic Multithreading serialization optimization.
- Bounding Volume Hierarchies (BVH) optimization.
- Texture Mapping.
- Rendering Quadrilaterals.
- Cornell Box simple scene for testing.
- More robust light controls with emissive materials.
- Rendering Triangles.
- Global Illumination.
- Volumes, Smoke and Fog Boxes.
- Scene loading from other software.
- The Cherno Ray Tracing series.
- RayTracing in One Weekend
- Scratch a Pixel 4.0: Learn Computer Graphics Programming
- Stanford CS348b Lecture 12 — Reflection Models
- Physically Based Rendering // OpenGL Tutorial #43
- Learn OpenGL PBR Ligthing
- Real Shading in Unreal Engine 4 (Brian Karis)
- Kohi #034: Loading and Swapping Textures (Vulkan Game Engine Series)
- Coding Adventure: Optimizing a Ray Tracer (by building a BVH)