vkEngine, my long term "game engine" project.
Might end up as an actual game at some point, no idea when.
This started long long ago in 2004, with OpenGL and ATI GPU demos... My only game that has actually used this "engine" was my Tetris game/graphics demo.
I have an old OpenGL version as wel, but I haven't done anything with it since switching to Vulkan, it's just around for historical reasons and is archived now.
I love doing everything my self with as little external library dependencies as possible.
This is an on-going learning experience for me and for anyone else that can learn from my code, I try to keep it clean and readable.
"Building square wheels to better appreciate the round ones."
- Improve audio (needs pops/clicks fixed on Windows)
- Improve physics (needs more refining, it doesn't pass a box stack very well)
- Streamline post processing effects (WIP)
- Improve networking (this is better now, server here)
- ???
- Profit?
External dependencies for building this (versions as of this writing, newer should work):
libvorbis1.3.7libogg1.3.5OpenXR1.2Vulkan1.3.231.1
Note: recursive clone to fetch submodules
W/A/S/DTypical strafe movementQ/ERollUp/Down arrowsPitchLeft/Right arrowsYawSpaceFire projectileControlFire "laser"~/`Opens consoleZ"Explode" asteroid field (used for testing physics)OGenerate new random play areaPPauses all physics except for camera
Mouse interacts with UI, but also controls ship pitch/yaw.
Should be pretty straightforward cmake:
cmake -S. -B out -GNinja
or use a preset:
cmake -S. --preset "linux_x64_release"
cmake -S. --preset "windows_x64_release"
cmake -S. --preset "android_arm64_release"
cmake -S. --preset "linux_aarch64_release_cross"
Then cmake --build 'path to build directory'
Note: Android building requires the SDK with NDK properly set up with ANDROID_HOME set correctly. This also currently targets a specific NDK version, edit presets file to the version you have installed.
As do the cross compile preset targets, they need a properly set up sysroot or cross build environment.
To connect to a server, just bring up the console in game with '~'/'`' and type:
connect XXX.XXX.XXX.XXX
Where XXX.XXX.XXX.XXX is the remote IP.
Note: Networking is very much a WIP.
Graphics and Rendering
- Vulkan-based rendering backend
- Configurable rendering pipelines with embeddable SPIR-V binary shader code
- Lighting and shadow-rendering systems
- Skybox rendering
- Bloom and post-processing infrastructure
- Custom 3D model format with skeletal animation
Physics and Simulation
- Custom rigid-body physics system
- Sphere, capsule and oriented-box collision detection
- Constraint and solver infrastructure with web browser based assembly tool
- Attractor forces
- Particle system
- 6 DOF physics based camera with 1st person and chase views
- Character controller with 1st person and chase views
- IK skeleton pose manipulation (useful for character foot placement, hand touching, weapon holding, etc)
Audio
- Custom audio subsystem with HRTF based positional sound
- Digital signal processing
- Sound-effect generator
- WAV audio file support
- QOA audio file support
- Ogg Vorbis integration for music
Virtual Reality and Networking
- OpenXR integration with dedicated VR subsystem
- Client networking infrastructure (WIP)
UI and Input
- Custom UI framework
- Windows, buttons and checkboxes
- Text rendering and text editing
- Sprites (with animation), cursors and graph widgets
- Virtual joystick component
- Keyboard and mouse input
- In-game console
Engine Core and Utilities
- Asset management
- Entity management
- QOI and TGA image support
- Vector, matrix and quaternion mathematics
- Frustum and spatial-query utilities
- Bounding-volume hierarchy and spatial hashing
- Memory-zone and threading utilities
- Event, configuration and parsing utilities
- Loading screen support
- Browser/web based physics assembly tool (LLM generated)
- Browser/web based UI editing tool (LLM generated)
- Blender BModel/BAnim import/export addon (LLM generated)
Build targets
- Windows x64
- Linux x64/aarch64
- Android ARM64
