Skip to content

Razakhel/RaZ

Repository files navigation

RaZ logo
RaZ

Modern & multiplatform 3D game engine in C++17


Linux build
Linux
Windows build
Windows
macOS build
macOS
WASM build
WebAssembly
Compilation
Unit tests No CI yet No CI yet N/A
Codacy
Codacy
Coveralls
Coveralls
Codacy status Coverage 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).

Lua logo 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)
Crytek Sponza Hylian shield

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
- 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:
    - Meshes:
        - glTF/GLB import (using fastgltf)
        - OBJ import/export
        - FBX import (using the FBX SDK)
        - OFF import
    - Images:
        - PNG, JPEG, BMP, TGA, HDR, GIF, PPM/PGM, PSD, PIC import (using stb_image)
        - PNG, JPEG, BMP, TGA, HDR export (using stb_image_write)
        - TGA import
    - Audio: WAV import/export
    - Animation: BVH import (in progress)
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
- Cubemap
- Normal mapping
Scripting - Lua scripting, using Sol2
XR - Virtual reality (VR) support (using the OpenXR SDK)
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 integration