Как создают отражения в играх — от Duke Nukem 3D до рейтрейсинга

Замечали, как часто в играх встречаются разбитые зеркала? Или слишком грязные и поцарапанные — настолько, что в них не видно отражения. Разработчики не любят делать зеркала целыми и чистыми — для этого требуется слишком много работы.

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

Автор: Юрий Кулагин
Отражения 1.jpg

Зеркало в Death Stranding

Комнаты-двойники

Работающие зеркала появились в видеоиграх ещё до эпохи 3D. Во многих квестах начала 1990-х этот эффект достигался просто — спрайт персонажа дублировался, а фон заранее отрисовывался сразу с зеркальным отражением.

В 1996-м году зеркала с отражением появились в Duke Nukem 3D. Для каждого зеркала в игре создавалась дополнительная комната, отражённая по горизонтали со всеми деталями и обстановкой. Когда игрок приближался к зеркалу, в эту отражённую комнату добавлялся персонаж, дублирующий движения игрока. А само зеркало, соответственно, работало как окно между двумя комнатами.

Отражения 2.jpg

Источник

Эффект получился красивым и располагал к творческим экспериментам. Например, во второй части Crash Bandicoot отражения на льду тоже были зеркальными комнатами, только отражёнными уже по вертикали. Причём “двойников” получили не только окружение и главный герой, но и находящиеся на льду предметы. Подобных секций на уровнях было немного — разработчики по возможности избегали лишней нагрузки.Отражения 3a.png

Отражения 3b.jpg

Источник

A разработчики Doom 3 воспользовались желанием игрока полюбоваться на своё отражение. В одном из туалетов в игре зеркало запускает специально заготовленный скример, если на несколько секунд засмотреться на модель персонажа.

Зеркальные комнаты выглядят убедительно, но в современных играх почти не используются. Для их работы движку нужно рендерить сразу два помещения, а левел-дизайнерам приходится планировать уровень так, чтобы для отражённого помещения нашлось место.

Во времена Duke Nukem 3D это не было большой проблемой. Интерьеры тогда оформлялись довольно просто: никаких сложных теней, в роли мебели — комбинации кубов и спрайтов. Движку игры всё равно приходилось поднапрячься, но в масштабах целого уровня нагрузка возрастала не сильно. Но со временем подход к зеркалам пришлось поменять.

Отражения 4.jpg

Источник

Отдельный рендер

В современных играх “зеркальные комнаты” почти полностью вытеснила более “честная”, хотя и столь же ресурсозатратная технология — planar reflections. Это отражения, которые создаются с помощью дополнительного рендера всей сцены. На этапе создания уровня левел-дизайнеры делают только одну комнату, после чего в поверхность, которая станет зеркалом, встраивается виртуальная камера. Она включается, когда попадает в поле зрения игрока, и заново рендерит комнату.

Подход двух технологий схож — движку нужно либо отрендерить две комнаты, либо одну, но с двух разных ракурсов. На производительности это всё равно сказывается не лучшим образом: локации, сделанные по современным стандартам, содержат множество мелких деталей, эффектов, шейдеров и движущихся объектов. Они сами по себе могут легко загрузить игровой движок, тем более — если их нужно отрендерить дважды.

Отражения 5.JPG

Источник

Рендер с позиции зеркала можно сделать в пониженном разрешении, особенно для небольших зеркал в играх с видом от третьего лица. В них нельзя придвинуть основную (игровую) камеру вплотную к зеркалу, поэтому разницу в чёткости трудно заметить.

Поэтому повсеместно такие отражения использовать нельзя. Как правило, они встречаются либо в относительно компактных и небогатых на детали помещениях, как туалеты в новом Hitman, либо настолько тёмных, что в тенях скрывается большая часть деталей — как сцены с допросами из Tom Clancy’s Splinter Cell: Conviction.

Отражения 6a.jpg

Отражения 6b.jpg

Источник

Зеркальные кубики

В 1999 году Nvidia представила прорывную по тем временам видеокарту GeForce 256. Одной из её главных особенностей была поддержка cube maps — кубических карт отражений. Для создания кубической карты из центра локации захватываются шесть плоских изображений, которые ужимаются и наносится на плоскости невидимого для игрока куба, после чего его грани сглаживаются — получается панорамный шар, затекстуренный изнутри.

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

Отражения 7.jpg

Источник

На таких поверхностях cube maps выглядят неплохо, несмотря на низкое разрешение. Такие отражения довольно просты в производстве и не сильно нагружают систему, ведь самый трудоёмкий процесс (рендер самого куба) производится ещё на этапе разработки, чтобы сама игра потом просто подгружала затекстуренную панораму.

Ранние варианты технологии с трудом подстраивались под движения игрока. Например, если он отходил на несколько шагов от центра комнаты, то отражения смещались неравномерно. Со временем эта проблема была решена с помощью parallax corrected cube maps, которые сейчас уже почти полностью вытеснили классические “кубики”. Главное отличие параллаксов — умение растягиваться и подстраивать изображение под камеру игрока.Отражения 8.jpg

Источник

Cube maps используют заранее запечённые отражения, поэтому движущихся объекты в них не отражаются. На любое масштабное изменение локации — взрыв в комнате, рухнувшая стена здания, смена дня на ночь -нужно заранее заготовить отдельный куб.

Если не дополнять “кубики” другими технологиями отражения, то персонажи в игре будто превращаются в вампиров: весь мир вокруг них отражается, а сами они — нет. Генерирующиеся в реальном времени cube maps существуют, но пока что почти не используется — на создание панорамной текстуры, которая должна постоянно обновляться, уходит слишком много ресурсов.

Отражения 9.jpg

Источник

Из-за ограничений технологии разработчикам приходится идти на хитрости. Например, в Spider-Man 2018-го года применяются кубы отражений, которые подгружаются слоями. На некоторые здания в игре назначены несколько кубических отражений, запечённых на разной высоте. Пока Человек-Паук карабкается вверх по очередному небоскрёбу, карты отражений плавно меняются от нижних этажей в низком же разрешении до более чётких кадров.

Cube maps активно используются в играх, когда нужно создать “фоновое” отражение на размытой поверхности. На создание в таких ситуациях “честных” отражений для большой локации современные движки не рассчитаны. Проще заранее нарисовать и отрендерить кубы с текстурами, а затем правильно их расставить.Отражения 10.jpg

Источник

SSR

В 2011 году Crytek наряду добавила в Crysis 2 шейдер, который получал отражения при помощи трассировки лучей только к видимым на экране объектам, используя информацию с предыдущих стадий рендеринга. Эта технология получила название screen space reflections (или просто SSR), и сейчас используется повсеместно.

SSR — ресурсозатратный процесс, но нагрузка на движок получается ниже, чем от дополнительного рендера.Отражения 11.jpg

Для отражения SSR использует только те ресурсы, которые видит сам игрок. Если какой-то объект хотя бы частично остаётся за кадром, то и его отражение в воде или в витрине не будет прорисовываться до конца. Такие ограничения разработчики маскируют, замыливая отражающую поверхность или растягивая края текстуры.

SSR часто применяют в комбинации с другими методами отражения. Например, в том же Spider-Man от Insomniac Games стеклянные фасады небоскрёбов чередуют SSR с кубическими отражениями. Первые используются в важных для сюжета местах и улицах с плотным трафиком — в отличие от cube maps, SSR может убедительно показать отражения пешеходов и автомобилей, хотя и искажает перспективу.Отражения 13.png

Источник

В боевых сценах Spider-Man SSR накладывается прямо на кубическое отражение. Относительно небольшие (если сравнивать с панорамами виртуального Нью-Йорка) помещения позволяют увеличить нагрузку на систему, поэтому cube map отвечает за статичную часть отображения (стены, потолок, мебель), а SSR — за подвижную (противники и главный герой).

В Hitman три типа отражений совмещаются и в пределах одной локации — особенно в Hitman 2, для которой разработчики обновили графический движок. Зеркала в небольших комнатах используют дополнительный рендер, а многие прозрачные объекты (стеклянные перегородки, окна) — SSR. А в отдельных местах разработчики размещают простые кубические отражения, чтобы хоть как-то снизить нагрузку на систему.Отражения 14.jpg

Источник

Как трассировка лучей работает с отражениями

Трассировка лучей меняет весь подход к созданию отражений в видеоиграх. Если прежде все технологии пытались имитировать только эффект зеркал, то рейтрейсинг воспроизводит источники света создаёт более точные отражения. О щадящих нагрузках на систему здесь речь уже не идёт — отражения с трассировкой предназначены для мощных ПК и консолей следующего поколения.

Трассировка лучей — это тоже имитация. Но имитирует она не только эффект отражений, но и то, как они образуются. В этом смысле рейтрейсинг проигрывает родственной технологии — трассировке пути (path tracing). Последняя полностью имитирует движения лучей в сцене, тогда как рейтрейсинг ограничивает их количество.

Обе технологии уже давно используются в рендере сцен для фильмов и мультипликации. Для работы со светом в реальном времени они не подходили из-за огромной нагрузки на систему. Из-за предельно точной симуляции лучей трассировка пути всё ещё не может применяться в играх, но рейтрейсинг, пусть и с некоторыми упрощениями, разработчики всё же смогли адаптировать под использование в реальном времени.Отражения 15.jpg

Источник

Трассировка лучей позволяет по-разному формировать отражения для разных типов поверхности. Например, прозрачные отражения ( RT transparency reflections). применяют для любых стеклянных поверхностей в игре: зеркальный эффект добавляется на окна, перегородки и даже чайники.

При этом симуляция пучков света учитывает освещение вокруг стеклянного объекта. Например, если за стеклянной дверью находится тёмная комната, то и отражение на двери будет чётким и контрастным. Чем помещение светлее, тем более блёклым получается эффект. А если за стеклянным объектом лишь кромешная тьма, то отражение, полученное с помощью этой технологии, не уступит по чёткости зеркалам с дополнительным рендером.

RT opaque reflections — это отражения, которые по применению и внешнему виду похожи на SSR. На любых поверхностях, обладающих хотя бы минимальными зеркальными свойствами, появляются контуры отражаемых объектов. Или даже не контуры, а сами объекты, — только слегка смазанные. Opaque reflections хорошо работает с разными типами материалов и по-разному отражается на мутной, но отполированной плитке, и на луже крови.

Отражения 16.jpg

Источник

Как и SSR, opaque reflections меняются в зависимости от угла обзора игрока и от его местоположения. Но при этом они ещё и показывают объекты, находящиеся за пределами кадра. Результат напоминает planar reflections, но с одним большим отличием: в этом случае используется не текстура — пускай и очень качественная, — а симуляция лучей.

Это важно потому, что текстуры, работающие по технологиям SSR и, тем более, planar reflections, нельзя размещать слишком тесно. Они могут не только излишне нагрузить систему, но и конфликтовать друг с другом. А отражения в рейтрейсинге, наоборот, дополняют друга друга и ни с чем не конфликтуют.Отражения 17.jpg

Источник

Отражения, полученные с помощью трассировки лучей, не только красивы, — они ещё и “склеивают” воедино любой уровень. Если в сцене есть десять предметов, и половина из них может создавать отражения, то рейтрейсинг распределяет эти отражения на все пять предметов. Ни SSR, ни cube maps такого не умеют.

Наконец, рейтрейсинг отлично справляется с отражением движущихся объектов в кадре. К хитростям вроде наложения одной технологии на другую не приходится прибегать — наоборот, нужно накладывать определённые ограничения, чтобы не перегрузить движок. Главного героя и его противников трассировка лучей отразит без проблем, но ей по плечу и летящие пули, и куски штукатурки, и даже брызги крови. Если у предмета есть физическая модель в игровом мире, трассировка учитывает её и отражает на всех доступных плоскостях.Отражения 18.png

Источник

***

Отражения, полученные трассировкой лучей, не сразу заменят уже устоявшиеся в игровой индустрии технологии. Рейтрейсинг неплохо уживается и с SSR, и с кубическими “зеркалами” в одном кадре. Например, в Battlefield V трассировка лучей умеет плавно меняться на screen space reflections на небольшом удалении от игрока. А в World of Tanks рейтрейсинг обрабатывает только танки на ходу, а остальное окружение и взорванные машины обходятся более простыми технологиями.

Главный технический вопрос в этом случае — поиск правильного баланса между честными отражениями и их симуляцией. И Unreal Engine, и Unity умеют работать с рейтрейсингом и полностью открыты для экспериментов, поэтому у разработчиков есть удобные площадки для изучения технологии. Вероятно, рейтрейсинг будет становиться всё более популярным по мере того, как будет дешеветь поддерживающее его “железо”.

Отражения 19.png

Источник

725 0 850 2
17
2020-05-20
Помню отражения на полу в nfs most wanted 2005 были зачёт дублирования моделей авто и окружения под полом)
2020-05-20
Размытое отражение ещё больше жрать будет
2020-05-20
В Mafia 3 были лучшие отражения в зеркалах
2020-05-20
Евгений, не факт. Потому что очень часто размытие применяется с понижением разрешения эффекта.
2020-05-20
Алексей, это всё равно придётся таки шейдера тратить, даунскейл полученного после всех пассов изображения, и размытие. Либо нужно отдельно LOD подгружать лоупольный с низким разрешением текстур
2020-05-20
Евгений, ну, отражения по любому замедляют все расчеты. Так что да, частенько из отражений исключают некоторые объекты, снижают "дальность действия" отражений, снижают разрешение отражения и применяют тому подобные трюки.
2020-05-20
3D Coat в помощь
2020-05-20
Андрей, шта?
2020-05-20
Render target и готово
2020-05-20
Евгений, любит человек 3d-coat)
2020-05-20
делают плейн, на который текстурой накидывают снятое изображение от вспомогательной камеры. Когда не было видео-текстур, то приходилось реально дублировать объекты.
2020-05-20
Евгений, чё-чё?) Разрешение изображение понижают и всё - пиксели крупнее, если совсем простыми словами)
2020-05-20
Christina, для этого сперва надо тогда посчитать это изображение в максимальном качестве, что не очень разумно перед размытием
2020-05-20
Евгений, нет, как раз это не оптимальный вариант, и его не используют. Мы же говорил о реал-тайм среде. Там изначально стараются все процессы оптимизировать.
2020-05-20
Алексей, да, я просто ответил, что это и не оптимальный вариант
2020-05-21
интересно, а почему нельзя оставить жалобу на коммент админов или группу? несколько постов ниже реклама навального. сколько тут стоит реклама фейса? политической партии, религиозного движения... как то низко это
2020-05-22
Михаил, весеннее обострение?
RENDER.RU