Не можете найти правильное смещение глубины отображения тени?

Здравствуйте, коллеги-программисты, я нашел еще одно препятствие в улучшении теневого отображения.
Вопрос в том, что я делаю некоторые карты теней и не могу найти подходящих для этого смещений глубины. Некоторое время назад в моем проекте XNA, когда я делал это в первый раз, я мог довольно хорошо настроить его на местности и быстро найти подходящее смещение, потому что, если не было смещения, возникли такие прыщи: Теневые прыщи
Я корректировал смещение до тех пор, пока тени не выглядели нормально, насколько я понимаю, это основная идея. Это результат, к которому я стремлюсь.
Теперь перейдем к DirectX 11, позже создадим небольшую сцену и проведем некоторое отображение теней PCF. Затем, при установке без смещения, не было таких прыщей, но тени были отключены, как это (извините за некрасивое текстурирование): Отключенные тени
У него должны быть прыщи на земле, а тень коробки соединяется с краем коробки, но вместо этого она отключается. При уменьшении смещения (до отрицательного значения) разрыв начинает уменьшаться, но вскоре вся карта теней темнеет, прежде чем достигнет оптимального расстояния.

Я использую тот же код шейдера (только расширенный с помощью фильтрации pcf), что и в XNA, поэтому я предполагаю, что это больше связано с API. Проверяя код xna, я даже не вижу, что представляют собой форматы рендеринга в текстуру, потому что они скрыты (я думаю).

Если кто-нибудь когда-либо имел эту проблему раньше, пожалуйста, помогите мне достичь тени прыщей с нулевым уклоном.

ОБНОВЛЕНИЕ: Это изображение показывает неравномерное затенение на плоском четырехугольнике (прыщи должны быть ровными по всему четырехугольнику, как это происходит на местности в XNA):
неровные прыщи

ОБНОВЛЕНИЕ 2: Я попытался переключить режим отбраковки, чтобы отбирать лицевые грани во время прохождения рендеринга глубины, таким образом тени можно отрегулировать немного лучше, потому что нет отрисованного пола, который затемнялся бы, если смещение изменилось, но тени все еще остаются очень неравномерно Тени отдельных сеток можно отрегулировать так, чтобы они хорошо выглядели, но тогда другие будут испорчены.
люди выглядят хорошо
Как-то, я думаю, распределение буфера глубины очень неравномерно, потому что объекты, расположенные ближе к дальней плоскости, получают лучшие результаты. Думаю, даже мои расстояния отсечения не плохие. Теневая проекция установлена ​​на 1-2000 глубинного распределения (в моей сцене 1 метр — это примерно 200 единиц), но, так или иначе, точность еще не достигнута.
Я попробовал форматы глубины текстуры R32_FLOAT и D24_S8_UNORM.

5

Решение

Я видел аналогичную проблему, когда неправильно устанавливал свойство SlopeScaledDepthBias (также является частью D3D11_RASTERIZER_DESC).

Как объясняется Вот, SlopeScaledDepthBias — важная часть вычисления смещения глубины, убедитесь, что он инициализирован чем-то, что имеет смысл.

2

Другие решения

ОК, уклон с изменением наклона — это решение для прыщей с самозатенением, но это не было правильным решением для моей проблемы.
Я обнаружил, что мой видовой экран настроен неправильно. Все это время я заполнял описание для его глубины до 0,1f вблизи глубины и 1,0f на большой глубине, потому что я не знал точно, для чего оно было, и работал нормально, но буфер глубины был неровным, получая большую точность около тени глаз и потеря точности идут дальше.
Я изменил описание видового экрана для представления трафарета глубины рендеринга карты теней на 0.0f на ближней плоскости, и, наконец, это сработало, поэтому теперь вся сцена получает информацию о глубине равномерно, как ранее в XNA.

2

По вопросам рекламы [email protected]