Rutile is four rendering engines combined into one, it can be broken into two main components:
Currently Rutile supports four renderers:
The OpenGl renderer uses the standard OpenGl rendering pipeline and implements both phong and solid shading
The CPU Ray tracer is mostly a proof of concept, it represents each object in the scene as a sphere and draws them with solid shading.
This is the primary renderer of Rutile, it implements a few key features:
- Uses both top level, and bottom level acceleration sturctures to improove rendering times.
- A complex material system including:
- Diffuse materials
- Both one way, and regular mirrors
- Dielectrics
- Emmisive materials
- Accumulation of pixel data across multiple frames
This is one of my favrioute scenes rendered with the GPU Ray Tracer, it features a modified Cornell box, that has all of its wall replaced with one way mirrors, it allows us to see in, but all the rays still bounce around inside creating what looks like dragons and teapots that go on forever.
The voxel ray tracer uses a sparse octree to store a voxelized version of each scene, and then applies the same materials present in the GPU ray tracer. The current voxelization algorithim is a work in progress, but works decently well when triangles are small.
This is the same dragon model as seen elsewhere, except that it is voxelized to be 1024 voxels wide. This image shows off some of the flaws with the voxelization algorithim, with many small bumps being visible across the dragon.
Hot swapping is a key feature of Rutile, with just a click of a button, you can change from one renderer to another, while still keeping the same camera position, FOV, and direction, aswell as which scene is selcted. This makes it really easy to show off the different renderers side by side, here are some examples:
This is a very famous dragon model, which has been simplified down to only have 80 thousand triangles, instead of the normal 800 thousand.
The classic Cornell Box.
This image shows off some of the issues with the current voxelization algorithim.
This is my custom take on the Cornell Box, with a little bit more complexity
This image shows off some of the issues with the current voxelization algorithim.
The framework holds the renderers together, it includes a basic GUI that facilitates many things including:
- Hot swapping between renderers
- Changing framework specific settings
- Changing renderer specific settings
- Modifiing the current scene
- Modifiing current materials