В те золотые времена, когда Valve делали игры, а не продавали шапки, средь нескольких замечательных проектов вышла доселе никому неизвестная Portal, где подход к решению физических головоломок был можно сказать инновационным.
Виновницей таких лесных высказываний, как вы уже очевидно догадались, была отлично реализованная механика сотворения и пользования порталами. Уверен не один миллион игроков, балуясь внутриигровой физикой, задумывался о том как они работают, однако ответ скрыт за кучей нетривиальных хитростей, о которых статья и расскажет.
Что есть портал, камеры и рекурсия
Итак, начать стоит с того, что портал не является 3D моделью в обычном понимании, это - плоскость с текстурой портала. Можно предположить так же что это обыкновенная декаль, будто от выстрела, только побольше, однако портал может появится не везде и тут стоит понять как он вообще появляется.
После выстрела из портальной пушки, в его направлении летит луч и проверяет, может ли появится портал на встречающей его поверхности (и не мешает ли этому другой портал) , в случае успеха, спросив направление нормали, на ней под правильным заинверсированным углом появляется плоскость с натянутой текстурой.
Текстура зависит от того, оба ли портала задействованы : если нет - получите мыльное, заливающееся будто огнем месиво; если да - изображение на текстурах будут генерировать камеры.
Как оно видно ниже, к порталам привязано по камере, которые двигаются и поворачиваются относительно своего хозяина так же, как это делает Челл относительно другого портала. Именно поэтому, находясь далеко от одного из них, при приближении, камера так же будет приближаться и выходить из недр стены, создавая реалистичный эффект.
Затрагивая тему рекурсии - в случае двух расположенных напротив порталов, камера одного из них смотрит на другой, в котором в свою очередь он и виднеется. Не ограничивая количество итераций, такая бесконечная отрисовка текстуры в текстуре можно бестолково сожрать кучу ресурсов.
В движке Source, например, ограничение было в 9 итераций и это совершенно не бросалось в глаза, ибо главный герой не прозрачный, а чтобы заглянуть в "душу" портала, приходится тесниться к центру.
Старательно подобрав ракурс и уткнувшись в самую неживописную точку, можно узреть последний портал, что изображен в виде обычной его текстуры.
Дабы текстура с рекурсиями работала корректно, её отрисовка идет на кадр позже её генерации, так что незаметная задержка все же имеет место быть.
Перемещение и физика
Как вы уже наверняка поняли, передвижение и нахождение как бы меж двух порталов - тоже фикция. Достаточно в один кадр, при пересечении центра координат объекта, изменить его позицию в пространстве на ту, что при выходе с другого портала. Благодаря вышеописанным трюкам с камерой переход будет совершенно незаметным.
С физикой все тоже довольно просто - если скрипту не указано менять какие-либо переменные, он их и не трогает, поэтому вероятнее всего, при изменении позиции объекта действие сил не останавливается.
В подтверждении своих слов покажу небольшой пример с демки про разрушаемость машинок, статья о которой выйдет на днях :
Чтобы избавиться от подобного эффекта, мне пришлось усыплять компонент физики автомобиля на один кадр, дабы силы обнулились, тоесть физический движок NVIDIA PhysX, что есть в Unity, справляется с подобного рода задачами вполне логично.
В Portal'е же иной физический движок, прародителем которого стал Havok, и, если допустить что их движок по необъяснимым причинам заморозит силы на кадр в случае изменения позиции о функции которой он не знает, можно просто спросить силы и их направления при соприкосновении с порталом, придав их по выходу из другого.
Последней и самой неочевидной интересностью является клонирование входящих в портал предметов, Челл, например. Необходимо это для того, чтобы кусочек геометрии вылазил с другой стороны портала, а сделать это проще всего можно дублированием модели.
Клон так же повторяет все движения и повороты игрока относительно портала, другая же часть цельной модели кажется застревает в стене, но, учитывая наличие подходящих для портала поверхностей не только на стенах, но и на тонких платформах, модель обрезается шейдером.
Не самый хороший пример, однако показывает, как плоскость, роль которой выполняет портал, скроет визуальную часть модели, но не геометрии.
Соседние статьи с канала :
Искусство ботоводства
Как работает липсинк
Как работают генераторы персонажей