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

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

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

Embedded Image

Зеркало в Death Stranding

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии: 0