在彼此之上绘制场景的最佳方式

Optimal way to drawing scenes on top of each others

我试图在彼此之上绘制场景,我在 OpenGL 中的做法是绘制每个场景,然后清除深度模板,然后绘制下一个场景。

对于Vulkan世界,如果我们想翻译我以前的方式,我必须开始渲染通道然后绘制每个场景然后清除深度模板(vkCmdClearAttachments ) 然后绘制下一个场景并结束渲染过程。但是我想到了几个问题:

无论是在 Vulkan 还是 OpenGL 中,"optimal" 执行此操作的方法是将深度缓冲区划分为两个区域:每个场景一个。您使用 viewport transform 对深度缓冲区进行分区。一个场景将获得 [0.5, 1] 范围,而下一个场景将获得 [0, 0.5] 范围。 glDepthRange 是您在 OpenGL 中用来设置它的内容,VkViewportmin/maxDepth 字段处理 Vulkan 中的类似转换。

如果由于某种原因你不能划分你的深度缓冲区(可能是因为这两个场景都需要近距离小浮点值的额外精度),那么哪种选择更优几乎肯定取决于底层硬件。在基于图块的渲染器上,就性能而言,我认为 vkCmdClearAttachments 不是好消息。但是对于传统的渲染器来说,如此清晰的调用几乎不是性能问题,而必须开始一个新的渲染通道的成本将是您将使用的主要内容。