Hasty Briefsbeta

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.