Почему отображение теней является стандартом?

41

Хотя я по профессии программист, я почти не занимался разработкой игр. У меня был этот вопрос в течение некоторого времени, и теперь, когда я смотрю на разработку игр, я подумал, что сейчас самое время спросить.

Почему карты теней кажутся исключительным способом, который игры используют для создания теней? Чтобы быть тупым, это выглядит ужасно. Даже современные игры с максимальными настройками теней имеют неровные блочные тени, которые очень отвлекают.

В Doom 3, выпущенном 11 лет назад, использовались теневые тома, которые выглядели намного лучше, чем любая реализация карты теней, которую я когда-либо видел, включая игры AAA, выпущенные на той же неделе, когда этот вопрос был опубликован. Сторонние моды для Doom 3 даже смягчили края теней, сделав их еще более визуально впечатляющими.

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

Единственная информация, которую я смог найти по этому вопросу, заключается в том, что полигоны, составляющие объемы, могут быть довольно большими, становясь все более требовательными. Возможно, к теневым томам предъявляются гораздо более высокие системные требования, но если это так, то как им не удалось использовать их в 2004 году?

Этот вопрос не относится к теневому отображению по сравнению с теневыми томами. Они просто являются единственными, которые я видел в полных продуктах, и я просто не смог найти много информации о других методах.

gnoblin
источник
3
Просто примечание - Doom 3 был чрезвычайно высокопроизводительным для своего времени, и он все еще нестабилен даже на некоторых современных системах (и я не говорю об интегрированных графических процессорах, даже если это не будет действительно неуместно здесь; конечно, это наиболее вероятно из-за своего возраста, но ...). И я видел, как он работает на многих компьютерах, где тени и освещение просто не работают . Очевидно, что в игре есть множество сложностей с получением теней, и Doom 3 - хороший пример того, насколько реалистичная графика сложна для множества компьютерных конфигураций.
Луан
1
Doom 3 опередил свое время, когда началась разработка (по крайней мере, учитывая выбор графического API). У него было несколько бэкэндов для обработки поколений аппаратных пре-шейдерных моделей 2.0, и это означало, что около 1/4 движка едва ли переносимо (это предшествует даже GLSL), а оставшиеся 3/4 являются путями кода для древних аппаратных расширений NV и ATI. это не имело значения к моменту выхода игры. Выбор трафаретно-теневых томов был, пожалуй, наименьшей из его проблем.
Андон М. Коулман

Ответы:

48

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

Трафаретные тени недостатки

  1. Тени соответствуют форме сетки литья. Это очень ограничивает и, вероятно, является главной технической причиной, по которой не следует использовать тени трафарета . Листья деревьев, кусты, проволочные заборы, разрывы в ткани и другие распространенные элементы игры для отбрасывания теней используют альфа-прозрачность для определения формы объекта. Но поскольку трафаретные тени соответствуют сетке, а не строго видимым частям текстуры на сетке, их нельзя использовать для таких объектов. Например, группа листьев в дереве обычно будет текстурой группы листьев на четырехугольнике. Тени трафарета могли бы показать только тень самого квада (и у него будут проблемы с этим, поскольку квад не является закрытой сеткой, но это небольшая деталь, которую я пропущу для этого ответа, так как в общем можно обойтись).
  2. Не могу сделать точные мягкие тени. Вы указали, что Doom 3 был модифицирован, чтобы позволить мягкие тени. Эта версия здесь , по крайней мере, использует отображение теней для мягких теней. Я также видел методы экранного пространства для смягчения жестких теней, но они подвержены всевозможным проблемам.
  3. Не могу сделать тени на прозрачных объектах. Для этого есть обходные пути - рендеринг теней для прозрачных объектов на отдельных проходах и последующее их наложение. Но помимо сложных обходных путей, природа трафаретных теней такова, что каждый пиксель на экране либо находится в тени, либо нет. Это также причина отсутствия мягких теней, как упоминалось ранее.
  4. Обычно предпочтительная и наиболее надежная реализация теней трафарета, часто называемая «Реверс Кармака», на самом деле запатентована, как отметил Анджев в комментариях. (Не запатентовано Кармаком; ему пришлось обходить его для версии Doom 3 с открытым исходным кодом)

В пользу теневого картирования

Помимо отсутствия ограничений, которые я перечислил специально для теней трафарета, есть несколько дополнительных преимуществ для отображения теней:

  1. Масштабируемость. Хотя отображение теней не является ни дешевым, ни идеальным ( под ред., Но трафаретные тени тоже не дешевы ), сравнительно легко обменять верность на производительность, изменив разрешение карт теней или изменив фильтрацию теней. Это позволяет относительно легко настроить качество / производительность теней для разных систем. Как вы указали, это часто не идеально, но многое из этого будет зависеть от восприимчивости игрока и разрешения, с которым он играет (чем выше разрешение экрана, тем легче будет увидеть блеск тени отображение). Некоторые игры ААА (например, Fracture ) делают удивительную работу с отображением теней, просто выбирая правильные фильтры и настраивая правильные ручки, в то время как многие просто бьют по нему и говорят «достаточно хорошо».
  2. Cookies (текстурированные тени): добавьте текстуру прожектора или витража, и вы сможете эмулировать все виды реальных источников света. Кстати, это возможно и с трафаретными тенями, но в любом случае включает в себя почти все настройки отображения теней (те же матрицы проекции, которые используются для проецирования текстуры света на объекты, - те же, что используются для отображения теней).
  3. Прозрачные тени: большинство игр не очень стараются с этим, но прозрачные тени возможны при отображении теней. Я имею в виду не только альфа-вырезы, такие как деревья и заборы, как я упоминал ранее, но я имею в виду частично прозрачные тени, как от дыма и пыли.

Ни один из этих списков не является исчерпывающим.

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

Jibb Smart
источник
1
Аааа, я не учел большинство из этих вещей, и прозрачные текстуры, такие как листья, являются довольно серьезной проблемой. Спасибо за ответ!
Гноблин
1
Нет проблем :) Некоторые из них легко пропустить!
Jibb Smart
8
Я бы сказал, что еще одна проблема с теневыми объемами заключается в том, что проходу глубины не нравится, когда камера находится внутри тени, а сбой глубины запатентован.
Восстановить Монику
Хорошая мысль, Энджью. Я добавил это к причинам, не использующим тени трафарета, и разъяснил основную причину не использовать тени трафарета в качестве «самой большой технической причины», чтобы не использовать их, так как выдача патента сама по себе может стать препятствием для показа.
Jibb Smart