2. 图形绘制流水的基本原理和实践 (1)
Vulkan 初始化
如果考虑复杂的 Vulkan 使用场景 一般只需要一个 Vulkan 实例,逻辑设备可以有多个

Layer 类似于函数重载
Vulkan 队列
创建 Swapchain 属于 Vulkan 的一个拓展
渲染主循环
顶点缓存的优化是,可以把经常要变化的坐标和法线放在一个 Buffer,而 UV 和其他属性放一个 Buffer

索引缓存避免跳转过大,造成 Cache miss
Draw ,Draw Index 绘制,Draw Indirect 是间接绘制,不需要知道顶点的数量,不用绑定顶点数据,是通过 Buffer 里的数据实时生成顶点。

Vulkan 的 NDC 坐标
深度的算法是 revert z,z 越大深度越小,存在深度图里的值越小。当 z 为 0 时,深度图里存 1。
View port 绘制区域一般和纹理区域是一致的, 想要一张图里画多张图的时候,要设置 Viewport 到对应绘制区域,比如 CSM

裁剪选项

浮点数精度,位置需要 32 位,颜色 8 位就够了

片段输出
当在 Frag 里不做深度修改的时候,可以在片段之前就做深度剔除。 但这是 PC 端常用的方式,移动端的 Tile-base 没法知道深度是否会修改,所以这方法没有用?

RenderPass 内 Vulkan 的绑定流程
深度纹理最终 pass 是不需要写入操作的,最终 Pass 只提供读取就行。 一个 Command Buffer 里的所有指令是同步的

参考资料
Vulkan调试工具
RenderDoc
Nvidia Nsight Tool
AMD Radeon GPU Profiler • Qualcomm Snapdragon Profiler • Arm Mobile Studio
最后更新于
这有帮助吗?