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