Vyroda
Game engine made by hand, with modern C++ and Vulkan.
Loading...
Searching...
No Matches
🐙 Vyroda Engine: A Modern C++26 Vulkan Game Engine

A continuously evolving, cross-platform game engine built from the ground up using C++26 and powered by the Vulkan graphics API. This project is a never-ending educational exercise, covering various advanced topics such as graphics pipeline development, modern C++ patterns, low-level mathematics, and robust build systems.

✨ Project Status & Highlights

CI Service Build Status
GitHub Actions VyrodaEngine

Key Features

  • Modern C++26: Leveraging the latest C++ standard for clean, efficient, and expressive code.
  • Vulkan Renderer: Utilizing the high-performance, explicit graphics API for unparalleled control over the GPU.
  • Advanced Rendering: Includes support for modern features like glTF 2.0 asset loading and an extensible rendering pipeline.
  • Unified Image Layouts: Implements the VK_KHR_UNIFIED_IMAGE_LAYOUTS_EXTENSION_NAME for streamlined texture and image management.
  • Cross-Platform Ready: Designed to compile and run on Windows and Linux (with editor support currently focused on Windows).

Media & Development

  • Development Blog: Follow the journey and technical deep-dives on Vampyropoda-Studio.
  • Project Kanban: See what's next and the current development state on the Project Board.
  • Video Showcase: Watch the engine in action on YouTube.

Screenshots

See the engine rendering advanced glTF assets:

Basic Scene PBR Materials Test Rungholt

đŸ› ī¸ Compilation & Execution

Prerequisites

To build and run the Vyroda Engine, you need recent and specific tooling:

  1. C++ Compiler: A recent version of Clang (22.x) with C++26 support.
  2. Build System: CMake (4.x).
  3. Vulkan SDK: The latest official Vulkan SDK.
    • Ensure the environment variables VULKAN_SDK, Vulkan_LIBRARY, and Vulkan_INCLUDE_DIR are correctly configured.
  4. GPU: A recent GPU with support for the VK_KHR_UNIFIED_IMAGE_LAYOUTS_EXTENSION_NAME extension, as this is currently used without fallback.

Platform-Specific Setup

đŸ’ģ Windows

  • Toolchain: Use llvm-mingw from mstorsjo/llvm-mingw.
    • Add the bin folder to your $PATH.
    • Set the CMAKE_SYSROOT variable (or update mingw-toolchain.cmake directly).
  • Editor: The engine editor relies on Tcl/Tk 9.0.

🐧 Linux

  • Tcl/Tk can be installed easily via your distribution's favorite package manager.

Build Steps

  1. Compile Shaders (Windows & Linux): bin/shaders_compil.s
  2. List Presets: Check available build configurations. cmake --list-presets
    • "windows-debug" - Debug
    • "windows-release" - Release
    • "linux-debug" - Debug
    • "linux-release" - Release
  3. Configure: Use a preset to set up the build environment (Example: Windows Release). cmake --preset windows-release
  4. Compile: Build the project. cmake --build --preset windows-release

Running the Engine

Target Command Notes
Engine build/windows-release/VyrodaEngine.exe Run from the root directory.
Editor build/windows-release/VyrodaEngine.exe -E Windows only for the moment.
IDE Open the project with a CMake-compatible IDE (VS 2022, VS Code, etc.).

🎨 Content & Configuration

Level & Asset Setup

  1. Assets: Download glTF samples from glTF-Sample-Assets or meshes from Morgan McGuire's Computer Graphics Archive.
  2. Placement: Unzip and copy/paste assets into the assets/mesh directory.
  3. Level Configuration: Levels are defined in config/levels.
  4. Default Level: To change the level loaded on startup, edit config/VyrodaEngine.json and update the defaultLevel key with the target level filename.

â„šī¸ Need Help? A detailed environment configuration guide is available on the Wiki.

đŸ•šī¸ Keyboard Shortcuts (AZERTY Layout)

Action Key
Free / Lock Mouse Left Ctrl
Forward Z
Backward S (Changed from Q to S for standard WASD-to-AZERTY mapping)
Strafe Left Q
Strafe Right D
Up E
Down A

✅ glTF 2.0 Feature Conformance

The engine is actively tested against the official glTF sample assets to ensure correct rendering and feature implementation.

Feature Area Supported Feature Area Supported Feature Area Supported
AlphaBlendModeTest [x] CompareIor [ ] MorphPrimitivesTest [ ]
AnisotropyRotationTest [ ] CompareIridescence [ ] MorphStressTest [ ]
AnisotropyStrengthTest [ ] CompareMetallic [ ] MultiUVTest [ ]
ClearCoatTest [ ] CompareNormal [x] NegativeScaleTest [ ]
CompareAlphaCoverage [ ] CompareRoughness [ ] NodePerformanceTest [ ]
CompareAmbientOcclusion [ ] CompareSheen [ ] NormalTangentMirrorTest [x]
CompareAnisotropy [ ] CompareSpecular [ ] NormalTangentTest [x]
CompareBaseColor [x] CompareTransmission [ ] OrientationTest [x]
CompareClearcoat [ ] CompareVolume [ ] PlaysetLightTest [ ]
CompareDispersion [ ] DispersionTest [ ] PrimitiveModeNormalsTest [ ]
CompareEmissiveStrength [ ] EmissiveStrengthTest [ ] SheenTestGrid [ ]
EnvironmentTest [ ] InterpolationTest [ ] SpecularTest [ ]
IORTestGrid [ ] TextureCoordinateTest [x] TextureEncodingTest [ ]
TextureLinearInterpolationTest [ ] TextureSettingsTest [x] TextureTransformMultiTest [ ]
TextureTransformTest [ ] TransmissionRoughnessTest [ ] TransmissionTest [ ]

| TransmissionThinwallTestGrid | [ ] | UnlitTest | [ ] |


📚 Further Learning & Resources

This project stands on the shoulders of giants. Here is a list of recommended resources that have informed the engine's development and will be invaluable for contributors: