yangfengzzz / DigitalVox3

Entity-Component Based Graphics Engine rendered by Metal

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Depreciate!!! If you like C++ please refer to DigitalVox4, Or SwiftArche

DigitalVox3 - Metal Graphics Engine

This project is inspired by Oasis which is an ECS-liked based engine(not very strict) . Based on entity and component, it is easy to combine other open-source ability:

  1. ImGui: GUI system
  2. OZZ-Animation: CPU Animation System
  3. PhysX: Physical System
  4. fluid-engine-dev: Fluid Simulation and CPU Particle System

Which can load a lot of model format including:

  1. FBX: FBX loader with Ozz animation
  2. GLTF: GLTF Loader with GPU-based Skinning Animation
  3. Other: OBJ and other format loaded by ModelIO Framework

Features

GLTF Loader

Example about GLTF Loader which based on GLTF GLTF Scene

GPU Skinning Animation with GLTF

Example can also load animation which control the tree of entities. GPU Skinning Animation limit the joint weight have only four component.

GPU Animation

CPU Animation System with FBX

Example about CPU animation system which is based on OZZ-Animation. Ozz support CPU skinning, blending, IK and other animation ability. The CPU animation system does not limit the number of weights of the bones, so it will be more free to use. Animation Simulation

CPU Particle System

Example about CPU particle system which can load fluid-engine-dev solvers. Particle Simulation

Physics System

Example about Physics System which is based on PhysX. Collider, Joint, Character Controller are all wrapped as component which is more easy to use.

PhysX

PBR

Example use IBL to render basic pbr scene. The specular-map is generated by using compute shader. The diffuse-map is generated by Model I/O framework

IBL

Shadow System

Example support multi-shadow from three kind of lights. All these based on ShadowMap.

  1. spot light: single shadow map
  2. directional light: cascaded shadow map(render four times)
  3. point light: shadow cube map (render six times)

Multi Shadow Cube Shadow from Point

Deferred Render Pipeline

Example use 256 point lights to shader the whole scene which need deferred render pipeline to reduce fragment wastes.

Deferred Render Pipeline

GUI

Editor use IMGUI to render gui and FrameBuffer Picker to link the scene with panel. ImGuizmo and imgui-node-editor build the basic infrastructure of editor.

Editor

About

Entity-Component Based Graphics Engine rendered by Metal

License:MIT License


Languages

Language:C++ 87.3%Language:C 5.2%Language:Objective-C++ 5.1%Language:Metal 1.4%Language:CMake 0.9%Language:Objective-C 0.2%