最近在写毕业设计,一个Vulkan混合渲染器。Vulkan极其繁琐的API和合格的显式控制给本就困难的图形学Debug蒙上了又一道阴影。
下面总结了的几条我用上的技巧,有更好的方法欢迎在评论里指出,我会满怀感激得尝试。
验证层与结构化日志
首先是启用Vulkan 验证层。
同时配合使用开源日志库 spdlog 实现一个自定义的日志类。
使用不同颜色的l日志标识。这样当前验证层出错时能一眼看出。
给资源起名字
当验证层报错时,默认情况下它只会告诉你:“VkImage 0x12ab34cd 的布局不正确”。在一个拥有几十张贴图的混合管线中,这种报错无异于大海捞针。
可以使用下面的函数SetDebugName() 来给资源起名。
1 | void VulkanContext::SetDebugName(uint64_t handle, VkObjectType type, const char* name) |
下面这个的作用?
1 |
|
可视化
图形编程debug重要的还是可视化。
使用开源库Imgui,可以很好的实现可视化Debug,可以通过 UI 面板实时切换显示 Albedo、Normal、Motion Vector 或 Depth,可以调整相机,光源位置来。
因为本项目中我采用了RenderGraph管理渲染管线,所以实现了一键导出 Mermaid 流程图代码的功能。这样能可视化查看当前RenderGraph的拓扑逻辑。
这个大佬的FrameGraph可视化做得很好。
RenderDoc在我这次开发中没用到,不过官方文档有提到。