Трейлер Доставить любой ценой
Разрушение полностью разрушаемого мира Deliver At All Costs

Кто не мечтал о том, чтобы разносить город, разрушая все на своем пути?
Это, по сути, основа Доставить любой ценой, хаотичной новой экшен игры, созданной Far Out Games и изданной Konami. Игроки берут на себя роль курьера Уинстона Грина, подбирая необычные грузы, а затем прорываясь сквозь абсолютно все, чтобы доставить этот груз к месту назначения.
Одним из главных моментов игры является ее полностью разрушаемый мир – почти каждое здание в игре с ретро-атмосферой 50-х годов можно разнести в пух и прах, как и автомобиль игрока.
Добраться туда (при этом достигая целевой частоты 60 fps) было настоящим подвигом. Мы встретились с директором игры Даниэлем Нильсеном, техническим директором/ведущим программистом Йонатаном Йоханссоном и Ларсом Олссоном, генеральным директором Far Out и ведущим по дизайну уровней, чтобы узнать, как создать мир, который разрушается по-разному каждый раз, когда вы играете.
Unity: Давайте начнем с небольшого рассказа об игре.
Даниэль Нильсен, директор игры: В Доставить любой ценой вы играете за Уинстона, курьера с характером в мире, где все разрушаемо. Вы доставляете самые безумные вещи, которые только можете представить – все, от огромного однотонного меч-рыбы, который переворачивается и колеблется в машине, до шариков, которые заставляют машину летать. Все основано на физике.
Ларс Олссон, генеральный директор, графика и дизайн уровней: Это в неком мире американской культуры 1950-х годов. Мы потратили много времени на создание приятной атмосферы с согласованной музыкой и звуками той эпохи.

Одним из действительно уникальных аспектов этой игры является полностью разрушаемый мир. Можете рассказать немного о том, как вы это создали?
Ларс: Разрушимость мира повлияла на всё, начиная от того, как мы создаём наши активы, и заканчивая количеством геометрии и сеток, которые используются. Всё должно быть двусторонним, так что если вы что-то разрушаете, вы ожидаете увидеть внутреннюю часть – это не просто пустая оболочка. Мы хотели сделать мир очень реактивным и погружающим, так что всё, что вы делаете, влияет на окружающую среду.
Как вы подходили к дизайну активов, где всё разваливается?
Ларс: Мы моделируем каждое здание или предмет с этим в виду и обязательно добавляем соответствующие метаданные к различным элементам 3D-модели. Затем мы переносим это в Unity и разбиваем, чтобы убедиться, что есть разумное количество частей, на которые оно может развалиться. В Unity это довольно сложный процесс, чтобы убедиться, что всё приятно разрушать. Мы обычно проезжаем через каждое здание как минимум 20–30 раз, просто чтобы знать, что его приятно разрушать с каждого угла.
Мы настроили пользовательские конвейеры для различных типов активов.
Йонатан Йоханссон, технический директор: Да, мы стараемся немного разбить это уже на этапе моделирования в Blender. Так что у вас есть крыша, окна и стены, отделённые друг от друга уже на этом этапе, и вы можете классифицировать их и назначать метаданные в зависимости от материала.
Затем, когда мы переносим это в Unity, у нас есть пользовательские инструменты, чтобы разбить все эти части ещё дальше на более мелкие куски, и это также учтёт метаданные из Blender.
С нашим конвейером мы можем сказать, какие части здания должны иметь эффекты стекла, например, что автоматически настраивает эффекты частиц, звуковые эффекты и подобные вещи. Вы делаете это для всех различных типов, затем у нас есть инструмент, который позволяет вам нажать одну кнопку, и он создаёт всю настройку выпекания с физикой, оптимизациями и необходимыми структурами, чтобы вы могли быстро перейти к итерации на ощущении вождения в это.

Ларс: При настройке здания или актива для разрушения мне нужно протестировать настройку в сцене с экологическим контекстом. Со мной это случалось не раз, когда я осознавал, что сбился с курса и начал разрушать что-то другое в сцене. Легко увлечься весельем, так сказать.
Йонатан: Идея разрушения в начале была довольно простой: Что если мы возьмем здание, разобьем его на множество частей и добавим физику ко всем ним – что произойдет? Это был просто хаос, все взорвалось повсюду. Но мы смогли решить большинство проблем с помощью некоторых предварительных шагов, чтобы избежать ненужных столкновений и тому подобного.
В конце концов, мы столкнулись с самой большой проблемой, которую, честно говоря, ожидали с самого начала – производительностью. Это была самая большая проблема с этой системой и постоянные усилия на протяжении всего производства. Это заставило нас переосмыслить некоторые фундаментальные вещи, чтобы взять это под контроль. Тогда, возможно, одной из самых важных оптимизаций было применение умной логики отсечения, чтобы ограничить количество физических объектов, которые существуют одновременно.
Какие техники вы использовали, чтобы контролировать производительность?
Йонатан: У нас много объектов. Здания могут состоять из около ста частей или физических объектов каждое, когда они полностью загружены, что довольно много – обычно у вас может быть всего несколько объектов на сложном здании. Это заставляет физический движок занимать много производительности, но, конечно, также приводит к большому количеству вызовов отрисовки.
Одна из основных техник, которые мы использовали, была очень, очень агрессивная отсечка. Мы получили много помощи от угла камеры, который, в некотором роде, уникален для этого типа игры в наши дни.
Это вид сверху, почти ортографический, создающий изометрическое ощущение. Мы действительно использовали это в своих интересах в оптимизациях. Поскольку мы всегда знаем, в каком направлении будет смотреть камера, мы точно знаем, что все, что справа или слева от камеры, например, не будет показано. Поэтому мы часто используем это, чтобы определить, какие элементы находятся вне экрана. Даже тогда мы обнаружили, что нам нужно выделить значительную часть бюджета кадра на физику. В игре есть много других вещей, таких как AI-автомобили, которые ездят вокруг, много игрового кода, который работает, и это также требует много производительности. Нам действительно нужно было выжать каждую каплю, чтобы физика могла делать свое дело.
Мы в конечном итоге сильно оптимизировали многие наши игровые системы. Но мы также сделали оптимизации для нескольких систем, которые мы не создавали сами. Например, мы использовали систему рельефа Unity для наземной сетки для большинства сцен, но мы не используем LOD из-за камеры, так как вы всегда будете видеть игру с одного и того же расстояния. Система рельефа имеет встроенную функцию LOD, которая занимала несколько миллисекунд каждый кадр из бюджета кадров, и нам это на самом деле не нужно было, но отключить это было невозможно. Поэтому мы реализовали собственное гибридное решение. Мы запекли рельеф в сетку, по сути, и это сэкономило нам несколько миллисекунд. Мы также получили значительную экономию от оптимизации рендеринга декалей. Мы сильно полагаемся на декали, чтобы добавить дополнительную детализацию в текстуры, так как у нас так много различных типов активов.

Ларс: У нас были огромные преимущества от использования объекта рельефа Unity с его инструментами – оптимизация, о которой говорит Йонатан, происходит во время игрового процесса, но для меня, как для дизайнера уровней, я все еще могу работать с инструментом рельефа Unity и не думать об этой части.
Даниэль: Еще одной большой оптимизацией, которую мы сделали, было изменение систем частиц. Когда мы изменили их на безосвещенные, это сэкономило много. Все эти мелкие детали, над которыми вы работаете много лет, в совокупности имеют значение.
Йонатан: Мы используем много частиц для разрушения. Если бы мы делали действительно реалистичное разрушение, нам понадобилось бы тысячи частей, что не сработало бы.
Можно сказать, что есть несколько различных этапов разрушения. Сначала у вас есть целое здание, затем здание разбивается на части, а затем каждая часть разбивается на сетчатые частицы, которые составляют систему частиц. Это намного дешевле, и мы используем много пыли, чтобы скрыть все мелкие детали, которые мы не хотим, чтобы игроки видели, но это объединяет все вместе в приятный, согласованный способ.
Ларс: Это скрывает переходы. Системы частиц пыли скрывают переходы между реальными физическими телами и когда они превращаются в частицы, так что это ощущается как можно более плавно.
Даниэль: Я думаю, что одной из самых впечатляющих вещей в игре является то, что если вы играете в игру на PlayStation® 5 или Xbox Series X и разрушаете все, что видите, вы все равно получите 60 fps, независимо от того, что вы делаете.
Последнее, о чем я хотел спросить, это физика. Есть несколько различных областей, где физика становится действительно интересной в игре, конечно, разрушаемые здания, но также и то, как груз перемещается в кузове движущегося грузовика, когда вы едете.
Даниэль: Груз на самом деле был настроен для каждой отдельной миссии в игре. Есть одна миссия, когда вы доставляете эту огромную рыбу, марлина, и она была настроена с костями.
Йонатан: У нас есть некоторые основные вещи, которые одинаковы. Поскольку большинство пакетов, которые вы доставляете, предназначены для воздействия на машину и вождение каким-то образом, мы обычно начинаем с добавления физического соединения между посылкой и машиной, чтобы увидеть, как это взаимодействие создает интересные моменты.
Очевидно, что идет много скриптинга, чтобы функции хорошо работали в игровом процессе. С рыбой, например, мы добавили много сил к машине и долго с ней играли, чтобы добиться нужного ощущения. Это само по себе создает интересные взаимодействия – просто положить что-то безумное на машину и позволить физическому движку разобраться с этим – это хорошее начало.
Ларс: Игровая машина сама по себе сильно зависит от физики, но нам также нужно было подправить много вещей, поскольку физика может быть немного непредсказуемой. Например, если вы съедете с обрыва и будете в воздухе определенное время, мы обнаружили, что обычно вы получаете меньше урона, чем подсказывают ваши инстинкты, поэтому мы увеличили фактор урона, чтобы машина реагировала больше так, как вы ожидаете, а не так, как физический движок автоматически приведет к этому.

Йонатан: Все машины также разрушаемы, конечно. Игровая машина имеет около 36 частей, которые могут отвалиться, и они все также деформируемые.
Для автомобиля и его частей мы используем физический движок и столкновения, но также рассчитываем все силы и пытаемся понять, какой должен быть ущерб. Иногда нам нужно немного обмануть с числами ущерба, чтобы это соответствовало тому, что вы делаете.
Что касается дверей, если вы ударите по двери, мы можем оторвать её и добавить соединение, чтобы она открывалась и висела, а затем, если вы ударите её снова, она просто полностью отвалится и останется на земле. Вы также можете потерять колеса грузовика, и это повлияет на вождение, потому что вы начнете ездить по металлу. Если вы потеряете два передних колеса, вы не сможете рулить, но все равно сможете ехать – но у нас, конечно, есть способ их починить.
Даниэль: Самая большая проблема, с которой мы столкнулись с автомобилем игрока, заключалась в том, что он склонен переворачиваться, поэтому нам пришлось сделать много различных трюков. Например, для каждого колеса, оторванного от земли, сила тяжести на автомобиле увеличивается, чтобы стабилизировать его и прижать к земле. Еще одной проблемой было то, что если вы врезались в гражданских, они часто застревали между многими коллайдерами в автомобиле, так как у нас есть 36 съемных частей. Чтобы решить эту проблему, мы изменили настройку на всего лишь несколько крупных коллайдеров. Было довольно неудобно видеть, как гражданские застревают в автомобиле, так как их система ragdoll начинала вести себя странно.
Чем вы больше всего гордитесь в игре?
Даниэль: Я думаю, что это возможность сделать все разрушаемым. Около 95% всего в игре разрушаемо.
Йонатан: И работа на 60 fps.
Ларс: Мы старались не повторять ассеты, чтобы игроки исследовали мир и находили новые вещи по всему миру. И поскольку все это разрушаемо с физикой, даже если вы проедете через один и тот же дом сто раз, он никогда не разрушится точно так же. Это всегда что-то новое, что, я думаю, делает игру очень переигрываемой.
Доставить любой ценой доступна на PC и для PlayStation 5 и Xbox Series X|S. Чтобы узнать больше о проектах, сделанных с помощью Unity, посетите страницу ресурсов.
