Какова цель буфера трафарета? Точнее, что такое трафарет в компьютерной графике?

41

Я много читаю слово «трафарет» и понятия не имею, каково его истинное назначение в компьютерной графике.

Увидев черно-белое изображение в Википедии, у меня все еще есть проблемы с ним.

Почему мы используем трафаретный или трафаретный буфер, и в чем разница с Z-буфером? Зачем использовать это слово, которое, кажется, имеет какое-то значение в графическом дизайне?

jokoon
источник
Отличный вопрос, все, что я знаю, это то, что он используется для рендеринга теней ... Но мне будет интересно услышать полное объяснение этого!
Рикет

Ответы:

40

В своем первоначальном воплощении трафаретный буфер представлял собой кадровый буфер размером один бит на пиксель (т.е. черный или белый, но без серого). Вы можете отображать на нем все, что захотите, как и любой другой фреймбуфер. Затем, позже, вы можете использовать содержимое этого буфера для «трафарета» или маскировки при рисовании в обычный буфер.

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

  1. Визуализируйте скругленный прямоугольник в буфер трафарета.
  2. Включить Stencilling.
  3. Визуализируйте вид в обратном направлении на обычный буфер.

Трафарет затем замаскирует его так, чтобы вы рисовали только в форме зеркала.

Теперь, когда конвейеры рендеринга стали намного более гибкими и программируемыми, трафаретные буферы используются как обычный 1-битный кадровый буфер, с которым вы можете делать все, что захотите. Тени являются частым случаем использования.

необычайно щедрый
источник
10
Другими словами, он в основном выполняет ту же функцию, что и реальный трафарет, маскируя детали при нанесении чернил.
Кай
4
В наши дни почти все устройства поддерживают 8-битный трафаретный буфер.
Крис Хоу
Я действительно не понимаю ваш пример, как будто есть второе разочарование? это растеризует другую часть сцены? Можете ли вы привести пример с тенями?
Jokoon
Это просто второй буфер кадра. Вы всегда можете изменить усеченный конус перед его рендерингом (что, я думаю, делают теневые системы), но это не является частью основной концепции.
Великолепно
9

В дополнение к функциональному использованию буферов трафарета, которые уже обсуждались, трафаретные буферы также могут быть использованы для оптимизации.

Из-за позиции теста трафарета в графическом конвейере (который предшествует затенению пикселей), тестирование трафарета может использоваться для уничтожения пикселей, которые выполняют тяжелую работу затенения, когда они не нужны. Часто это может быть сделано с большей степенью детализации, чем, например, один пиксель. мозаика пикселей, поэтому работа может часто отбраковываться и на этапах грубой растеризации.

jpaver
источник
4

Это просто буфер, который контролирует, какие пиксели могут быть изменены при визуализации полигонов. Для каждого пикселя есть соответствующее значение трафарета, и пиксели могут быть условно изменены / проигнорированы в зависимости от этих значений

В простейшем случае его можно использовать как физический трафарет - маску, которая пропускает некоторые пиксели и останавливает изменение других пикселей.

По поведению он очень похож на z-буфер, например, тестирование глубины, тестирование трафарета является тестом «истина / ложь», и существуют аналогичные настройки для управления тестом трафарета (если оно больше / меньше / равно) Но вместо того, чтобы записывать в него глубину, обычно в него будут записываться заранее определенные значения или увеличиваться / уменьшаться при рисовании пикселей, как это используется в алгоритмах тени трафарета.

bluescrn
источник