Gamedev Глеб Диденко
2 045

Моделирование архитектуры викингов

Советы по созданию 3D-моделей для поселения в средневековой Скандинавии.

В закладки

Блог 80.lv взял интервью у студентки и 3D-моделлера окружения Брук Олсон, проходившей практику в Insomniac Games. В качестве дипломной работы она моделировала посёлок викингов для Unreal Engine 4. Она рассказала о приёмах, которые использовала при создании моделей, материалов и освещения.

DTF публикует перевод статьи.

Деревня викингов

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

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

Делать сцену я начала с подготовительного этапа. Кроме концептов для каждой зоны я нарисовала часть объектов, которые хотела создать. Также, я собрала много референсов к архитектуре викингов и материалам, использовавшимся ими при строительстве. Сцена сильно изменилась по сравнению с первоначальным замыслом — когда начинаешь создавать окружение на Unreal, понимаешь, что не все идеи работают в 3D.

Я по-прежнему хотела уловить настроение и чувства, которые были в первом варианте и создала первый 3D-набросок уровня. После этого я занялась моделированием большей части объектов и моделей и прошлась по ним ещё раз, когда закончила.

После стадии моделирования я начала делать основные материалы в Substance Designer (SD). Раньше я в ней не работала и решила начать с создания простых материалов. Первым было базовое «дерево», которое можно легко менять, задавая параметры: из него я сделала версию из досок. Также я добавила материалы для каменного пола и стен. SD оказалась отличной программой, которая помогла мне создать материалы такими, какими я их себе представляла.

Я сделала основные материалы в SD и потом настроила их в Unreal, чтобы применить к моделям. Я создала несколько главных материалов, чтобы легко копировать и корректировать их. Завершила проект я вершинным рисованием (vertex painting) для объектов. Кроме того, я прошлась снегом по большей части домов и объектов и наложила эффекты постобработки.

Ассеты

Большая часть объектов создавалась в Maya, затем переносилась в ZBrush, где сглаживались острые углы. Я заметила, что на многих объектах и домах викингов часто использовалась резьба. Я сделала отдельные слои с паттернами узоров резьбы и использовала UV-развёртку для переноса деталей. Это помогло мне получить карты нормалей высокого разрешения и сэкономило много времени при подготовке текстур. Все модели в этих сценах были созданы с нуля.

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

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

Текстурирование

Текстуры в основном создавались в Substance Designer, но я также пользовалась Substance B2M и Photoshop. Я решила создавать материалы, занимающие большую часть экрана, в SD, потому что, на мой взгляд, этот инструмент всё активнее используется в нашей индустрии, и я хотела его освоить. Я обнаружила, что он серьезно меняет работу с материалами: в нём нет многих ограничений, можно создавать текстурные карты любых размеров, а нормали получаются куда чище.

С SD текстуры приобретают авторские черты, которыми не обладают обычные фототекстуры. Работу над деревом и камнем в SD я начала с создания карт рельефа и вершин. На их основе я сделала карту шероховатости и диффузии. Немало времени ушло на подбирание правильного цвета дерева. Я хотела, чтобы оно получилось старым на вид, выцветшим на солнце и обветренным. Я советую импортировать данные HDRI из сцены в SD — это поможет понять, как на вид материалов влияет окружение, что очень важно.

У моих материалов в UE4 было много параметров, поэтому я могла просто создавать инстансы материалов (material instance) и корректировать настройки. Это сильно ускорило процесс, я могла включать нормали деталей (detail normals), менять местами карты текстур, регулировать насыщенность, интенсивность карты нормалей, поворачивать карты и многое другое.

Для материала ландшафта я создала такой, который позволял его раскрашивать (landscape painting) и делать пейзаж разнообразнее. Я долго оптимизировала его, чтобы гарантировать высокую производительность, и сохраняла сетки полигонов в правильном формате, чтобы не терять времени на повторном импорте после изменений в Maya.

Освещение

Освещение интерьера совмещает динамические источники света и источники в режиме «baked». Направленный свет, освещающий интерьер, — статичный. Направленный свет в пространстве снаружи — динамический, а дополнительные источники у огня тоже используют режим «baked». Мне нравится добиваться нужного цвета для источника, регулируя его температуру — на мой взгляд, этот метод кажется наиболее реалистичным. В интерьере есть световые шахты, созданные с помощью отражений (bounce cards) и анимированных материалов (panning materials). Количество отскоков непрямого освещения (indirect light bounces) и для интерьера, и для экстерьера равно 6. Цвет окружения во многом был создан с помощью постобработки.

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

#арт #опыт

{ "author_name": "Глеб Диденко", "author_type": "self", "tags": ["\u0430\u0440\u0442","\u043e\u043f\u044b\u0442"], "comments": 11, "likes": 28, "favorites": 14, "is_advertisement": false, "subsite_label": "gamedev", "id": 3749, "is_wide": false }
{ "id": 3749, "author_id": 5399, "diff_limit": 1000, "urls": {"diff":"\/comments\/3749\/get","add":"\/comments\/3749\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/3749"}, "attach_limit": 2, "max_comment_text_length": 5000 }

11 комментариев 11 комм.

Популярные

По порядку

Написать комментарий...

Forest Swamp

0

Не совсем понял, что имелось ввиду под "не все идеи работают в 3D" в отношении Unreal. Интересно, как выглядела бы сцена под Unity...

Substance Designer понравился. Давно покупал эту прогу (Substance Designer 4) по скидке, но только на днях запустил попробовать что к чему. После статьи захотелось более детально разобраться, хоть мне это в принципе пока не нужно.

Не понял по поводу "наложила эффекты постобработки" и про вершинное рисование. Она это все в Unreal делала или в субстансе?

Ответить

Denis Kuandykov

Forest
2

Рисование Vertex Color делается прямо в Unreal, как правило используется для смешивания нескольких текстур на модели где R G B A привязаны на отдельные стеки текстур.
Рисуешь красным - камень, зеленым - грязь и т.п
Получается 1 шейдер, 1 материал и Vertex Color легче текстурной маски как и для памяти так и для отрисовки если не нужно иметь высокую четкость переходов между материалами.

В Юнити выглядело бы так же - обмазать его модными графическими свистелками не проблема, остальное зависит от рук.

Ответить

Forest Swamp

Denis
0

Буду знать. Спасибо. :)

Ответить

Глеб Диденко

Forest
1

В Unreal, если верить хронологии её рассказа.

Ответить

Юлия Перевозникова

Eugen
0

Блин, спасибо! Сижу и думаю, что за слои с привязкой к координатам и как это понимать))

Ответить

Антон Антонов

0

Material Instances - это не копии материалов.

Ответить

Глеб Диденко

Антон
0

«Зависимые копии» точнее?

Ответить

Антон Антонов

Глеб
6

Совсем не копии. В UE4 то, что называется материалами, на самом деле ближе к идее шейдера. А Material Instance - это уже скорее нормальный материал. Т. е. в материале создаются параметры (скажем, коэффициент шершавости, или текстура поверхности) и на их основе проводятся какие-нибудь вычисления. На основе одного материала можно создать много инстанций, и в каждой из них подставить свои значения параметров.

Ответить

Глеб Диденко

Антон
0

Спасибо за совет, ещё раз сравнил с англоязычным гайдом. Думаю, с пояснением в скобках всё будет понятнее.

Ответить

Eugen Dubovik

Глеб
0

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

Тут более корректно - "мои материалы (из Substance Designer) имели большое количество уже настроеных параметров при перенос в UE, поэтому я просто копировала их и изменяла только те параметры - которые требовались для решения задачи".

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

Ответить
0

Прямой эфир

Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]