RaZ
Modern & multiplatform 3D game engine
RaZ is a personal project I started in mid-2017, in my last years of study. I was eager to learn about computer graphics, and was really interested in image processing & offline rendering at the time.
RaZ has originally started as a 3D rendering engine toy project, intended solely for learning purposes. However, the more I was working on it, the more I wanted to keep doing so. Over time, it has evolved to be now more of a (basic) game engine rather than a simple rendering one.
As every proper engine has an editor, RaZ also has its own, RaZor. It does yet require a lot of work, as not much is possible at the moment, but several features are available and can be tinkered with.
If you’re interested, feel free to explore (and star ⭐) the project on GitHub. If you think of improvements or features you’d want to see in RaZ, don’t hesitate to file an issue or submit a pull request!
Some tutorials & explanations are available on the GitHub’s wiki. If you already know of RaZ and seek the documentation, you’re in luck: it’s right here!
A Discord server is also available, feel free to drop by if you have any question or just want to say hi:
Some examples
Below are shown several scenes and projects made with RaZ. Note that some have corresponding online demos; don’t hesitate to try them out!
Crytek Sponza (Blinn-Phong) | Hylian shield (PBR/Cook-Torrance) (demo) |
---|---|
Atmos - Atmospheric simulation (demo) | Midgard - Terrain generation (demo) |
---|---|
Features
RaZ is entirely written in C++, scriptable in Lua, and architectured as an ECS (Entity-Component-System). It is compatible with Windows, Linux & macOS, and can also be used for web-based applications using Emscripten.
Animation
- Skeleton data structure
- Animation support (in progress)
Audio
- Using OpenAL Soft
- Playing/pausing/stopping/repeating sounds
- Positional audio sources & listener
- Sound effects (reverberation, chorus, distortion, echo, …)
- Audio input (microphone) mono/stereo support
Data
- Bounding Volume Hierarchy (BVH) acceleration structure
- Directed graph structure
- Mesh signed distance field
- Dynamic bitset
- File formats:
Math
- Vectors, matrices & quaternions
- Angles (degrees/radians)
- Transformations (translation, rotation, scale)
- Noise (Perlin, Worley)
Physics
- Shapes (line, plane, sphere, triangle, quad, AABB, OBB)
- Shape/shape collision checks (in progress)
- Ray/shape intersection checks (in progress)
- Rigid body simulation (in progress)
Rendering
- OpenGL (4.6-3.3)
- Vulkan (in progress)
- PBR (Cook-Torrance) & legacy (Blinn-Phong) material models
- Deferred rendering, using a custom render graph
- Post effects: bloom, tone mapping, SSR, SSAO, … (in progress)
- Tessellation & compute shaders support
- Camera (perspective/orthographic)
- Light sources (point & directional)
- Windowing (window, keyboard/mouse inputs with custom callbacks), using GLFW
- Overlay, using ImGui & ImPlot
- Cubemap
- Normal mapping
Scripting
Misc
- Custom ECS (Entity Component System) implementation
- Uniformized platform-dependent path strings
- Logging utilities
- Multithreading utilities, thread pool implementation & parallelization functions
- Plugin utilities, to load dynamic libraries
- Compiler, enum, string, file, floating-point & type utilities
- Tracy profiler integration