Буфер глубины не заполнен данными в проходе рендеринга карты теней
В настоящее время я работаю над затенением в Вулкане. Я создал отдельный проход рендеринга для своей карты теней на основе кода SaschaWillem и Itoral. Основа моего приложения была основана на VulkanTutorial.
У меня проблема в том, что буфер глубины, в который должны записываться значения Z, полностью заполнен нулями. В настоящее время я передаю тот же MVP, что и для камеры, в шейдер карты теней. Я прикрепил RenderDoc к своему приложению, и вкладка Mesh Output для прохода карты теней содержит точно такие же значения для gl_Position, что и для обычного прохода. К сожалению, значения не сохраняются в буфер, как показывает просмотрщик текстур.
Между тем, буфер обычной глубины правильно заполнен значениями, вычисленными в обычном шейдере.
"Каждый раз, когда растеризатор создает фрагмент, тест глубины проверяет, находится ли новый фрагмент ближе, чем предыдущий. Если это не так, то новый фрагмент отбрасывается. Фрагмент, который проходит тест глубины, записывает свою собственную глубину буфер глубины."
Похоже, что все фрагменты отбрасываются.
У меня нет идей о том, как поступить. Не могли бы вы указать мне, где искать причину этой проблемы?
1 ответ
Похоже, здесь были проблемы с чистыми значениями прохода рендеринга.
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 };
Спасибо, Джесси, за предложение пройти через это снова, иначе я бы, наверное, никогда не нашел бы его:)