深度缓冲区未填充阴影贴图渲染通道中的数据

Depth buffer is not filled with data in shadow map render pass

我目前正在使用 Vulkan 处理我的着色。我已经基于 SaschaWillem's and Itoral's code. The base of my app was based on VulkanTutorial 为我的阴影贴图创建了一个单独的渲染通道。

我遇到的问题是应该写入 Z 值的深度缓冲区完全为零。我目前正在将与相机相同的 MVP 传递给阴影贴图着色器。我已将 RenderDoc 附加到我的应用程序,阴影贴图通道的网格输出选项卡包含与常规通道完全相同的 gl_Position 值。不幸的是,这些值没有像纹理查看器显示的那样保存到缓冲区中。

同时,常规深度缓冲区已正确填充常规着色器中计算的值。

"Every time the rasterizer produces a fragment, the depth test will check if the new fragment is closer than the previous one. If it isn't, then the new fragment is discarded. A fragment that passes the depth test writes its own depth to the depth buffer."

看起来好像所有的碎片都被丢弃了。

我完全不知道如何进行。能否请您指出在哪里寻找此问题的原因?

似乎渲染通道的清晰值是这里的问题所在。

std::array<VkClearValue, 1> clearValues = {}; 
clearValues[0].depthStencil = { 1.0f, 0 }; 
renderPassInfoStruct.clearValueCount = 1; 
renderPassInfoStruct.pClearValues = clearValues.data(); 

是什么解决了我的问题。以前索引 0 的颜色值设置为 { 0.f, 0.f, 0.f, 1.f };

谢谢 Jesse 建议我再看一遍,否则我可能永远找不到它:)