Home

Awesome

<h1 align="center"> <img alt="RaZ logo" src="https://i.imgur.com/rwGGcpr.png" /> <br/> RaZ </h1> <h4 align="center">Modern &amp; multiplatform 3D game engine in C++17</h4>
<table> <thead> <tr> <th></th> <th> <img alt="Linux build" src="https://www.screenconnect.com/Images/LogoLinux.png" align="center" height="30" width="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" width="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" width="25" /><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" width="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>
<img alt="Codacy" src="https://seeklogo.com/images/C/codacy-logo-1A40ABD314-seeklogo.com.png" align="center" height="30" width="30" /><br />Codacy<img alt="Coveralls" src="https://avatars3.githubusercontent.com/ml/318?s=140&v=4" align="center" height="30" width="30" /><br />Coveralls
Codacy statusCoverage status

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 SponzaHylian shield (PBR)
Crytek SponzaHylian shield

More examples are available here.

Projects using RaZ

NameMaintainer/creatorDescription
AtmosRazakhelAtmospheric simulation
MidgardRazakhelTerrain procedural generation
YggdrasilRazakhelTree & 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

ModuleFeatures
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
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