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 was originally started as a 3D 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, RaZ has evolved to be now more of a (basic) game engine rather than a simple 3D one.

If you’re interested in the project, 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 fill 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

Crytek Sponza (Blinn-Phong)
Crytek Sponza
Hylian shield (PBR/Cook-Torrance)
Hylian shield

Features

RaZ is entirely written in C++17 and architectured as an ECS (Entity-Component-System). It is compatible with Windows, Linux & macOS, and uses CMake as its build system.

  • Audio:
    • Sound (play, pause, …)
    • Positional listener
    • WAV import
  • Math:
    • Vectors
    • Matrices
    • Quaternions
    • Angles (degrees/radians)
    • Transformations (translation, rotation, scale)
  • Rendering:
    • OpenGL 3.3 or 4.5
    • Vulkan [in progress]
    • Material models:
      • Blinn-Phong
      • Cook-Torrance PBR (metallic/roughness)
    • Deferred rendering with a custom render graph
    • Camera (perspective/orthographic)
    • Light sources (point & directional)
    • Cubemap
    • Normal mapping
  • Physics:
    • Shapes:
      • Line
      • Plane
      • Sphere
      • Triangle
      • Quad
      • AABB (axis-aligned bounding box)
      • OBB (oriented bounding box) [in progress]
    • Shape/shape collision checks [in progress]
    • Ray/shape intersection checks [in progress]
    • Rigid body simulation [in progress]
  • Misc:
    • Meshes:
      • OBJ import/export
      • FBX import (using the FBX SDK)
      • OFF import
    • Images:
      • PNG import/export (using libpng)
      • TGA import
      • HDR import [in progress]
    • Windowing:
      • Window (using GLFW)
      • Overlay (using ImGui)
      • Keyboard/mouse inputs with custom callbacks
    • Threading:
      • Automatic by-thread split over a container (with either indices or iterators)
    • Debug: