The Vulpine Engine is a lightweight game engine made from scratch in C++ using OpenGL. This project aims to provide a solid and versatile foundation for 3D game development. The engine is built for developers who, like me, prefer a hands-on, code first approach with both high-level built-in features and low-level fine tuning through direct API calls.
My goals with this project, are to learn how to make an application such as this one and to have a custom-made graphics/game engine for sevral of my personal and academical projects. This engine is and will always be open source and free for all uses.
- Game Repo Example a simple game built with the engine to showcase how to setup things.
- "Les bois de Vulpigniac" made for the Code Game Jam 2024.
- Height Maps first implemntation of terrain rendering.
The Vulpine Engine is supported for Windows and Linux environment with OpenGL 4.6 compatiblity. No Mac or Android/IOS support is planned or will ever be.
This application uses different libraries :
Important modules :
Project structure with Vulpine :
my-project/
├── build/
│ ├── ressources/
│ ├── saves/
│ ├── shader/ <===== VESL submodule
│ └── Game.exe
├── Engine/ <===== Vulpine Engine submodule
├── include/
│ └── Game.hpp
├── obj/
│ └── Game.o
├── src/
│ └── Game.cpp
├── .gitattributes
├── .gitignore
├── .gitmodules
├── Makefile
└── main.cpp
- Entity Conpoment System
- States Machine
- Script Utils
-
Cameras
- Perspective Camera
- Ortographic Camera
- Easy To Save/Load Camera State
- Reversed Z
-
Geometry Lighting
- Blinn-Phong
- PBR
- Multi-Light
- Ambient Light
- Directionnal Light
- Point Light
- Tube Light
-
Colors & Buffer
- Easy Frame Buffer Creation & Usage
- HDR
- sRGB Support (OpenGL native)
-
Shadowing
- Multi Shadow Maps Support
- Efficient Percentage Close Smooth Shadows
- Directionnal Light Shadow Mapping
- Point Light Shadow Mapping
- Cascading Shadow Maps
-
Geometry Drawning
- Vao Drawning
- Automatic Uniform & Maps Update
- Automatic UBO Updates
- Single Instanced Vao Drawning
- Multiple Instanced Vao Drawing
- AZDO
- Bindless Textures
- Indirect Vao Drawning
-
Rendering Techniques
- Foward Rendering
- Clustured Rendering
-
Post Process
- SSAO
- Bloom
- ToneMapping
- Depth-Based Pixelisation (experimental)
- Chromatic Aberration
- MSAA
- FXAA
- ...
-
Scene Hierarchy
- Automatic Updates
- Hide Status Automatic Propagation
- For Object Groups
- For Meshes
- For ModelSates/Instances (TODO : test)
- For Point Lights
- For Tube Lights
- For Directionnal Lights
- Fast Non-Redundant Updates
-
Culling
- Frustum
- Sphere Frustum Culling
- AABB Frustum Culling
- Fast Parallelized Frustum Culling
- Efficient Occlusion Culling
- Frustum
-
Map/Scene Editor
-
Text
- MSDF Font Rendering
- UFT Support
- Single String Batch
- Markdown bold and italics
- Multi String Batch
- Automatic Text Resizing
-
Fast Ui for debugging
- Fast UI Batching
- Value Menu Tab
- Const & Input Support
- Int
- Float
- Bollean
- String
- Color : Hue, Saturation, Value, HexCode
- Direction : Phi & Theta Angle
- Angles
- Easy Text Inputs With Clipboard Support & Single Source Security
- Inputs Handler
- App's Default GLFW Inputs Callbacks
- Easy Custom Inputs Implementation
- Window Event Handler
- Clear OpenGl Message Callback
- Lights/Physics/PathFinding/Frustum/Geometry Helpers
- Angle & Color Conversion Functions
- Precise Benchmark/Frame Timer
- Precise Limit Timer
- Default AppTime & SimulationTime Timers
- Error/Warning Message Macros
- Mapped Enum Maccros
-
Asset Manager With Easy Text Based Constructor & Duplication Detection Optimization
-
Vulpine Engine Asset Convertor
- Assimp integration
- KTX2 integration
- .vulpineMesh
- .vulpineSkeleton
- .vulpineAnimation
- .vulpineNavigationGraph
- .vulpineBody
- .vulpineLights
- .vulpineScene
-
3D
- Easy VAO Creation & Update
- Automatic AABB Model Generation
- .obj Model Loading
- Custom Fast Model Format
-
Textures
-
png/jpeg/gif Images Loading (STB lib)
-
hdr Images Loading (STB lib)
-
KTX/KTX2 Images Loading (KTX lib)
-
MipMaps (KTX lib)
-
Basic CubeMap Loading
-
Font/CSV Atlas MSDF Loading
-
(optional) Level/Scene Atlas Generator
-
Audio
- .ogg Files loading
- .wav Files loading
- 3D Audio (OpenAL lib)
- Audio Effects (Reverb, etc...)
-
Shader
- Shader Include (With Custom Librairies)
- Easy Fragment/Geometry/Vertex Shader Loading From Source File
- Shared Device & Host Constants/Defines
- Easy Tesselation Shader Loading From Source File
- PIR-V Loading
- Compute Shader Loading
-
Assets Streaming
- Automatic & Secure Destroy Calls
- Audio Streaming
- Scene/Models Automatic Streaming
- Shader Streaming
- Base Physics Engine
- Constant Step Physics Thread
- Sphere Collider
- AABB Collider
- OBB Collider
- Easy Colliders Loading
- Game Object Class
- Base Class
- Multi Collider Support
- Model/Physics Following mode
- Physics Culling/Clusering/Optimisation
- Path Finding Nodes
- Path Finding Debugger
- A* Path Finding Algorithm
- Path Finding Nodes Generator From Level/World