I learned Vulkan and wrote a small game engine with it
a day ago
- #Graphics Programming
- #Vulkan
- #Game Engine
- Author learned Vulkan and created a small game engine in 3 months without prior Vulkan knowledge.
- The engine is designed for small level-based games, not as a general-purpose engine.
- Started by making a small 3D game and extracted reusable parts into the engine.
- Recommendation to start with OpenGL before moving to Vulkan for easier learning.
- Resources for learning OpenGL include learnopengl.com, Anton’s OpenGL 4 Tutorials, and Thorsten Thormählen’s lectures.
- Advice against bike-shedding: focus on what's necessary and avoid over-engineering.
- Vulkan was chosen over other APIs like DirectX, WebGPU, and Metal for desktop game development.
- Vulkan learning resources include vkguide, Vulkan Lecture Series by TU Wien, and advanced books like '3D Graphics Rendering Cookbook'.
- Engine features include glTF model loading, compute skinning, frustum culling, and shadow mapping.
- Use of bindless descriptors and buffer device address (BDA) for efficient data handling.
- Synchronization in Vulkan is manual and requires explicit barriers between rendering passes.
- The engine uses a pipeline pattern for rendering steps, separating initialization, cleanup, and drawing.
- UI system inspired by Roblox’s UI API, with layout calculations based on relative sizes and positions.
- Integration of third-party libraries like Jolt Physics for physics, entt for ECS, and Tracy for profiling.
- Benefits of switching to Vulkan include no global state, better validation errors, and more control over the graphics pipeline.
- Future work includes adding bloom, volumetric fog, animation blending, and render graphs.