2. 图形绘制流水的基本原理和实践 (1)
最后更新于
最后更新于
如果考虑复杂的 Vulkan 使用场景 一般只需要一个 Vulkan 实例,逻辑设备可以有多个
顶点缓存的优化是,可以把经常要变化的坐标和法线放在一个 Buffer,而 UV 和其他属性放一个 Buffer
Draw ,Draw Index 绘制,Draw Indirect 是间接绘制,不需要知道顶点的数量,不用绑定顶点数据,是通过 Buffer 里的数据实时生成顶点。
Vulkan 的 NDC 坐标
View port 绘制区域一般和纹理区域是一致的, 想要一张图里画多张图的时候,要设置 Viewport 到对应绘制区域,比如 CSM
裁剪选项
浮点数精度,位置需要 32 位,颜色 8 位就够了
片段输出
当在 Frag 里不做深度修改的时候,可以在片段之前就做深度剔除。 但这是 PC 端常用的方式,移动端的 Tile-base 没法知道深度是否会修改,所以这方法没有用?
深度纹理最终 pass 是不需要写入操作的,最终 Pass 只提供读取就行。 一个 Command Buffer 里的所有指令是同步的
Vulkan调试工具
RenderDoc
Nvidia Nsight Tool
AMD Radeon GPU Profiler • Qualcomm Snapdragon Profiler • Arm Mobile Studio
Layer 类似于函数重载
Vulkan 队列
创建 Swapchain 属于 Vulkan 的一个拓展
索引缓存避免跳转过大,造成 Cache miss
深度的算法是 revert z,z 越大深度越小,存在深度图里的值越小。当 z 为 0 时,深度图里存 1。
RenderPass 内 Vulkan 的绑定流程