Буферы наборов элементов
Буфер набора элементов используется для маскирования пикселей в изображении для создания специальных эффектов. Маска определяет, рисуется ли пиксель. Эти специальные эффекты включают компостирование; декалинг; растворяет, исчезает и проводит пальцем; контуры и силуэты; и двухсторонняя набор элементов. Ниже показаны некоторые из наиболее распространенных эффектов.
Буфер набора элементов включает или отключает рисование на целевой поверхности отрисовки на основе пикселей. На самом базовом уровне это позволяет приложениям маскировать разделы отрисованного изображения, чтобы они не отображались. Приложения часто используют буферы наборов элементов для специальных эффектов, таких как растворение, декаляция и выстраивание.
Сведения о буфере набора элементов внедрены в данные z-buffer.
Как работает буфер набора элементов
Direct3D выполняет тест на содержимое буфера наборов элементов на основе пикселя по пикселям. Для каждого пикселя в целевой поверхности он выполняет тест с использованием соответствующего значения в буфере наборов элементов, ссылочного значения наборов и значения маски набора элементов. Если тест проходит, Direct3D выполняет действие. Тест выполняется с помощью следующих действий.
- Выполните побитовую операцию AND значения ссылки на набор элементов с маской набора элементов.
- Выполните битовую операцию AND значения буфера набора элементов для текущего пикселя с маской набора элементов.
- Сравните результат шага 1 с результатом шага 2 с помощью функции сравнения.
Приведенные выше шаги показаны в следующей строке кода:
(StencilRef & StencilMask) CompFunc (StencilBufferValue & StencilMask)
- StencilRef представляет значение ссылки на набор элементов.
- Набор элементовMask представляет значение маски набора элементов.
- CompFunc — это функция сравнения.
- StencilBufferValue — это содержимое буфера элементов для текущего пикселя.
- Символ ampersand (&) представляет побитовую операцию AND.
Текущий пиксель записывается на целевую поверхность, если тест набора элементов проходит и игнорируется в противном случае. Поведение сравнения по умолчанию заключается в записи пикселя независимо от того, как каждая побитовая операция оказывается. Это поведение можно изменить, изменив значение перечисленного типа, чтобы определить нужную функцию сравнения.
Приложение может настроить операцию буфера наборов элементов. Он может задать функцию сравнения, маску набора элементов и эталонное значение набора элементов. Он также может управлять действием, которое Direct3D принимает, когда тест набора элементов проходит или завершается сбоем.
Композиции
Приложение может использовать буфер набора элементов для составных 2D-изображений или трехмерных изображений на трехмерной сцене. Маска в буфере набора элементов используется для occlude области целевой поверхности отрисовки. Сохраненные 2D-данные, такие как текст или растровые изображения, затем можно записать в область occluded. Кроме того, приложение может отображать дополнительные трехмерные примитивы в области маскированного набора целевой области отрисовки. Он может даже отобразить всю сцену.
Игры часто составные несколько трехмерных сцен вместе. Например, в играх для вождения обычно отображается зеркало заднего вида. Зеркало содержит представление трехмерной сцены за драйвером. По сути, это вторая трехмерная сцена, составная с представлением вперед водителя.
Декалинг
Приложения Direct3D используют декалинг для управления тем, какие пиксели из определенного примитивного изображения рисуются на целевую поверхность отрисовки. Приложения применяют декалы к изображениям примитивных примитивов, чтобы обеспечить правильную отрисовку совместного многоугольника.
Например, при применении шин и желтых линий к дороге разметка должна отображаться непосредственно на вершине дороги. Однако значения z маркировки и дороги одинаковы. Таким образом, буфер глубины может не производить чистое разделение между двумя. Некоторые пиксели в заднем примитиве могут отображаться поверх переднего примитива и наоборот. Полученный образ, как представляется, сияет от кадра к кадру. Этот эффект называется z-бои или флимеринг.
Чтобы решить эту проблему, используйте набор элементов, чтобы маскировать раздел заднего примитива, где будет отображаться декал. Отключите z-буферизацию и отрисовку изображения переднего примитива в область маскированного отключения поверхности целевого объекта отрисовки.
Хотя для решения этой проблемы можно использовать несколько смешивания текстур, это ограничивает количество других специальных эффектов, которые может производить ваше приложение. Использование буфера наборов элементов для применения декалов освобождает этапы смешивания текстур для других эффектов.
Растворяет, исчезает и проводит пальцем
Все чаще приложения используют специальные эффекты, которые часто используются в фильмах и видео, таких как растворения, пальцы и исчезания.
В растворе один образ постепенно заменяется другим в гладкой последовательности кадров. Хотя Direct3D предоставляет методы использования нескольких смешений текстур для достижения одного эффекта, приложения, использующие буфер наборов элементов для растворений, могут использовать возможности смешения текстур для других эффектов во время их растворения.
Когда приложение выполняет растворение, оно должно отображать два разных изображения. Он использует буфер набора элементов для управления тем, какие пиксели из каждого изображения рисуются на целевой поверхности отрисовки. Можно определить ряд маски наборов элементов и скопировать их в буфер наборов элементов на последовательных кадрах. Кроме того, можно определить базовую маску элементов для первого кадра и изменить ее постепенно.
В начале растворения приложение задает функцию набора элементов и маску наборов, чтобы большинство пикселей из начального изображения прошли тест наборов элементов. Большая часть пикселей из конечного изображения должна завершиться сбоем теста набора элементов. На последовательных кадрах маску набора элементов обновляется таким образом, чтобы меньше и меньше пикселей в начальном изображении прошли тест. По мере выполнения кадров меньше и меньше пикселей в конечном изображении завершаются сбоем теста. Таким образом, приложение может выполнять растворение с помощью любого произвольного шаблона растворения.
Увядание в или увядание является особым случаем растворения. При упадающем режиме буфер трафарета используется для растворения от черного или белого изображения к отрисовке трехмерной сцены. Исчезание является противоположностью, ваше приложение начинается с отрисовки трехмерной сцены и растворяется в черно-белом. Угасание можно сделать с помощью любого произвольного шаблона, который вы хотите использовать.
Приложения Direct3D используют аналогичный метод для проводите пальцем. Например, когда приложение выполняет пальцем влево направо, конечный образ будет постепенно скользить поверх начального изображения слева направо. Как и в растворе, необходимо определить ряд маск наборов элементов, загруженных в буфер наборов элементов на последовательных кадрах, или последовательно изменить начальную маску наборов элементов. Маски набора элементов используются для отключения записи пикселей из начального изображения и включения записи пикселей из конечного изображения.
Пальцем несколько сложнее, чем растворение в том, что приложение должно считывать пиксели из конечного изображения в обратном порядке прокрутки. То есть, если проводите пальцем слева направо, приложение должно считывать пиксели из конечного изображения справа налево.
Контуры и силуэты
Буфер набора элементов можно использовать для более абстрактных эффектов, таких как выстраивание и силуэтирование.
Если приложение применяет маску набора элементов к изображению примитива, который является той же фигурой, но немного меньше, результирующий образ содержит только контур примитива. Затем приложение может заполнить маскированную область рисунка с сплошным цветом, что дает примитиву вытянутый вид.
Если маска наборов совпадает с размером и фигурой, что и примитив, полученный образ содержит отверстие, где должен быть примитив. Затем приложение может заполнить отверстие черным, чтобы создать силуэт примитива.
Двухсторонняя набор элементов
Теневые тома используются для рисования тени с буфером наборов элементов. Приложение вычисляет теневые тома, отбрасываемые геометрией, вычисляя края силуэта и выдавая их от света в набор трехмерных томов. Затем эти тома отрисовываются дважды в буфер наборов элементов.
Первая отрисовка рисует многоугольники вперед и увеличивает значения элементов-буфера. Вторая отрисовка рисует многоугольники задней области теневого тома и уменьшает значения буфера элементов. Как правило, все добавочные и отложенные значения отменяют друг друга. Однако сцена уже была отрисовывается с нормальной геометрией, что приводит к сбою теста z-буфера при отрисовки теневого тома. Значения, оставшиеся в буфере элементов, соответствуют пикселям, которые находятся в тени. Эти оставшиеся содержимое буфера трафаретов используются в качестве маски, чтобы альфа-смешивать большой, все охватывающий черный квадрат в сцену. При использовании буфера набора элементов, выступающего в качестве маски, результатом является темный пиксель, который находится в тени.
Это означает, что теневая геометрия рисуется дважды на источник света, поэтому давление на вершинную пропускную способность GPU. Двухсторонняя функция набора элементов разработана для устранения этой ситуации. В этом подходе существует два набора состояния наборов элементов (с именем ниже), один набор для треугольников с передней стороны и другой для треугольников с задней стороны. Таким образом, только один проход рисуется на теневой том на свет.
Связанные темы