Как создавалось окружение для игры Soldiers Inc: Mobile Warfare

Придумать игровой мир непросто. Создать мир, который поместится на экран мобильного телефона, – еще сложнее. Ольге Менделис, Environment Artist в Plarium Kharkiv, это удалось. В статье она рассказала, как смоделировать реалистичное окружение и найти баланс между качеством и техническими требованиями.

M2hLKA5ER2Y_aJCslsampqDErkqsWXCjCb2s4Y9z_tDiBtzXmmWpQOavbGzUDfoIUt2Gd8vlIbiv-zO2Hmo-f0cK5v3HJlMSm7B7EjT_DVqlpU5yYHn8RShxBzKNnF__KWP-GCUX


Мы готовили мобильный проект в сеттинге «милитари будущего». Перед командой стояла задача придумать глобальную карту и сектор игрока: ландшафт, климат и флору. Нужно было всё детально проработать и оптимизировать под Unity.

Практически сразу мы определились, что это будут тропики и скалистая местность (постройки всегда выгодно смотрятся на фоне зелени и песка), и начали сбор референсов.

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

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

Следующие этапы разработки проходили в тесном общении Environment, Concept и Technical Artists. Ведь, помимо эстетических, к моделям предъявлялись жесткие технические требования.

Хотя уровень производительности устройств постоянно растет, общий размер билда игры не должен превышать 100 Мбайт. А окружение – часть этой сборки. Также мы старались оптимизировать скорость рендеринга для экономии батареи и сохранения планки в 30 fps на как можно большем количестве устройств.

Мы использовали смешение тайловых текстур. В качестве основной маски выбрали Vertex Color, а для более интересных переходов – текстуру глубины, которая находилась в альфа-канале основной текстуры. Этот подход позволил добиться относительно разнообразного рисунка на поверхностях ландшафта при использовании всего нескольких текстур небольшого разрешения.

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

Скалы

Для лепки скал подходят кисти с различными альфа-каналами фактур и трещин, а также Trim Smooth Border, Orb Cracks, Planar. Основная форма скал создавалась на меше с малым количеством полигонов. Использовались в основном кисти Clay Polish для наращивания форм и Trim Smooth Border для их полировки. Когда основные блоки и разломы вырисовались, начали дорабатывать меш на high-poly (несколько миллионов полигонов), добавляя трещины и самые мелкие детали.

Основная задача состояла в том, чтобы текстура хорошо тайлилась, а повторение деталей не бросалось в глаза. Сначала несколько частей скалы мы смоделировали в ZBrush. Затем расставили их на плейне и сняли Heightmap. Эту карту затайлили в Photoshop с помощью Offset и штампа и опять назначили на плейн в ZBrush в качестве дисплейсмента. В месте, где карта затиралась в Photoshop, образовались видимые дефекты. На это место мы опять поставили куски скал. Не самый простой способ, но мы смогли экспериментировать с ритмичным чередованием элементов и разным расположением масс.

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

Диффуз-текстуру рисовали в Photoshop, используя маски, полученные из Normal Map (Cavity, Ambient Occlusion), смешивая фактуры скал и добавляя траву.

Трава

Травинки и листики создавались в 3ds Max – от моделинга до рендера. Размножили их при помощи MultiScatter – и получили фактически готовую текстуру, которую оставалось только затайлить.

Песок

Текстура песка сделана в Substance Designer. Программа позволяет быстро создавать варианты текстур, подбирать красивую раскладку тайла, сразу получать маски для смешивания текстуры в шейдере Unity.

Растения

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

Для начала мы создали библиотеку растений и текстур, опираясь на референсы. В ZBrush из моделей листьев high-poly мы делали middle-poly c помощью ZRemesher. После сделали развертку и нарисовали текстуру. Затем скомпоновали эти листья в интересные группы и таким образом запекали различные текстуры.

Для леса мы не делали отдельные деревья, а изначально создали low-poly массу леса и разбавили ее более детализированными веточками.

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

Освещение

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

Глобальная карта

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

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

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


Для создания плато и берега был смоделирован блок из трех частей, затайленных между собой, и каждый кусочек развернут на квадрат. Затем из полученных low-poly сняли Heightmap, которую использовали для создания детализированного плато в World Machine. Например, горы, которые разбавляют землю, делались сразу от и до в этой программе. Маски для текстурирования были взяты из нее же. Сама текстура для high-poly была создана в фотошопе из этих масок.

Запеклось всё в 3ds Max с high-poly на уже готовые low-poly как Complete Map, и было затайлено между собой при помощи Mudbox.

525 0 850 5
2
2018-02-24
Вкуснотища-то какая!  Сегодня опять пересматриваю/перечитываю...  Правильно ли я понял, что растительность у Вас полностью трёхмерная лоуполи?
2018-09-07
оч интересно! спасибо!
RENDER.RU