This is a personal project build by myself while learning Vulkan API. It mainly consists of following 2 parts:
RHI & VulkanRHI
: Vulkan Render Hardware InterfaceRenderCore(V2)
: high level rendering framework build onVulkanRHI
:RenderGraph
: Manage passes, dependencies, resources, barriers.RenderDevice
: Manage frame acquirement and frame presentation.SceneRenderer
: Render scene-graph based scenes.SkyboxRenderer
: Process environment textures and draw skybox.
Current Status:
Implemented basic IBL+PBR lighting. Adds a separate SkyboxRenderer for processing environment textures.
scene_renderer_demo (basic PBR with IBL, use SceneGraph to manage gltf models)
Next steps: Focus on refactor and new rendering algorithms.
- Optimize texture loading command submission: RenderDoc capture events show that too many command submission when copying from stating buffer to gpu texture, to be optimized and fixed.
- Implement more concise and explicit layout transition: consider using dynamic rendering feature to replace current framebuffer/renderpass setup.
- Fix bugs in render graph cpu memory allocation and deallocation.
- Refactor & Fix Bugs in current asset loading code (model & texture): when loading some gltf models, the result is not correct, maybe sth wrong with the coordinate system. Consider implementing a robust asset lib and convert various asset format to self-defined format.
- Study state of the art global illumination algorithms.
Current Status:
Refined VulkanRHI and Render framework V2. Implemented scene graph based renderer demo.
scene_renderer_demo(basic PBR with static lighting, use SceneGraph to manage gltf models)
Next steps:
Refine further ZenEngine's VulkanRHI and RenderCoreV2 framework. Implement more rendering algorithms.
Current Status:
Implemented VulkanRHI and Render framework V2 from scratch (Basic structure and functionality implemented, but may contain bugs). Already implemented 2 sample applications based on Vulkan Samples.
hello_triangle(with texture)
gears
Next steps:
Re-write all Vulkan Samples using ZenEngine's VulkanRHI and RenderCoreV2.
Implemented Simple PBR with static point lights.
Main Features(Implemented):
- Vulkan Abstraction Layer
- Simple RenderGraph.
- Scene Graph.
- PBR with static point lights.
Next Steps
-
Refactor Vulkan Abstraction Layer
- Main Goal: Robust Pipeline Management, Support for Raytracing.
-
Refactor RenderGraph
- Main Goal: Barrier Management, Aliasing, Reorder, Multi-RDGPass, Support for Raytracing.
-
Hybrid Rendering.
-
Dynamic Diffuse Global Illumination (DDGI).
Current Status:
Finally! Hello, Triangle! (single pass, fixed shader without input)
Next steps:
- Vertex inputs.
- Uniform buffers.
- Load Meshes.
- Load Textures.
- More passes.
- More reasonable barriers.
- Merging passes, use Subpass dependency instead of pipeline barriers.