Как сделаны порталы в Portal и других похожих играх
Разбираемся, как создать иллюзию, будто через портал из одного места можно попасть в другое.
Скриншот: игра Portal 2 / Valve
Редкая фантастическая или фэнтезийная игра обходится без телепортации. Телепортация же бывает двух видов. Первая просто перемещает персонажа из точки А в точку Б, маскируя момент перехода под тонной эффектов вроде разноцветных искр.
Второй вид подразумевает, что появившийся портал, раскрылся он на стене или просто висит в воздухе, — это просто ещё одна дверь, сквозь которую можно пройти. Фишка этого способа в том, что сквозь портал видно место, в котором окажется персонаж. А сам момент перехода из одной локации в другую настолько мягкий и бесшовный, что кажется, будто и правда просто прошёл сквозь дверь.
Про последний вид порталов в играх мы и поговорим в этом тексте, ведь он и в реализации сложнее, и выглядит гораздо эффектнее.
Порталы до Portal
Популярность серии игр Portal от Valve привела к тому, что сейчас этот вид порталов ассоциируется именно с этой франшизой. Но на самом деле такая механика появилась гораздо раньше.
Во-первых, можно вспомнить секретный уровень Lunatic Fringe для шутера Duke Nukem 3D, вышедшего в 1996 году. Локация там небольшая. Буквально цилиндрическая комната, в центре которой располагается комната поменьше. Но если обойти её по кругу по часовой стрелке и вернуться в изначальную точку, то обнаружишь, что попал в какую-то другую комнату — альтернативную версию. Чтобы вернуться в изначальную комнату, надо пойти либо в обратную сторону, либо дальше по часовой стрелке. Таким образом, чтобы один раз обойти комнату по кругу, надо… обойти её по кругу два раза.
При этом если стоять во внутренней комнате, то можно заметить, что из окон открывается вид на альтернативную версию уровня, а из двери — на нормальную.
Такой эффект достигается благодаря особенностям движка Build Engine, который создаёт иллюзию трёхмерного пространства, хотя на самом деле все помещения в игре находятся на одной плоскости. Условно, если вы падаете в озеро и оказываетесь в подводном пространстве, на самом деле вы незаметно телепортируетесь в отдельную комнату в другой точке карты, которая находится на том же уровне, что и все другие комнаты.
Поверхность воды в Duke Nukem 3D — это телепорт, отправляющий персонажа в соседнюю комнату, имитирующую подводное пространство
Весь движок работает по принципу невозможной геометрии, так как при помощи телепортов он соединяет помещения, которые могут находиться далеко друг от друга. В случае с картой Lunatic Fringe просто есть две версии одной цилиндрической комнаты, и в определённом месте игра телепортирует персонажа из одной версии в другую.
Другой уровень, Tier Drops, работает по похожему принципу. Только в этом случае у нас есть большое квадратное помещение, в которое можно войти с четырёх разных сторон. И от того, с какой стороны персонаж войдёт, зависит, что будет внутри.
Но если говорить именно про порталы, выглядящие как двери и ведущие в помещения, которые «внутри больше, чем снаружи», то можно вспомнить российский шутер 1997 года MadSpace: To Hell and Beyond. На примере ниже видно куб, каждая сторона которого ведёт в свой длинный коридор. В реальности такая геометрия невозможна, но в играх подобное реализовывают практически с появления жанра FPS.
Гораздо более известная Unreal, вышедшая в 1998 году, показывала ту же механику, но на мультиплеерных картах. В частности, на карте DMRadikus можно было найти портал посреди комнаты, который вёл в просторный зал.
Только в Unreal порталы назывались варп-зонами (warpzones) и имели свои ограничения. Например, оружие, стрельба которого основана на хитскане (попадание определяется невидимым лучом, который в мгновение выстрела был выпущен из ствола) не сможет поразить противника по другую сторону варп-зоны. А вот ракеты, гранаты и диски, то есть снаряды как отдельные объекты, сквозь него пролетят нормально.
Поэтому, например, при разработке мультиплеерных карт для Unreal разработчики рекомендовали не ставить варп-зону в длинном коридоре, потому что, увидев противника на другом его конце, игрок схватится за дальнобойное оружие и не попадёт ни разу.
Также звуки не проходят через варп-зону. А если вы играете с ботами, то они не увидят вас сквозь портал.
В том же 1998 году на выставке E3 разработчики шутера-долгостроя Prey показывали одну из главных фишек игры — порталы. Причём они должны были стать частью геймплея, а не просто украшением уровня.
«Первым потрясающим моментом было то, что мы продемонстрировали портальную мину. Вы её бросаете, и она открывает портал. Затем вы могли бросить её „сестру“ и открыть второй портал. На презентации мы бросали мины так, чтобы, когда портал открылся, игрок видел через разлом своего персонажа. Он мог прицелиться и выстрелить в себя. Это поражало людей».
Пол Шуйтема,
один из руководителей разработки Prey
Опустим детали сложной разработки первой Prey. Скажем лишь, что, когда игра всё-таки добралась до релиза в 2006-м, порталы в ней были. Но их функциональность сильно обрезали: они создавали невозможную геометрию инопланетного космического корабля и были, скорее, украшением локаций.
Тем не менее порталы выглядели и работали отлично. А когда игрок в первый раз сталкивался с ними, они приятно сбивали с толку.
К тому же с их помощью было сделано множество интересных ситуаций. В одной из сцен, например, через портал мы могли попасть на миниатюру планеты, хранившуюся под стеклом.
В 2005 году группа из восьми студентов технологического института DigiPen в рамках обучения создала игру Narbacular Drop. В ней надо играть за принцессу, которая должна выбраться из подземелья. Принцесса не умеет прыгать, зато может создавать почти на любой поверхности порталы. Зайдёшь в один — выйдешь из другого. С помощью этой способности она уровень за уровнем преодолевает препятствия на пути. Получился оригинальный пазл.
Сами порталы, как мы уже писали выше, не были чем-то новым в играх. Но вот то, что студенты смогли придумать, как на их основе построить весь геймплей, вызывает уважение. Плюс порталы можно было создать почти на любой поверхности, что обещала, но не сделала Prey.
Студенты делали игру с прицелом на то, что после выпускного она станет частью портфолио и поможет им найти работу в игровой индустрии. Этот план сработал лучше, чем ожидалось. Когда директор Valve Гейб Ньюэлл увидел игру, он нанял на работу всю команду, попросив их сделать такую же игру, но теперь уже серьёзно — не на самопальном движке, который ещё дописывать и дописывать, а на Source. Так началась разработка знаменитой Portal.
Как работают порталы
Рассказывать в подробностях, о чём была Portal, мы не будем. Если вы никогда о ней не слышали, то вот: у вас есть пушка, которая может создавать на стенах, полу и потолке два портала — синий и оранжевый. Как и в Narbacular Drop, войдя в один, выйдешь из другого. С их помощью надо пройти цепочку комнат-головоломок, чтобы сбежать от злого искусственного интеллекта ГЛаДОС, который малость недолюбливает людей и обожает мучить их бесконечными испытаниями портальной пушки.
В интернете можно найти немало объяснений, как создаётся эффект порталов, когда сквозь них можно смотреть, словно через открытую дверь. Но и создатели Portal не поскупились на объяснения в режиме игры с комментариями разработчиков.
Эффект достигается при помощи нескольких камер. Первая, основная, прикреплена непосредственно к протагонистке. С её помощью мы смотрим на мир. Она создаёт изображение вне портала. Вторая камера цепляется к тому порталу, из которого мы выйдем, если зайдём в тот, на который смотрим. Она-то и создаёт ту картинку, которую мы видим сквозь портал. То есть, по сути, изображение в игре рендерится дважды.
Нюанс тут в том, что положение и угол обзора второй камеры относительно портала, к которому она прикреплена, задаются такими же, как и положение основной камеры относительно портала, на который она смотрит.
Ну а сама телепортация — это просто очень ловкое и незаметное перемещение персонажа из одной точки уровня в другую, когда он подходит близко к порталу. Благодаря правильной настройке работы двух камер игрок просто не замечает, как изображение со второй камеры становится целиком изображением с первой камеры.
«При рендере того, что игрок видит через портал, мы должны рендерить отдельное изображение, используя виртуальную камеру, которая смотрит сквозь противоположный портал. Чтобы получить корректное изображение и повысить эффективность рендеринга, мы визуализируем только то, что видно через ограниченное поле зрения противоположного портала, и исключаем объекты, которые находятся между виртуальной камерой и плоскостью противоположного портала».
Дэвид Кирхнер,
один из программистов Portal в режиме игры с комментариями разработчиков
Под объектами, которые не отображаются при рендере, подразумеваются стены. Ведь вторая камера, которая в этом случае ставится позади портала, оказывается за первой камерой. Добавим, что изображение от второй камеры на первый портал можно вывести двумя разными способами.
Первый — просто выводить изображение на текстуру портала на стене, как на телевизор. Один из минусов этого метода — издалека будет смотреться неплохо, но если подойти вплотную, то видно пиксели текстуры. Избавиться от них можно, если увеличить разрешение текстуры. Но это ударит по производительности, особенно если порталы будут стоять друг напротив друга и изображение в них превратится в бесконечный туннель. Первые несколько месяцев именно этим способом и пользовались разработчики. Но они отказались от него как раз потому, что он съедал много видеопамяти.
Второй способ, которым в итоге и были сделаны порталы в Portal, — с помощью буфера трафаретов (stencil buffer). Это специальный буфер в графической карте. Не будем разбирать, что он собой представляет и как работает, — в контексте игры Portal отметим лишь, что изображение с обеих камер выводится на весь экран. Но картинка со второй камеры отрисовывается лишь в той части экрана, которую занимает портал. Он как бы становится трафаретом, внутри которого игра рисует нужные пиксели.
Что же до рекурсии, которая появляется, когда порталы смотрят друг на друга, то для улучшения производительности она повторяется лишь девять раз. А эффекта бесконечности разработчики достигли, скопировав изображение предыдущего кадра работы игры на последний портал в цепочке рекурсий.
При разработке порталов была одна проблема: как сделать так, чтобы хитбокс игрока при телепортации не ударялся о стену, на которой размещён второй портал?
«Интеграция порталов в физическую систему движка Source была комплексным процессом, потребовавшим нескольких итераций, чтобы достичь правильного баланса между производительностью и корректностью. Поскольку порталы могут быть размещены практически в любом месте игрового окружения, пришлось модифицировать физическую систему, чтобы она позволяла динамически изменять геометрию для вычисления столкновений стен и пола с любыми объектами, которые могут находиться на противоположной стороне портала».
Дэвид Кирхнер,
один из программистов Portal в режиме игры с комментариями разработчиков
Сложность была в том, что изначально такая система перекраивала хитбокс стены под объект, входящий в портал, за 500 миллисекунд. Вроде немного, всего полсекунды. Но во время тестов эта крохотная задержка ощущалась. В итоге разработчики создали систему, которая помещает пространство вокруг портала во временную гибридную физическую среду, проводящую вычисление столкновений с гораздо меньшей точностью, нежели это делает движок Source. Впрочем, эти вычисления были достаточно точными, чтобы порталы работали хорошо. При этом хитбокс поверхности перекраивался не за 500 миллисекунд, а всего за десять.
Кстати, у порталов при создании второй части игры нашлось одно практическое применение. При проектировании уровней разработчикам постоянно приходилось переделывать связи между помещениями, чтобы добиться нужной сложности и эффектности. Из-за этого работа над каждой комнатой могла длиться часами, а порой и днями. В итоге команда просто стала делать помещения, никак не связанные друг с другом. А переход из одного в другое осуществлялся при помощи всё той же механики порталов.
«Используя порталы, соединяющие разные области мира, мы могли создавать пространство с невозможной геометрией. Вы могли заглянуть через коридор в соседнюю комнату, но коридор может находиться в одной точке карты, а комната, в которую вы смотрите, совсем в другой. Мы могли без проблем встроить в уровень лифт, огромное пространство или комнату, которая внутри была больше, чем снаружи. Мы даже могли создать бесконечное падение, соединив шахту саму с собой. Вскоре каждое соединение между любыми пространствами превратилось в портал».
Эрик Тамс,
один из создателей Portal 2 в режиме игры с комментариями разработчиков
Такие порталы в документации Valve называются linked_portal_doors или world portals. Они не имеют визуальных эффектов и выглядят просто как четырёхугольники. Игроки даже могут стрелять сквозь них портальной пушкой.
На финальных этапах разработки все эти порталы убрали, чтобы связать помещения нормально. Почти все: в паре мест всё-таки такие двери-порталы остались. Например, один такой есть в эпизоде с пробуждением ГЛаДОС, где с помощью подобного портала шахта мусоросжигателя соединяется с камерой ГЛаДОС.
После Portal игр, которые бы пытались повторить тот же геймплей, не было. Но это вовсе не значит, что сама механика телепортации не нашла своего применения в игровой индустрии. Её постоянно используют, когда хотят создать невозможную геометрию пространства. Например, вся Antichamber 2013 года была построена на иллюзиях, которые создавались при помощи механики порталов. Похожее можно увидеть и в Manifold Garden 2019 года.
А в The Stanley Parable 2013 года порталы использовали, чтобы делать зацикленные локации или чтобы обратный путь приводил персонажа не в то место, из которого он пришёл. Можно вспомнить и головоломку Moncage 2020 года.
Словом, порталы — невероятный простор для творчества. Пусть даже не всегда игроки знают, что персонажи проходят сквозь них.