Skip to content

ErfanMo77/Syndra

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

388 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Syndra Engine

Syndra is an early-stage 3D game engine with a focus on real-time rendering. The default renderer is now Vulkan 1.4 (dynamic rendering + synchronization2), with OpenGL kept as a fallback backend.

Motivation

Syndra is my bachelor's thesis project, where I wanted to study how to build 3D game engines. The purpose of this project is not to make 3D games; rather, my primary motivation for making Syndra is to test and learn new algorithms and techniques used mainly in graphics and real-time rendering.

Download

Syndra-Engine v1.1.1-alpha

Showcase

Features

  • Engine

    • Editor (with docking support)
    • Entity Component System (ECS)
    • Event system
    • Console logging
    • Model and texture loading:
      • glTF 2.0 (.gltf/.glb) via fastgltf
      • Additional model formats via Assimp
    • Scene saving and loading using YAML serialization and deserialization
    • Debug visualizer (GBuffer, HDRI map, ...)
    • Immediate mode GUI
    • Component editor (material, mesh, light, tag and camera)
    • Viewport gizmos
  • Rendering

    • Vulkan deferred renderer (default backend)
    • OpenGL fallback renderer
    • PBR Rendering (Cook-Torrance BRDF)
    • Materials (with texture loading)
    • Dynamic shadows
    • Different light types (directional, point lights and spot lights)
    • Soft shadows using PCSS algorithm
    • Image Based Lighting (IBL)
    • Fast Approximate Anti-Aliasing (FXAA)
    • Normal mapping

Future

  • Trello Page contains all the upcoming features.

  • Engine

    • Asset manager and content Browser
    • Physics engine
    • CPU and GPU profiling
    • Scripting system
  • Rendering

    • More debug visualizers (grid, wireframe, ...)
    • SSAO (Screen Space Ambient Occlusion)
    • SSR (Screen Space Reflection)
    • Procedural atmospheric sky
    • Point light shadows
    • Bloom
    • Compute shaders for IBL calculations

Compiling

Syndra only supports Windows for now. Visual Studio 2019+ is recommended.

Start by cloning the repository with git clone --recursive https://github.com/ErfanMo77/Syndra. If the repository was cloned non-recursively previously, use git submodule update --init --recursive to clone the necessary submodules.

Install Vulkan SDK 1.4+ and make sure the VULKAN_SDK environment variable is set (CMake uses it to locate shaderc/spirv libraries).

Then, run scripts/setup.py to update submodules and generate a Visual Studio 2022 solution via CMake. After installing all the prerequisites, you can compile and run the engine in Visual Studio.

You can also generate the solution manually:

cmake -S . -B build -G "Visual Studio 17 2022" -A x64

Build editor/sandbox binaries:

cmake --build build --config Debug --target Syndra-Editor Sandbox

Backend Selection

  • Default backend: vulkan
  • CLI override: --renderer=vulkan or --renderer=opengl
  • Environment override: SYNDRA_RENDERER=vulkan|opengl
  • Precedence: --renderer (CLI) overrides SYNDRA_RENDERER, and SYNDRA_RENDERER overrides the default.

Example:

bin/debug-windows-x86_64/Syndra-Editor/Syndra-Editor.exe --renderer=opengl

Vulkan Notes

  • Vulkan backend requires Vulkan API 1.4 capable hardware/driver.
  • Vulkan path uses dynamic rendering and synchronization2.
  • Vulkan deferred path includes direct lighting, shadows, optional FXAA, and equirectangular environment IBL.

glTF Scene Import (fastgltf)

  • Syndra supports glTF 2.0 scene/model loading (.gltf and .glb) through fastgltf.
  • In the editor:
    • Select (or create) an entity.
    • Add a Mesh component.
    • Click Open in the Mesh panel and choose a .gltf or .glb file.
  • Multi-mesh glTF files are imported as a parent-child hierarchy (one child entity per mesh).
  • Other non-glTF formats continue to load through Assimp.

Regression Checklist

  • Build Syndra-Editor and Sandbox in Debug from a clean state.
  • Run the automated smoke matrix: powershell -ExecutionPolicy Bypass -File scripts/smoke_renderer_matrix.ps1 -Configuration Debug
  • Launch editor with default backend (no args) and verify it selects Vulkan.
  • Launch editor with --renderer=vulkan and --renderer=opengl and verify both start.
  • Vulkan smoke: load default scene, resize viewport, close app, verify no validation errors.
  • Vulkan smoke: entity picking, gizmos, directional shadows, FXAA toggle.
  • OpenGL smoke: editor boots and viewport interaction works as fallback path.
  • Scene compatibility: legacy scenes/materials load without manual shader-name edits.

Third Party Libraries

  • GLFW : Handling windows and mouse and keyboard events.
  • Glad : OpenGL functions loader.
  • spdlog : Console debugger logging.
  • stb_image : Reading and loading textures.
  • ImGui : Immediate mode GUI used in editor UI.
  • ImGuizmo : Editor gizmos.
  • Entt : Used in Entity Component System (ECS).
  • GLM : Matrix and vector operations.
  • fastgltf : glTF 2.0 parser/loader used for .gltf and .glb.
  • Assimp : Loading non-glTF 3D model formats.
  • yaml-cpp : Scene serialization and deserialization.
  • Vulkan SDK : Shader compilation and reflection.

Dependencies

Authors

ErfanMo77 - Erfan Momeni

Acknowledgments

LearnOpenGL Great OpenGL tutorials!

The Cherno game engine series

Logo design : AmirMohammad Abedini

License

Licensed under the Apache License 2.0, see LICENSE for details.

Packages

No packages published

Contributors 3

  •  
  •  
  •