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

时间:2018-09-27 23:46:27

标签: vulkan

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

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

  • 是否有更好的策略? (例如,为每个场景启动新渲染通道。)
  • 我找到了vkCmdClearAttachments,但是我不确定它是否需要与上一个和下一个命令同步?

1 个答案:

答案 0 :(得分:3)

无论在Vulkan还是OpenGL中,“最佳”方法都是将深度缓冲区划分为两个区域:每个场景一个。您使用viewport transform对深度缓冲区进行分区。一个场景将获得[0.5,1]范围,而下一场景将获得[0,0.5]范围。 glDepthRange是在OpenGL中进行设置的方式,min/maxDepth的{​​{1}}字段处理Vulkan中的类似变换。

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