Подтвердить что ты не робот

Что такое теневые пробоотборники в OpenGL и какие возможности для них?

Я некоторое время работаю с этим расширением ES, но я до сих пор не совсем понимаю, что это за пробники теней и для чего их можно использовать. Googling на самом деле не принес мне приятных, читаемых результатов, поэтому я размещаю здесь.

Я ищу что-то, что помогло бы мне действительно понять, что они могут сделать. Это может быть либо реальный случай использования, либо что-то, что просто покажет, как они отличаются от обычных пробников. Я имею в виду, okey, они хранят данные глубины. Но как генерируются эти данные? Это просто сделано из текстуры, привязанной к привязке глубины?

Кроме того, мой вопрос относится и к DT (настольному) GL, и к ES, и, возможно, к WebGL; Меня не волнуют точные вызовы или перечисления, поскольку их легко найти в спецификациях.

4b9b3361

Ответ 1

A "shadow sampler" - это сэмплер, который используется для depth сравнительные текстуры. Обычно, если вы обращаетесь к текстуре глубины, вы получаете (отфильтрованное) значение глубины в этой координате текстуры. Однако в режиме сравнения глубины то, что вы делаете, - это другая операция.

Для каждого образца, полученного из текстуры, вы сравниваете глубину с заданным значением. Если сравнение проходит, то выборка будет равна 1.0. Если сравнение не удается, оно равно 0.0. Затем фильтрация работает над образцами после этого сравнения. Поэтому, если я делаю линейную фильтрацию, а половина образцов передает сравнение, а половина - нет, значение, которое я получаю, равно 0.5.

Чтобы сделать это, вы должны активировать сравнение глубины на объекте объекта/текстуры семплера, который вы используете, но вы также должны использовать теневой сэмплер в шейдере. Причина этого в том, что функция доступа к текстуре теперь требует дополнительного значения: значение для сравнения доступа к текстуре.

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

Причиной сравнения перед выборкой является то, что называется "Процентная фильтрация в процентах". Фильтрация между значениями глубины не дает разумных результатов; это не то, что вы хотите. Сначала вы хотите выполнить сравнение, а затем отфильтруйте сравниваемые логические результаты. То, что вы получаете, - это измерение того, сколько образцов из текстуры глубины прошло сравнение. Это дает лучшие результаты по краям теней.