CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

На этой презентации технический директор Шон Трейси и старший программист инструментов Андреас Рор расскажут об эволюции симуляции поведения ткани и ветра.

Шон: Отлично. Спасибо что пришли. Я выступаю с презентациями вот уже на протяжении нескольких лет, и очень рад, что вам интересно. Кому есть дело до космических кораблей в космическом симуляторе, не так ли?

Андреас: Верно.

Шон: Давайте послушаем о контенте, физике и симуляции ткани.

Пока мы не погрузились в детали, позвольте представиться и представить своего коллегу. Кто не знает, я Шон Трейси – технический директор по контенту в CIG. Сегодня со мной на сцене Андреас Рор – один из наших старших программистов по инструментарию из Франкфурта. Так что спасибо, что проделал весь этот путь из Франкфурта. Он работает в тесном сотрудничестве с программистами движка и несет ответственность за тот контент, который мы сегодня покажем вам. Я очень рад, что он сегодня с нами.

Итак, это было вступление, и теперь давайте погрузимся в детали. Мы поговорим об окружении и, в некоторых случаях, о персонажах Star Citizen. Пожалуй, раньше они были несколько статичными, но теперь команды по физическому движку и физике в игре скоординировали усилия, чтобы помочь добавить больше жизни во все наши сцены и наш контент, который использует физику для игровых ресурсов. Этот разговор затронет некоторую проделанную ими работу и функции, которые находятся в разработке и сейчас начинают применяться в Star Citizen и Squadron 42.

Но сперва я хочу поблагодарить ребят, которые собственно и проделали всю эту работу и позволили нам представить ее вам сегодня. Это всё очень ранние прототипы. Мы получили работающие версии этих систем примерно полтора-два месяца назад. Поэтому я очень рад, что Крис Рейн и парни из Франкфурта позволили сегодня показать вам эти вещи, находящиеся в зачаточном состоянии. Очевидно, они очень волновались по этому поводу. Я рад сегодня представлять здесь их работу.

Давайте, наконец, перейдем непосредственно к теме презентации. Она разделена на две секции. Сначала мы расскажем про окружение, и сюда войдут такие вещи, как ветер на планетах и сущности ветра – это кое-что новое для нас.

Затем мы поговорим о различиях между анимированными и симулированными игровыми ресурсами и контентом. То есть либо подключать физические расчеты для перемещения объектов, либо использовать заранее подготовленные анимации.

Потом мы перейдем к ткани на объектах окружения. Мы называем это сущностью ткани.

По окончанию я передам слово Андреасу, и он расскажет про одежду и ткань у персонажей. Сейчас она объединена с технологией окружения – раньше такого не было.

Мы продемонстрируем вам фрагменты текущей реализации системы симуляции физики, которую мы применяем для просчета поведения одежды на уже имеющихся в игре персонажах.

Мы посмотрим на различия двух методов симуляции: маятниковой симуляции против вершинной симуляции, и покажем вам разницу между ними.

Мы взглянем на реальный рабочий процесс, который мы используем при разработке физической симуляции.

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

Наконец, мы немного расскажем о физике будущего.

Итак, почему же мы хотим физически симулировать разные вещи? Использовать симуляцию физики в реальном времени в играх всегда предпочтительнее, чем заранее подготовленные анимации. Особенно в динамичных окружениях. Что я имею в виду под динамичным окружением? Динамической погоде и ветру для работы требуются некоторые вспомогательные элементы, вроде погодных эффектов. Вам также нужны просчеты коллизий с игроками и ИИ, нужны реакции на ближайшие взрывы и самые разные вещи, которые могут изменить окружение. Вы не можете заранее подготовить такие анимации – все это нужно физически симулировать. Но тут не все так просто. Очевидно, в игру вступают вопросы влияния на производительность и другие проблемы, и нам приходится их решать.

В основном, когда рядом с объектами происходит какая-то активность, они должны соответствующим образом реагировать на нее. Еще одна причина, зачем нам использовать физику, – потому что в таком случае процесс создания контента существенно упрощается. Когда нам нужно создать анимированный объект, он проходит через множество команд: от дизайнеров к художникам, затем проходит стадию риггинга и анимации, возвращается к дизайнерам и, наконец, добавляется в игру. В работу оказывается вовлечено огромное количество людей, и это занимает время. Особенно когда вы работаете в интернациональной корпорации с разнесением на часовые пояса. С другой стороны, дизайнер просто может взять объект, добавить к нему симуляцию, и готово.

Каково же было состояние подобной симуляции до сегодняшнего момента? Как я уже упомянул, с точки зрения производительности она отнимала довольно много ресурсов и в основном полагалась на язык LUA. Если вы следили за нашей работой над технологией Трансляции Контейнеров Объектов, вы знаете, что нам пришлось полностью избавиться от LUA в движке. Это была очень объемная и важная задача. И что это значит? Что те вещи, которые раньше работали хорошо, перестали работать вообще.

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

Ранее мы уже пробовали применять разные техники, но они оказались слишком ресурсозатратными. Я уверен, вы видели их в старых демо: плащи и флаги, развевающиеся по ветру, и всё такое. Они либо съедали слишком много производительности при работе на планетах, либо наши новые сущности и инструменты просто больше не работали с ними.

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

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

Как вы уже могли видеть в демо, у нас есть ветер на планетах, причем он настраиваемый для каждой планеты и для каждой экосистемы, что очень круто. Все это было сделано командой по планетарным технологиям, и это добавляет гораздо больше динамики и жизни окружению, которое в противном случае было бы статичным. Если вы видели эти неподвижные деревья – они отсылают вас к играм 2000-х или даже 90-х годов, когда объекты вообще никак не двигались.

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

Давайте я покажу на примере:

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

Это биом саванны, и я нахожусь прямо перед упавшим спутником. Вы видите, сколько тут жизни: шевелятся листья на деревьях, ветер колышет траву и гоняет частицы – всё это происходит именно благодаря ветру. Он тут охватывает всего лишь один биом, но даже в этом случае масштабы поистине гигантские.

Посмотрим на более изолированный уровень:

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

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

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

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

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

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

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

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

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

Давайте посмотрим на некоторые примеры:

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

  • Эффективная симуляция;
  • Определенные пользователем параметры в редакторе упрощают настройку;
  • Поддержка эффективных взаимных коллизий;
  • Детерминистская симуляция;
  • Стабильность без ограничений;
  • Поддержка волюметрической симуляции;
  • Возможность работы на произвольных поверхностях.

Крис Рейн хотел, чтобы мы создали ролик с демонстрацией корабля из под атласной ткани. Для его создания нам пришлось проделать огромный объем работы. Думаю, результат получился близок к его ожиданиям. Команде по физике, как и Рейну, пришлось полностью переписать механизм реализации сущности ткани. Это было очень важно, потому что у нас возникали проблемы с ранней версией. Она не только не работала в планетарных масштабах и считала, что ось Z всегда направлена вверх, но и имела некоторые проблемы внутри движка. Большинство проблем исходило из нестабильности симуляции, в результате чего мы получали большой шар из полигонов, который просто не мог восстановиться после применения симуляции. Это было совершенно неприемлемо, и нам нужно было это исправить. Основным виновником появления шара полигонов в большинстве случаев была топология самих игровых объектов. Не вдаваясь особо в детали, скажу, что для симуляции геометрии полигоны должны быть правильными и равномерными. В конечном итоге проблема возникала из-за того, что визуализируемые поверхности были объединены с самой симуляцией. То есть, какой топологией геометрии обладал объект – так он и просчитывался при симуляции. Теперь мы разделили их.

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

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

У меня тут небольшое видео с M50 на Daymar и парочкой работников из палубной команды. Как вы видите, я разместил в сцене кусок ткани и просто включил ИИ-физику. Она начала обрабатывать симуляцию, и в итоге ткань легла на корабль именно так, как вы того и ожидаете. Здесь существует масса параметров, которые дизайнеры могут изменять. Это очень эффективная симуляция. Более того, пользователь (в роли которого выступает дизайнер) здесь может задавать силу трения. Мы отодвигаем корабль назад, и ткань либо аккуратно скатывается с него, либо остается лежать на нем.

Но сейчас я поставлю кусок ткани вертикально и сброшу ее на корабль – вот тут вам действительно понадобятся взаимные коллизии.

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

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

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

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

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

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

И теперь я передам слово Андреасу. Извини, что отобрал у тебя лишние две минуты.

Андреас: Надеюсь, это не станет проблемой. Спасибо, Шон. Я расскажу об одежде персонажей.

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

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

Позвольте мне немного рассказать о том, как работала предыдущая система. Так называемая, маятниковая симуляция.

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

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

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

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

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

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

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

Я несколько лет работал над симуляцией ткани и мягких тел в киноиндустрии. Там есть стандарт – цифровой пакет для создания контента Maya. В нее встроен довольно функциональный и простой в использовании физический движок nCloth.

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

Так что у меня возникла идея – вместо создания нового движка для нашей песочницы, что заняло бы довольно много времени, просто воспользоваться Maya. Это имело смысл, потому что, к примеру, все наши риги и анимации персонажей также собираются в Maya, а затем переносятся на движок.

Здесь вы можете видеть нарисованные вершинные атрибуты, которые определяют, к примеру, насколько далеко ткань прикреплена к жестко деформируемой поверхности.

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

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

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

Но наиболее важная функция новой системы  – это то, что мы называем многослойной тканью. Это когда у вас есть несколько слоев ткани, которые взаимодействуют друг с другом.

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

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

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

Мы можем видеть, что кое-где отдельные слои проникают сквозь друг друга, но уже сейчас анимация довольно чистая. Я присутствовал на одном из первых тестов, и Крис Рейн несомненно проделал гигантскую работу.

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

Это один из охранников на Hurston, и сложность всех примененных здесь объектов и технологий просто поражает. Он выглядит безупречно, прямо как при симуляции ткани методом отложенного рендеринга (не в реальном времени). В конечном итоге мне хотелось бы применить эту систему для симуляции максимально возможного числа объектов. На данный момент бóльшая часть нашей ткани просто свободно свисает, но ведь есть и другие вещи. Даже если вы носите очень узкие штаны, у них все равно будет некоторая степень свободы движения, и ваша анимация станет более динамичной и правдоподобной. А если мы в конечном итоге сможем применить такую симуляцию ко всему телу, в будущем мы получим потрясающе выглядящих персонажей.

Теперь Шон расскажет и покажет вам, что у нас запланировано на будущее.

Шон: Конечно. Я оставлю это видео с персонажем проигрываться. Я вручную убирал швы, чтобы сделать его зацикленным.

Буквально на прошлой неделе наши талантливейшие технические художники: Гейдж Холлман, Марси Ли, Крис, Форрест, а также программисты физики проделали действительно прекрасную работу. И в этом вся идея – что мы теперь можем симулировать взаимные столкновения у многослойной ткани, хотя раньше с маятниковой технологией у нас не было такой возможности. Теперь мы можем сделать... я не знаю, накидку королевы Амидалы, которая волочится по земле и по ступенькам, и всё такое. Это будет шикарно.

В будущем нас ждут:

  • деформации
  • дальнейшие улучшения производительности
  • тесселяция
  • поля с отмеченным расстоянием
  • разрывы ткани
  • столкновения между двумя мягкими телами
  • и многое другое!

CitizenCon 2948: Вдыхаем жизнь в контент при помощи физики

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

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

Тесселяция позволит еще сильнее увеличить плотность тех игровых объектов, что вы видите.

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

Разрывы ткани – тут все просто. Представьте, что ткань сможет рваться. Может быть вы прострелите в ней несколько отверстий.

Еще одна функция, которую мы пока не готовы показывать, это столкновения между мягкими телами. Мягкие тела это не ткань. Они обладают объемом, но при этом вы можете их сжать. Например, подушки, одеяла или еще что-то в этом роде. Вдобавок ко всему, мы конечно же хотим, чтобы для них работали коллизии. Будет очень круто.

На уме у наших ребят есть еще много вещей, но о них мы расскажем в другой раз.

Хотим особенно поблагодарить (в алфавитном порядке):

  • Али Брауна – директора по программированию графики;
  • Криса Рейна – не помню его должности. В общем, математического волшебника.
  • Гейджа Холлмана – технического художника по ткани;
  • Форреста Стефана, кто помог записать всё это;
  • Иво Герзега – ответственного за внедрение маятниковой симуляции, про которую мы рассказываем гадости.
  • Дженса Линда – инженера по геймплею;
  • Милана Пейчека, кто помог нам управлять этой презентацией;
  • Марси Ли – одного из технических художников, кто работал над игровыми ресурсами;
  • Роба Дикерсона – технического художника из Великобритании, также работавшего над игровыми ресурсами;
  • Томаса Микалика.

Спасибо за внимание. Нам очень приятно, что вы пришли нас послушать.

Перевод: H_Rush

H_Rush administrator