kosua20 / Rendu
Projects that are alternatives of or similar to Rendu
Rendu Documentation
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 OpenGL 4 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.
Projects
Applications
Name | Description |
---|---|
Physically based rendering |
![]() |
Path Tracer |
![]() |
Island and ocean rendering |
![]() |
Image Filtering |
![]() |
Shader playground |
![]() |
Atmospheric scattering |
![]() |
Snake Game |
![]() |
Stencil demo |
![]() |
Tools
Name | Description |
---|---|
Image viewer |
![]() |
BRDF Estimator |
![]() |
Controller mapper |
![]() |
Shader validator |
![]() |
Playground |
![]() |
Building
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.
Features
On a more detailed level, here are the main features you will find in Rendu.
- Window and graphics context setup.
- GPU objects creation and management (shaders, textures, buffers).
- Resources handling and packing.
- Shader validation at compilation time, with automatic location handling.
- Input management with controllers support.
- 3D rendering, including per-fragment shading, normal maps, parallax mapping.
- Lights: omni/spots/directional lights, batched variance shadow mapping for all lights.
- Environment lighting, using cubemaps updated in real-time with optional parallax correction, preconvolved irradiance maps and spherical harmonics (also updated on the fly).
- Linear lighting pipeline, with HDR, bloom, tonemapping and gamma correction.
- Depth of field with controllable focal plane and in-focus band.
- Screen space techniques: antialiasing (FXAA), ambient occlusion.
- Image processing techniques, such as fast gaussian blur, Poisson inpainting, flood filling.
- 2D interface rendering (buttons, checkboxes) with support for font distance fields.
- A raycaster CPU implementation using a bounding volume hierarchy.
- Path tracer with GGX importance sampling.
- Generation and rendering of a terrain using Perlin noise, erosion and fixed grid geometry.
- Ocean rendering using a tesselated plane, far-distance proxy and absorption/scattering look-up table.
Planned
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.
- Screen-space reflections and shadows (raymarching against the depth buffer).
- Local light probes with regions.
- Temporal Antialiasing with reprojection and clamping.
- Particle effects (updated on the GPU).
- Volumetric effects, such as godrays and lit fog.
- Support interesting controllers (MIDI controllers, PS4 light bar and touchpad,...)
On a more down-to-earth level, some engineering tasks could also help improve the engine.
- Cleanup the way materials are handled right now.
- Add a specialized SceneApp, abstract frustum culling with draw lists?
- Potential move to Vulkan?