Есть ли простой способ получить тени в OpenGL? - PullRequest
15 голосов
/ 03 октября 2010

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

Есть ли какие-нибудь простые способы создания теней?

Ответы [ 2 ]

26 голосов
/ 03 октября 2010

Нет.Растеризация очень плохая (даже в последних играх ААА есть заметные теневые артефакты), но все живут с ней.

Решения включают в себя (от самых простых / самых бедных до лучших / самых сложных):

  • Нет теней.Просто учтите окклюзию с более темными цветами. xNormal , Blender .
  • Если вы хотите приблизительную тень для персонажа, подойдет простой плоский многоугольник на земле с прозрачной и размытой текстурой.Смотрите скриншоты Zelda, например.Даже некоторые недавние игры все еще используют это.
  • Lightmaps.Только статическая геометрия, но идеальное освещение (предварительно вычислено).Разумно прост в реализации.Существует множество инструментов.
  • Объемы теней, популяризированные Carmack.Пиксель идеален, достаточно прост в реализации, довольно медленный.Хорошо для нескольких объектов.Нет мягких теней.
  • Карты теней.Немного сложно реализовать, если вы никогда не делали OpenGL.Трудно получить право.Пиксельные тени.Сделки с большим количеством полигонов.Не имеет дело с большими мирами.
  • Множество вариантов карт Теней.Много исследований в последние годы.На данный момент лучше всего это Cascaded Shadow Maps: Сложно, но сложно сделать так, чтобы он выглядел хорошо, но быстро, имеет дело с множеством полигонов и огромных миров.
  • Raytraced shadows: Это может быть следующее поколение.Никто на самом деле не использует это, за исключением некоторых научных работ.Очень сложно, не очень хорошо с динамическими мирами (пока), огромные статичные сцены в порядке.Пиксельные идеальные или мягкие тени, в зависимости от того, сколько у вас запасного графического процессора. Несколько вариантов ;по состоянию на 2014 это не было сделано ни в одной игре по соображениям производительности .

Таким образом, обычная хитрость заключается в том, чтобы смешивать красивые, но статичные подходы с динамическими, ноне очень хорошие подходы.Например, посмотрите мои учебники по lightmapping и shadowmapping .

5 голосов
/ 03 октября 2010

номер

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

...