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)
Crytek Sponza Hylian shield
Atmos - Atmospheric simulation (demo) Midgard - Terrain generation (demo)
Atmos Midgard

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

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