主要是为了调试目的,我希望在未来的渲染调用中存储和重用深度缓冲区,该缓冲区不受 Vulkan 规范的限制,限制在 [0.0, 1.0] 范围内。VK_EXT_depth_range_unrestricted 似乎正是我需要的,所以我有
并发现深度图的所有像素都等于1.0。但我希望光栅化像素的深度为 3.0,而不是光栅化为 10.0(在 renderdoc 和通过将深度缓冲区转储到主机内存进行检查)。
因此我的问题是:是否可以在 Vulkan 的深度缓冲区中实际存储未归一化的深度?如果是,我该怎么做?
更新:我根据 Sascha Willems 的三角形绘图示例制作了复制器。它在fork运行示例时,验证不报告任何内容。我看到的是空白图像(每个像素都被清除),但是我希望绘制一个三角形(因为它的每个顶点的深度为 3,清除深度为 5)。以防万一,设备是 Vega RX,驱动程序 18.50-ubuntu16.04。
从扩展规范的问题部分,可以找到许多其他必须发生的事情。由于您没有屈尊展示您的代码,这里有一个列表:
深度缓冲区的图像格式必须是浮点数。如果它是定点,则值仍将被限制在该范围内。需要注意的是硬件不具有支持浮点深度缓冲(不过,如果没有,那么赔率是好它不支持任何扩展这个)。
剪辑可能仍然适用。可以将基元裁剪到 [0, W c ] 范围内,其中“W c ”是裁剪空间顶点位置的第四个分量。要阻止这种情况,您必须关闭深度剪辑,通过VkPipelineRasterizationStateCreateInfo::depthClampEnable = VK_TRUE
(或者VkPipelineRasterizationDepthClipStateCreateInfoEXT::depthClipEnable = VK_FALSE
如果您正在使用该扩展程序)。
禁用深度裁剪后,深度值仍将被限制在该VkViewport::minDepth/maxDepth
范围内。所以你必须确保它足够大。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句