C++/openGL/Vulkan 3D engine

Overview

Deus In Machina engine

C++/GL/Vulkan 3D graphic engine

This project should be an abstraction of the engine that I am using on BOC: Birth of Cultures, my intention is to be able to dedicate some time each month to update this OpenSource project, Deus In Machina is focused on performance, using most moderns indirect draw APIs, to avoid drawing API overdrive as a first major goal.

Shaders aren't a target on this project (compiling/implement are out of this), but I still can recommend the Book of Shaders, which so far is the best online resource that I could find.

First commit, hello world! :D Here is my Reddit post about why I started with a skeletal animation system. Additionally, I also discuss the future updates for this project.

[notice: until BoC early access release, I will delay the frequency of the updates for this repository] [Project renamed to: Deus In Machina]

Table of Contents

1. MultiDraw Elements Indirect

2. Multi-threading and Asynchronous Chunks Sync

3. Interface Items System

4. Skeleton Animation

  • More content coming in the near future, watch this space!

1. MultiDraw Elements Indirect

  • Coming in the next update

2. Multi-threading and asynchronous chunks sync

  • Pending organization

3. Interface Items system

  • Pending organization

4. Skeleton Animation

Skeleton animation system should not have numbers restrictions on how many skeletons, animations, keyframes or even how many game entities use each one of them, for this reason there are two separate buffers with different purposes.

The first one is static (SSBO) while the other is dynamic (UBO), GPU allows the interpolation between two final positions on shader, while is the CPU that only takes care to computing animations play-time.

There are no uniform over-load, the uniform buffer object is the only point to sync, (the 32 kb size of that guarantees a fast cpu<->gpu update). All animations transforms are pre-computed inside the static buffer SSBO to avoid extra CPU load on runtime, his max size of 128mb guarranted a lot of capacity to fill large ammount of pre-computed transforms from many diferentes animations for each skeleton.

Simplified data atlas

classDiagram
    entityAnimation &lt;|-- entitySkeleton
    entitySkeleton &lt;|-- entitySkeletalAnimations

    entityAnimation : startRange
    entityAnimation : animationLoader animation
    class entitySkeleton{
      Ranges
      vector#60;entityAnimation#62; animations
      skeletonLoader skeleton
    }
    class entitySkeletalAnimations{
      vector#60;entitySkeleton#62; skeletons
      vector#60;mat4#62; stackTransformations
    }
    class Mesh{
      ...vertex attributes
      skeleton_id
      bone weight [ ]
      bone ids [ ]
    }
    class SSBO_Buffer_static_draw{
      mat4 array_StackTransformations[]
      
    }
    class UBO_Buffer_dynamic_draw{
      skeleton index[skeletons][animations]
      animationPlaytime[skeletons][animations]
      keyframesLimit[skeletons][animations]
    }

(pending to end update)

Dependencies

  • ASSIMP: vcpkg install assimp.
  • GLM: vcpkg install glm.
  • GLAD: vcpkg install glad.
  • GLFW: vcpkg install glfw3.
You might also like...
A Direct3D9 to Vulkan layer using the DXVK backend. [Upstreamed to DXVK]

This work has been upstreamed and is continuing development there This repo is only open for the remaining issues on the tracker https://github.com/do

Love 6's Regular Expression Engine. Support Concat/Select/Closure Basic function. Hope u can enjoy this tiny engine :)
Love 6's Regular Expression Engine. Support Concat/Select/Closure Basic function. Hope u can enjoy this tiny engine :)

Regex_Engine Love 6's Blog Website: https://love6.blog.csdn.net/ Love 6's Regular Expression Engine Hope u can love my tiny regex engine :) maybe a fe

Sword Engine is a fork of Psych Engine that plans on adding more features and quality of life improvements.
Sword Engine is a fork of Psych Engine that plans on adding more features and quality of life improvements.

⚠️ WARNING: This README is currently incomplete, This warning will be removed once it's complete. Friday Night Funkin' - Sword Engine Sword Engine is

Two Tribes Engine; the engine which we used to create Toki Tori 2+ and RIVE with

Two Tribes Engine We, Two Tribes, have used this engine for over a decade. It started with early development on the Nintendo DS and ultimately resulte

The old Windows NT OpenGL samples/SDK from an MSDN CD.

The OpenGL API is supported on a variety of graphics hardware; the software in this release provides support for graphics hardware including basic emulation on any video adapter that is supported with the operating system, and accelerated graphics hardware that is supported by an OpenGL mini-client driver (MCD) or an OpenGL installable client driver (ICD).

An articulating arm in OpenGL for coms336

Theodore Davis tcdavis Sean Griffen griffens opengl-articulating-arm Articulating Arm in OpenGL for ComS 336 Project Description The scene will defaul

3D Pacman with C++ and OpenGL
3D Pacman with C++ and OpenGL

Pacman 3D 3D version of my Homemade Pacman, made with C++ and OpenGL Dependencies ASSIMP (to load the 3D models) and SFML (to play sounds) are needed

Small Header-Only Window and OpenGL Manager.
Small Header-Only Window and OpenGL Manager.

LxDemOWin Linux Demo OpenGL and Window manager A small header-Only Window and OpenGL manager made in C, written in about 2 hours. With some basic code

Chromium Embedded Framework with OpenGL Core or SDL2

Chromium Embedded Framework's cefsimple Off-Screen Rendering I needed to use a modifed version of cefsimple using either SDL or OpenGL Core. I tried t

Owner
Brais
The developer of Deus Ex Machina Engine / BOC: Birth of Cultures game
Brais
C++/openGL/Vulkan 3D engine

Deus In Machina engine C++/GL/Vulkan 3D graphic engine This project should be an abstraction of the engine that I am using on BOC: Birth of Cultures,

Brais 41 May 19, 2022
An implementation of physically based shading & image based lighting in D3D11, D3D12, Vulkan, and OpenGL 4.

Physically Based Rendering (c) 2017 - 2018 Michał Siejak (@Nadrin) An implementation of physically based shading model & image based lighting in vario

Michał Siejak 1.1k Jan 4, 2023
dump and replace shaders of any OpenGL or Vulkan application

deshade deshade is a library that allows you to dump and replace the shaders of any OpenGL or Vulkan application, which includes: GL2 + extensions, GL

Dale Weiler 25 Aug 10, 2022
Several GX2 test programs to compare it with OpenGL. (With additional GLFW+OpenGL implementation provided)

GX2-Tests Provided are GX2 test programs and samples for comparison with OpenGL and with additional GLFW+OpenGL implementation for test on PC. These s

AboodXD 1 Nov 15, 2021
A Graphical Engine written in C++ for abstract OpenGL

Lukeda Graphical Engine (LGE) It's a simple graphical library, written in C++ with OpenGL(GLEW) and GLFW Start as a fork from my other project named "

Lucas Morais 2 Jul 13, 2022
layer to control the global priority of any vulkan application

vk-force-priority vk-force-priority allows you to control the global priority of any vulkan application. Building from Source Dependencies Before buil

Georg Lehmann 5 Sep 2, 2021
Collection of Vulkan samples

This repository holds many samples, showing various aspect of Vulkan, debugging tips and usage of other Nvidia tools.

NVIDIA DesignWorks Samples 52 Dec 31, 2022
Vulkan and other GPU API bugs I found.

GPU-my-list-of-bugs what is it - list of bugs I found writing shaders, mostly shader bugs. Maybe this is my code bug or/and shader bugs, but this code

Danil 14 Dec 26, 2022
A collection of tools, libraries, and tests for Vulkan shader compilation.

Shaderc A collection of tools, libraries and tests for shader compilation. At the moment it includes: glslc, a command line compiler for GLSL/HLSL to

Google 1.4k Dec 29, 2022
SMOL-V: like Vulkan/Khronos SPIR-V, but smaller.

SMOL-V: like Vulkan/Khronos SPIR-V, but smaller. Overview SMOL-V encodes Vulkan/Khronos SPIR-V format programs into a form that is smoller, and is mor

Aras Pranckevičius 271 Dec 19, 2022