Awesome
<h1 align="center"> <img alt="RaZ logo" src="https://i.imgur.com/rwGGcpr.png" /> <br/> RaZ </h1> <h4 align="center">Modern & multiplatform 3D game engine in C++17</h4><table> <thead> <tr> <th></th> <th> <img alt="Linux build" src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/TuxFlat.svg/800px-TuxFlat.svg.png" align="center" height="30" /><br /> Linux </th> <th> <img alt="Windows build" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Windows_logo_-_2012_%28dark_blue%2C_lines_thinner%29.svg/414px-Windows_logo_-_2012_%28dark_blue%2C_lines_thinner%29.svg.png" align="center" height="30" /><br /> Windows </th> <th> <img alt="macOS build" src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Apple_logo_black.svg/245px-Apple_logo_black.svg.png" align="center" height="30" /><br /> macOS </th> <th> <img alt="WASM build" src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/WebAssembly_Logo.png/150px-WebAssembly_Logo.png" align="center" height="30" /><br /> WebAssembly </th> </tr> </thead> <tbody> <tr> <th align="center">Compilation</th> <td align="center"><a alt="Linux build status" href="https://github.com/Razakhel/RaZ/actions"><img src="https://github.com/Razakhel/RaZ/actions/workflows/RaZ.yml/badge.svg?branch=master" /></a></td> <td align="center"><a alt="Windows build status" href="https://github.com/Razakhel/RaZ/actions"><img src="https://github.com/Razakhel/RaZ/actions/workflows/RaZ.yml/badge.svg?branch=master" /></a></td> <td align="center"><a alt="macOS build status" href="https://github.com/Razakhel/RaZ/actions"><img src="https://github.com/Razakhel/RaZ/actions/workflows/RaZ.yml/badge.svg?branch=master" /></a></td> <td align="center"><a alt="WASM build status" href="https://github.com/Razakhel/RaZ/actions"><img src="https://github.com/Razakhel/RaZ/actions/workflows/RaZ.yml/badge.svg?branch=master" /></a></td> </tr> <tr> <th align="center">Unit tests</th> <td align="center"><a alt="Linux tests build status" href="https://github.com/Razakhel/RaZ/actions"><img src="https://github.com/Razakhel/RaZ/actions/workflows/RaZ.yml/badge.svg?branch=master" /></a></td> <td align="center">No CI yet</td> <td align="center">No CI yet</td> <td align="center">N/A</td> </tr> </tbody> </table>
Summary
RaZ comes from, as you may have noticed, my username Razakhel. This was also meant as a pun, since in french RàZ is the acronym for "Remise à zéro", which basically means "reset". I didn't have any particular intent behind this double meaning. Except maybe hoping that using RaZ might reset your mind because of its awesomeness? Oh well.
Written in modern C++ (17), ECS driven, it is primarily developed for learning purposes. It is intended to be very intuitive & easy to use and tinker with, while trying to stay as optimized & modular as possible.
The engine is available under Windows, Linux & macOS; it can also run in a web browser through WebAssembly (using Emscripten).
<img alt="Lua logo" src="https://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Lua-Logo.svg/30px-Lua-Logo.svg.png" height="16" width="16" /> The engine can be used with Lua, a scripting language that is very simple to both learn & use. For more information, see the dedicated wiki page.
📖 If you want to get started with RaZ, head to the wiki. For the documentation, look over here!
🖥️ RaZor, an editor also multiplatform, is available to manipulate the engine through a graphical interface.
💬 A Discord server dedicated to RaZ & RaZor is also available! Feel free to come by to follow the development, ask any question, or just say hi 👋
Gallery
Crytek Sponza | Hylian shield (PBR) |
---|---|
More examples are available here.
Projects using RaZ
Name | Maintainer/creator | Description |
---|---|---|
Atmos | Razakhel | Atmospheric simulation |
Midgard | Razakhel | Terrain procedural generation |
Yggdrasil | Razakhel | Tree & foliage procedural generation |
If you also are working on some on your own, feel free to get in touch so that I can add them to the list.
Features
Module | Features |
---|---|
Animation | - Skeleton data structure<br/>- Animation support (in progress) |
Audio | - Using OpenAL Soft<br/>- Playing/pausing/stopping/repeating sounds<br/>- Positional audio sources & listener<br/>- Sound effects (reverberation, chorus, distortion, echo, ...)<br/>- Audio input (microphone) mono/stereo support |
Data | - Bounding Volume Hierarchy (BVH) acceleration structure<br/>- Directed graph structure<br/>- Mesh signed distance field<br/>- Dynamic bitset<br/>- File formats:<br/> - Meshes:<br/> - glTF/GLB import (using fastgltf)<br/> - OBJ import/export<br/> - FBX import (using the FBX SDK)<br/> - OFF import<br/> - Images:<br/> - PNG, JPEG, BMP, TGA, HDR, GIF, PPM/PGM, PSD, PIC import (using stb_image)<br/> - PNG, JPEG, BMP, TGA, HDR export (using stb_image_write)<br/> - TGA import<br/> - Audio: WAV import/export<br/> - Animation: BVH import (in progress) |
Math | - Vectors, matrices & quaternions<br/>- Angles (degrees/radians)<br/>- Transformations (translation, rotation, scale)<br/>- Noise (Perlin, Worley) |
Physics | - Shapes (line, plane, sphere, triangle, quad, AABB, OBB)<br/>- Shape/shape collision checks (in progress)<br/>- Ray/shape intersection checks (in progress)<br/>- Rigid body simulation (in progress) |
Rendering | - OpenGL (4.6-3.3)<br/>- Vulkan (in progress)<br/>- PBR (Cook-Torrance) & legacy (Blinn-Phong) material models<br/>- Deferred rendering, using a custom render graph<br/>- Post effects: bloom, tone mapping, SSR, SSAO, ... (in progress)<br/>- Tessellation & compute shaders support<br/>- Camera (perspective/orthographic)<br/>- Light sources (point & directional)<br/>- Windowing (window, keyboard/mouse inputs with custom callbacks), using GLFW<br/>- Overlay, using ImGui<br/>- Cubemap<br/>- Normal mapping |
Scripting | - Lua scripting, using Sol2 |
XR | - Virtual reality (VR) support (using the OpenXR SDK) |
Misc | - Custom ECS (Entity Component System) implementation<br/>- Uniformized platform-dependent path strings<br/>- Logging utilities<br/>- Multithreading utilities, thread pool implementation & parallelization functions<br/>- Plugin utilities, to load dynamic libraries<br/>- Compiler, enum, string, file, floating-point & type utilities<br/>- Tracy integration |