🌊
Goma
Goma is a simple 3D C++ game engine with Vulkan support.
This is a learning project, meant for experimenting with graphics techniques. It currently lacks most basic features of a full-fledged engine, so it should not be used for anything resembling production!
The current plan is to add more features along the way, but I won't be developing/supporting it continuously. If you like the project and would like to contribute, issues/PRs are very welcome! :)
Features
Goma currently supports Windows with a V-EZ backend. I have plans to port it to Android, but it will require a native Vulkan backend first.
These are some of the features that Goma supports:
- PBR with IBL for specular
- Runtime shader compilation with variants
- Shader reloading at runtime
- Mipmapping
- MSAA
- Mesh culling and sorting
- Shadow maps with PCF
- DoF
Build
Goma uses the CMake build system. It is tested with Visual Studio 2017 on Windows.
First clone the submodules of this repo:
git submodule update --init --recursive
Then run CMake:
mkdir build && cd build
cmake .. -G "Visual Studio 2017 Win64"
Then you can open the Visual Studio solution inside build
and build it from there.
The target goma-engine
is meant to be included as a shared library by applications. The test suite goma-tests
shows usage examples.
License
Goma is licensed under the MIT license. Feel free to use it however you like! Contributions are accepted under the same license.
This project uses third party dependencies, each of which may have independent licensing:
- assimp: A library to import and export various 3d-model-formats.
- glfw: A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input.
- glm: A header only C++ mathematics library for graphics software.
- googletest: A testing framework.
- outcome: Provides lightweight
outcome<T>
andresult<T>
. - spdlog: Fast C++ logging library.
- stb: Single-file public domain (or MIT licensed) libraries for C/C++.
- variant: An header-only alternative to
boost::variant
for C++11 and C++14. - V-EZ: A wrapper intended to alleviate the inherent complexity of the Vulkan API.
- volk: Meta loader for Vulkan API.
- Vulkan-Headers: Vulkan header files and API registry.
PBR shaders are taken from glTF-Sample-Viewer with modifications to adapt them to Vulkan GLSL.
3D models are taken from glTF-Sample-Models. Each model may have its own license.
Other credits:
- Yokohama cubemap texture from Humus (CC-BY 3.0).
- Cloudy cubemap texture by Spiney from OpenGameArt (CC-BY 3.0).
- Sphere creation function from Cute deferred shading.
- BRDF LUT texture from glTF-Sample-Viewer.