Rendu
A lightweight rendering engine for experimentations
|
⚠️ Rendu has recently been moved from OpenGL to Vulkan. This is a work in progress: all apps should be running properly albeit at subpar performances. Improvements will be added in the near future. The legacy version can be found on the
opengl
branch.
Rendu is a rendering engine designed for experimentation. The computer graphics academic and industrial litterature is full of interesting techniques and approaches than can be cumbersome to implement without some basic building blocks. This project aims to provide those building blocks, along with examples of interesting methods or papers. It also contains more general demo applications, such as a small snake game or a gamepad configurator. See it in action: video (Youtube).
Rendu requires Vulkan 1.1 and builds on macOS (main test machine), Windows (regular testing) and Linux. After cloning the Rendu repository, see the Building section to get the engine running! You can also check the full documentation.
Basic resources to run each project are included in this repository, but you can download many additional scenes from an auxiliary repository for some of the applications.
Name | Description |
---|---|
Physically based rendering | Real-time rendering of a scene with 'physically-based' materials (GGX BRDF introduced in Microfacet Models for Refraction through Rough Surfaces, Walter et al., 2007, with support for anisotropy, clearcoat, subsurface...), using deferred or forward rendering, real-time lighting environment and shadows update, and an HDR pipeline with bloom, depth of field and ambient occlusion. |
Path Tracer | Offline unidirectional path tracing for textured materials using Lambert+GGX BRDF with importance sampling. Supports stratified sampling, jittering, next event estimation, environment lighting contribution, emissive objects. Relies on a raycaster with a BVH for fast intersection queries against triangular meshes. Comes with an interactive viewer where the BVH levels can be displayed, and the camera placed for rendering. |
Island and ocean rendering | Real-time rendering of an ocean and island, using tessellation, Gerstner waves, custom sand and water shading. Underwater rendering is achieved using absorption/scattering tables, depth based blur and caustics mapping. Sand rendering is performed using high-frequency detail data and triplanar mapping. |
Image Filtering | Apply filters to an image, such as gaussian blur, box-blur, approximate flood-fill (Jump Flooding in GPU with Applications to Voronoi Diagram and Distance Transform, Rong et al., 2006) and poisson filling (Convolution Pyramids, Farbman et al., 2011), etc. |
Shader playground | Interactive shader viewer with editable inputs (uniforms, textures) and camera parameters for raymarching, noise generation,... |
Atmospheric scattering | Realistic atmosphere rendering with Rayleigh and Mie scattering (Precomputed Atmospheric Scattering, Bruneton et al., 2008). Support on-the-fly lookup table updates and export. |
Snake Game | A basic game of snake, demonstrating game menus, player state, batched rendering. |
Stencil demo | An example of using the stencil buffer for counting primitives, creating a black and wide stylized scene rendering. |
Name | Description |
---|---|
Image viewer | Basic image viewer and editor for LDR and HDR images, supporting rotations, channels toggling, color picking. |
BRDF Estimator | Compute data for image-based lighting from an environment map: pre-convolved irradiance, BRDF look-up table, ambient lighting spherical harmonics decomposition. |
Controller mapper | Interface to create and edit controller button/stick mappings. |
Shader validator | Perform per-shader compilation against the GPU driver and reports errors in an IDE-compatible fashion. |
Playground | Simple application setting up a rendering context for small experimentations. |
This project use premake5
(premake.github.io) for generating the workspace and projects files. After cloning Rendu, move to the root of the repository and run
premake5.exe [vs2019 | xcode | make | ...]
To generate the desired workspace in the build
directory.
The documentation (access it at docs/index.html
) relies on Doxygen being installed. Generate it with
premake5 docs
You can clean the build directory with
premake5 clean
All non-system dependencies are compiled directly along with the projects. The only exception is gtk3
on Linux.
On a more detailed level, here are the main features you will find in Rendu.
I would like to add some additional features to Rendu in the near future, mainly to get a better grasp of some techniques and allow for more experimentations.
On a more down-to-earth level, some engineering tasks could also help improve the engine.