188

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

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


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


Автор: Юрий Кулагин

Зеркало в Death Stranding


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


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


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

Источник


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

Источник


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

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


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

Источник


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


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


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

Источник


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


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

Источник


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

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


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

Источник


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


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

Источник


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


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

Источник


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


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

Источник


SSR


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


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

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


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

Источник


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


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

Источник


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


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


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


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

Источник


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


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


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

Источник


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


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

Источник


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


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

Источник


----------


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


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

Источник

CGI Media

3.1K поста6.6K подписчиков

Правила сообщества

• Посты должны соответствовать тематике cообщества.

• Не допускается спам и нарушение правил сайта pikabu.