Почему в некоторых играх вместо прозрачности альфа-канала используется некий шаблон сглаживания?

24

Недавно я видел некоторые 3D-игры (например :),GTA IV использующие некое упорядоченное сглаживание для имитации прозрачности / альфа.

Полигоны не являются прозрачными, как обычно, но вместо этого визуализируют размытую текстуру, которая постепенно переключается слева направо для имитации прозрачности:

введите описание изображения здесь

Эффект не является неприятным, но довольно неожиданным для первого взгляда (против традиционного альфа-смешения)

За исключением визуального эстетического эффекта, который он производит, есть ли какая-то причина, по которой некоторые игры делают это (лучшая производительность, экономия полосы пропускания или что-то еще, о чем я не думаю)?

Я искал в Интернете, но не могу найти ничего об этой технике.

tigrou
источник
Вероятно, это просто пришло вместе со стилем пиксельной графики.
MichaelHouse
@ Byte56 Пиксель арт стиль? GTA IV? А?
Натан Рид
@NathanReed Хех, не в GTA IV. ОП упоминает, что видел это недавно в играх.
MichaelHouse
1
Я считаю эту технику более приятной, чем альфа-смешение, когда выцветаете трехмерные объекты, которые находятся слишком близко к ближней плоскости.
Андреас

Ответы:

27

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

Есть несколько способов, которыми игровые движки могут справиться с этим:

  • Используйте затенение вперед (возможно, с уменьшенной моделью освещения) для прозрачных поверхностей и отложенное затенение для непрозрачных поверхностей. Прозрачные поверхности должны быть нарисованы в отдельном проходе с сортировкой задом наперед.
  • Используйте сглаживание, более известное как прозрачность или прозрачность дверцы экрана, которая работает с отложенной штриховкой, поскольку дает только одну поверхность на пиксель. Это особенно хорошо работает для LOD-переходов, так как они обычно заканчиваются за фиксированное время, ограничивая то, как долго видно зернистость. Это не очень хорошо работает, скажем, со стеклянными окнами в здании.
  • Также возможно использовать зернистость, но затем применить размытие после обработки, которое объединяет пунктированные пиксели, давая приблизительную прозрачность. Volition делает это в «Saints Row the Third» (и, возможно, в некоторых других их играх) под названием « предполагаемое освещение ». Это может выглядеть довольно хорошо, но размытие после обработки стоит дорого.
  • И, конечно же, существуют все методы прозрачности , не зависящие от порядка , хотя я не знаю ни одной игры, в которой они используются. Пока они только для технических демонстраций.

Можно также использовать комбинацию этих подходов, например, прямое затенение для стеклянных окон и зернистость для переходов LOD.

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

Натан Рид
источник
я не знал о технике отложенного затенения (объяснение здесь: en.wikipedia.org/wiki/Deferred_shading ). Они также говорят о возможных альфа-проблемах. Иметь смысл сейчас. Спасибо за ответ
Tigrou
0

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

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

Сэм Хоцевар
источник
О каком компромиссе производительности вы говорите? Early-Z отключается, если вы используете сброс в своем шейдере. Смешивание выполняется на оборудовании и выполняется быстро.
Тара
На самом деле я только что протестировал его в своем движке на подходящей сцене с высоким разрешением: включение или отключение смешивания для ВСЕЙ геометрии не привело к разнице в производительности вообще. Ответ Натана Рида правильный, так как в отложенном рендеринге обычно используется дизеринг.
Тара