Как ветер и частицы определили облик Цусимы.
Остров Цусима состоит из тысяч и тысяч крохотных деталей, созданных нашей командой с искренней любовью. Мир «Призрака Цусимы» существенно отличается от нашей предыдущей игры, inFAMOUS: Second Son, насыщенной ярчайшими визуальными эффектами. Я Мэтт Вайнио, ведущий художник по визуальным эффектам в компании Sucker Punch. Если кратко описать суть моей работы, она состоит в решении проблем графики и дизайна при помощи технологий. Именно этим я и занимаюсь в Sucker Punch со времён inFAMOUS 2. Сегодня поговорим о том, как от жанра супергеройской фантастики мы переключились на самурайский боевик, в котором нет головокружительных спецэффектов, а есть грязь, кровь и сталь. Пусть эта игра более приземлённая, но, тем не менее, она прекрасна. Я также расскажу о методах, которые мы использовали для создания визуальных эффектов «Призрака Цусимы».
Когда мы начали работу над «Призраком», я выделил несколько ключевых областей, где следовало провести улучшения, взяв за основу требования проекта. Первое, что мне хотелось сделать, — повысить уровень интерактивности в нашей системе частиц. Мы провели огромную работу над системами частиц в игре Second Son — там они использовались для отображения широкого спектра магических сверхспособностей. Одной из моих основных целей в работе над «Призраком Цусимы» был вывод этой системы на новый уровень интерактивности. Мы с самого начала знали, что ветер будет важнейшим элементом, который нужно воплотить в наших системах частиц. Мы также хотели добавить в игру животных, создать эпические пейзажи, передав всё разнообразие природы, плюс упомянутые «грязь, кровь и сталь» хотелось сделать осязаемыми: персонажи не могут выйти из битвы, не запачкавшись. Повысить интерактивность частиц можно было многими путями, но все они требовали дополнительной информации об игровом мире. Какой именно информации? Вот, например: обычный ветер, ветер от движений персонажа, перемещение персонажа, сведения о рельефе местности, об источниках воды, о погоде (влажность, время суток и т.п.) и многое другое.
Второй глобальной задачей была реализация всех наших систем в глобальном масштабе. Мир «Призрака Цусимы» гораздо объёмней, чем в Second Son, а команда визуальных эффектов Sucker Punch большую часть времени состояла из двух человек. А это означало необходимость максимально автоматизировать обновление контента. Нам также нужно было поддерживать меняющуюся погоду на огромных пространствах 24 часа в сутки. И наконец, мы вручную ввели в игру некоторое количество элементов, помогающих игроку исследовать остров Цусима.
Ветер
Одна из основных задач изначально состояла в том, что в игре всё должно двигаться. Понятно, что именно здесь пригодились бы частицы — опадающие листья, пыльца в воздухе. Но чтобы создать иллюзию дующего ветра, необходимо задействовать множество слаженно работающих систем. Помимо частиц, есть деревья, трава, ткань, верёвки и всё, что может двигаться на ветру. Все эти элементы были согласованы так, чтобы двигаться соответственно при разном ветре. Мы интегрировали воздействие ветра практически в каждый визуальный эффект. Когда взрывается бомба или загорается костёр, дым всегда плывёт в правильном направлении. Ветер воздействует и на огонь, на искры — да почти на всё. При увеличении скорости ветра добавляется дополнительная турбулентность.
При всём этом мы и не думали, что наша общая «ветровая система» может стать режимом навигации в игре, но тут арт-директор «Призрака» Джейсон Коннел пришёл ко мне и нашему инженеру Эдриану Бентли и спросил, не сможем ли мы сделать так, чтобы частицы указывали направление к месту выполнения заданий. Так возник «путеводный ветер». Мы решили не создавать систему маршрутов с постоянной сменой направлений в обход препятствий. Наш «путеводный ветер» показывает направление на цель, а уж маршрут каждый игрок выбирает для себя сам. Мы поступили так в первую очередь для того, чтобы игроки исследовали мир, прикладывали усилия и смекалку к выбору пути, а не бездумно следовали подсказкам искусственного интеллекта. Такой подход стал возможен только потому, что наша система частиц получает информацию о ландшафте. Иными словами, частицы как бы «знают» об особенностях окружающей игрока местности.
При первых попытках я сделал так, чтобы частицы «окутывали» ландшафт, поднимались и опускались, повторяя очертания гор и долин. Однако в силу ряда причин с этим возникли проблемы. Первая заключалась в разнообразии моделей камней, используемых для горных обрывов. Модели скал не включены в информацию о ландшафте, туда входит только базовая динамическая мозаичная сетка. Получалось, что частицы входят во все скалы и исчезают, а значит, игроку труднее следовать за «путеводным ветром». Кроме того, когда частицы настолько идеально огибают элементы ландшафта, это смотрится как-то неестественно. При следующей попытке местность стала своего рода базой: на подъёме частицы уносятся вверх, а когда местность идёт под уклон, медленно дрейфуют вниз. Когда на пути возникают холмы, скорость подъёма частицы вверх растёт. Для этого мне пришлось провести несколько тестов и посмотреть, как частицы будут вести себя далее по пути движения. В каждом из этих тестов я выяснял, насколько близко частица находится к земле и не уходит ли в неё. Если частица слишком близко к земле или уходит в неё в ближайших точках, значит, ей нужно придать дополнительную вертикальную скорость. И последнее. У путеводного ветра могут быть различные элементы, в зависимости от среды; в полях это трава и пушинки, в лесах — листья, в зонах пожаров — частицы пепла и тому подобное. Чуть позже я расскажу о том, как работает эта система.
У деревьев есть листья и другие элементы, которые реагируют на скорость ветра. Мы работали с командой программистов и художников по окружению, чтобы создать отдельные элементы управления для стволов и ветвей. Эта гибкая система, в свою очередь, позволила нам произвести широкое разнообразие деревьев и кустарников. На движение стволов и ветвей мы наложили более мелкое — дрожь поверхности листьев.
Травы и травяные поля также были одним из особенных элементов игры, их создание потребовало постоянного взаимодействия между командами рендеринга, окружения и визуальных эффектов. Поля представляют собой сочетание процедурно сгенерированных треугольников для травы и моделированных объектов — высоких стеблей и пучков травы. Сначала мы попробовали использовать частицы, чтобы добиться волнообразного движения. Движение травы под ветром моделировалось пересекающимися дугами. Визуальное качество травы было неплохим, однако подобное движение деревьев и кустов выглядело неправильным, а стоимость воплощения этой идеи была больше, чем мы могли себе позволить. При второй попытке мы добавили в окружение два слоя движения. Первый — основной рисунок движения, меняющийся в зависимости от направления ветра; поверх него наложен второй слой, текстура, работающая для более мелких элементов ландшафта, в частности травы. Преимущество такого подхода (помимо снижения стоимости) состояло в том, что в итоге движение деревьев, кустарников, травы и листьев складывалось в естественную картину.
В конечном итоге мы использовали технологию смещения частиц травы для отображения её естественного колыхания от движений игрока. Это не новая технология в играх, но мы её улучшили — используя систему частиц для управления смещением, смогли сделать «поведение» травы ещё более естественным. Например, использование затухающей волны, пропорциональной силе смещения, позволяет более естественно показать «поведение» травы после того, как через неё прошёл игрок: трава возвращается к исходному положению постепенно, а не сразу. Ниже вы можете посмотреть, как движется трава в описанных случаях, а также увидеть отображение системы частиц, контролирующих её движение. Зелёная часть следа отображает смещение, красная — затухание смещения. Если вы внимательно присмотритесь, то увидите, что амплитуда смещения снижается по мере того, как герой уходит дальше. Так получается более естественное движение, и трава в итоге выглядит более правдоподобной.
И наконец, по инициативе арт-команды создания персонажей в игру добавили динамику для ткани и верёвок, поскольку и то и другое используется в костюмах. В каждой симуляции движения ткани и верёвок используется та же технология, что и в случае с листвой и другими частицами, — это подкрепляет иллюзию дуновения ветра.
Животные
В начале работы мы решили, что любые животные, которых создаст команда визуальных эффектов, будут видны только издали. Однако по мере развития игры мы поняли, что звери могут играть в ней гораздо более серьёзную роль. В работе над животными мы объединили усилия с программистом, создавшим систему частиц для проекта Second Son, — Биллом Рокенбеком. Сначала он сделал полностью завершённые анимированные модели на основе частиц. После того как модели заработали, мы смогли скоординировать их с ландшафтом, используя ту же информацию, что и для «путеводного ветра».
Мы добавили в игру лягушек, птиц (например, журавлей), рыб, крабов, жуков — и все они реагируют на Дзина и прочих персонажей в игровом мире. Вокруг каждого персонажа, включая Дзина, мы создали «сферу ветра» с очень низким значением. В результате животные, созданные по той же системе частиц, способны «почуять» находящихся рядом людей. Далее мы использовали новую систему условных событий, чтобы изменить движение частиц при приближении персонажей. В результате наши игровые животные разбегаются от людей. Тот же принцип взаимодействия был использован в отношении снарядов и столкновений: то есть стрелы и кинжалы также заставляют животных спасаться бегством.
В следующем видеоролике вы сможете увидеть ранние версии взаимодействия персонажей с крабами, бегающими по берегу. Мы начали со статичных моделей (возможно, это мой самый большой успех в моделировании), а затем занялись их поведением. Мне хотелось, чтобы крабы держались на некотором расстоянии от Дзина, чтобы он не наступал прямо на них и чтобы крабы заметно пугались при появлении человека. Чтобы упростить отладку поведения, движущиеся крабы на видео окрашены в белый цвет, а неподвижные — в оранжевый.
Листья и поединки
Поскольку ветру в игре отведена важная роль, мы понимали, что нам потребуется добавить листья — много листьев, кружащихся на ветру, и кружиться они должны естественно и красиво. В любой момент игры на экране могут оказаться тысячи листьев, и все они будут взаимодействовать с ветром, окружающей средой и персонажами.
Чтобы листья выглядели естественно, мы потратили массу усилий на то, чтобы они правильно ложились на землю в разной местности. Каждый листок моделируется в виде диска. С помощью 3D-математики мы заставили листья вращаться в нужном направлении и ложиться на землю так, как нужно. Помимо момента приземления, мы также смоделировали некоторые более «продвинутые» моменты поведения листьев. Он ложатся на водяную гладь, плывут по течению, падают вниз вместе со струями водопада и через некоторое время тонут.
Ближе к концу работы над «Призраком» тестировщики сообщили о странной ошибке: листья падали в костёр и невредимыми оставались лежать на земле под огнём или рядом с ним. Я согласился с тем, что это довольно странно, и для решения проблемы поместил в каждый костёр источник ветра, на который должны были реагировать падающие листья. Восходящий поток не давал листьям падать в огонь. Получилась отличная деталь.
К поединкам мы прониклись любовью с самого первого тестирования. Руководство полностью препоручило их команде визуальных эффектов: для поединков требовалось создать сценарии, наилучшим образом демонстрирующие интерактивность нашей игры и системы частиц.
Во многих поединках присутствуют листья, реагирующие на движения игрока и компьютерных персонажей. Для этого мы применили ту же технику, что и для движения травы, — позволили частицам использовать ту же информацию. Таким образом, нам удалось заставить листья красиво разлетаться при быстром движении персонажей. В поединках нашей целью был не реализм, а красота и эффектность. Описанную выше систему событий мы настроили на моменты, когда значения перемещения игрока были выше пороговых. Затем мы создали спад, чтобы вскоре после первоначального движения листья улеглись — и следующее движение снова поднимало их в воздух. Мы также использовали следующий паттерн шума: от порыва ветра листья взлетают с земли и снова опускаются. Это делает ветер видимым и подчёркивает лёгкость опавшей листвы.
В различных видах поединков используются многие виды динамических частиц: плавающие фонарики, гаснущие свечи, расступающийся под ногами густой туман, молнии и многое другое. Для фонариков мы использовали те же техники, что и для листвы: каждый фонарик представляет собой набор частиц, которые движутся и покачиваются на воде в ответ на движения игрока. Во втором поединке с Рюдзо мы привязали ко взмахам меча источники ветра, воздействующие на свечи. Когда ветер переходит пороговое значение, включается система событий, которая гасит пламя и вызывает новый эффект колеблющегося дыма. Кроме того, при перекатах и уклонениях также возникает ветер, так что эти быстрые движения также могут гасить свечи.
Грязь и кровь
Когда персонажи бегут, перекатываются, скользят и падают на землю, к их моделям динамически добавляется грязь. Задачей графики на раннем этапе создания игры было показать, как персонажи могут запачкаться: это должно было задать правильный тон игре. В анимации мы добавляем грязь в разных количествах на локти, колени и плечи, так что Дзин и другие персонажи выглядят грязными — как люди, вышедшие из настоящего боя. Если вы посмотрите знаменитые боевые сцены из самурайских фильмов, то увидите то, что вдохновляло нас при создании «Призрака»: персонажи месят ногами грязь, а упав на землю, не вскакивают с неё чистыми.
То же самое с кровью: она динамически добавляется к моделям персонажей в ходе схватки, указывая на их ранения. Каждое попадание добавляет кровь в месте удара мечом и вокруг. Эти эффекты использовались как в игровом процессе, так и в видеороликах и сюжетных моментах.
Помимо того, что к модели персонажа добавляются кровавые пятна, каждая атака создаёт ещё один эффект частиц: капли и брызги крови. Каждая капля падает в определённое место, а в воде кровь расплывается облаком и уходит по течению.
Масштабное строительство
Ключевым моментом в масштабном строительстве игры было то, что наши визуальные эффекты должны были соответствовать окружающей среде, а не размещаться вручную. Команда у нас небольшая, мир предстояло заполнить огромный, поэтому необходимо было создать алгоритм размещения, ведь биомы окружающей среды часто меняются. Мы не могли тратить всё время на поддержание контента — а значит, он должен был стать саморегулирующимся.
Растительность и биомы
Приведу простой пример: частицы-листья должны падать только в лесистых зонах, а не на лугах и полях. Сперва мы использовали прямолинейный подход: поместили эффект в деревья, растущие на острове. Увы, вскоре такой подход был признан провальным: ландшафт включал сотни деревьев на небольших пространствах. С точки зрения геометрии всё было прекрасно, но применять систему частиц было слишком дорого. Мы добились небольшого успеха, настроив наши частицы так, чтобы они появлялись только очень близко к деревьям (в радиусе около 15 метров), но при общей широте обзора решение оказалось не слишком удачным. К тому же зачастую листья оказывались просто не видны. Когда лист падал с высоты 12 метров, а игрок ехал на лошади, лист просто не попадал в поле зрения — он достигал земли слишком поздно.
Тогда мы решили использовать систему роста тем же образом, что и в окружающей среде: системы частиц размещались рядом с деревьями с использованием тех же масок. Нам нужно было разместить накладывающиеся друг на друга круги листьев в рамках маски, иногда сложной формы. Однако при таком размещении кругов возникали области, в которых вовсе не было листьев: это было вызвано правилами роста. Мы могли бы исправить положение, создав дополнительные источники частиц меньшего размера, но это потребовало бы дополнительных ресурсов. Также было бы трудно исправить положение для отдельных участков: если бы мы изменили правила роста, чтобы закрыть «дыры» или отрегулировать интенсивность частиц, это привело бы к неисправностям в областях леса, где прежде всё работало нормально. И всё же эта техника работала, и, несмотря на некоторые недостатки, мы едва не решили на ней остановиться.
На первом скриншоте вы можете видеть, как для добавления частиц используется инструмент роста: частицы появляются там, где растут деревья. Здесь можно заметить большие разрывы, что нас совершенно не устраивало. На втором скриншоте значительно увеличено количество источников частиц. Это работает, но требует большого количества ресурсов, которые могли быть использованы где-то ещё. На третьем скриншоте показан третий подход, карта биома. Программисты рендеринга работали над одной функцией для команды освещения. Эта функция должна была использовать данные из масок роста окружающей среды, получая к ним доступ в реальном времени. Я спросил, можем ли мы тоже использовать эту технологию. К счастью, оказалось, что можем. Так наша система частиц получила возможность «узнать», в каком именно биоме возникает та или иная частица. Четвёртый скриншот показывает систему отладки и то, как частицы считывают данные. Синие области — это луга, а зелёные — лес.
В первый запуск всё работало немного неуклюже, но когда я применил текстуру шума для модификации информации, система стала гораздо более органичной и удобной в использовании. Это стало ядром нашей новой системы создания атмосферы — в сочетании с другими функциями, такими как определение положения на местности, материала и направления ветра. Во всех стандартных зонах мы смогли удалить из окружающей среды сотни систем частиц и заменить их единой системой, следующей за камерой и гораздо лучше соответствующей биомам.
Хотя значительная часть эффектов из системы роста была перенесена в систему биома, мы всё же использовали систему роста для некоторых эффектов частиц. Например, это касается птиц на лесных опушках, крабов и чаек на морском берегу, цапель на рисовых полях и журавлей на болотах. И наконец, мы использовали систему роста, чтобы добавить пелену тумана на краю леса. Во всех этих случаях, если команда по окружению меняла расположение лесов, полей и побережья, визуальные эффекты в нужных местах появлялись автоматически.
Горизонты и подсказки
Обзорные точки в «Призраке» важны для игрового процесса, поскольку они помогают найти нужные объекты. Но в то же время любование прекрасными видами на горизонте задаёт общий тон игры, её визуальный образ. Мы понимали, что поиск заданий должен быть как можно более естественным, вот почему мы поработали над эффектами, которые могли указывать на места выполнения заданий и прохождения испытаний. Примерами таких указателей могут быть разные виды дыма, кружащиеся птицы, возможность сложить хокку, пар над онсэном и многое другое.
Общая сборка
Визуальные эффекты в «Призраке Цусимы» — это неотъемлемая часть окружающей среды. В каждом кадре используется множество отдельных систем, работающих вместе на улучшение динамики игры. Визуальные эффекты, от биомов и животных до фоновых маркеров погоды, помогли оживить мир и сделать путешествие по Цусиме ещё более увлекательным и приятным.
Спасибо за то, что прочли. Надеюсь, вам понравилось это путешествие по миру визуальных эффектов Цусимы. Если хотите узнать больше о технологии создания игры, посмотрите запись речи, которую я прочёл на конференции разработчиков игр в 2014 году. В ней я говорю о системах частиц как о выразительном средстве.
Комментарии закрыты.
1 комментарий
Loading More Comments