[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "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", "phone" ], "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": "create", "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-549065259", "adfox_url": "//ads.adfox.ru/228129/getCode?p1=bxeub&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid21=&puid22=&puid31=&puid32=&fmt=1&pr=" } } ]
{ "author_name": "Глеб Диденко", "author_type": "self", "tags": ["\u0430\u0440\u0442","\u043e\u043f\u044b\u0442"], "comments": 0, "likes": 35, "favorites": 10, "is_advertisement": false, "section_name": "gamedev", "id": "6980" }
Глеб Диденко
1 692
Gamedev

Космическая пивоварня: приёмы для материалов в Unreal Engine

Личный проект художницы по окружению из Crystal Dynamics.

Поделиться

В избранное

В избранном

Николь Горни (Nicole Gorny), сотрудница студии Crystal Dynamics (Tomb Raider, Legacy of Kain), написала статью для портала 80.lv, в которой объяснила, как работает с материалами в сценах.

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

Я училась на отделении компьютерной анимации флоридского университета Full Sail и специализировалась на работе с тенями и освещением. Долгое время мне не доводилось поучаствовать в разработке игр. Однажды моей маленькой студии, снимающей короткометражные фильмы, пришлось переключиться на поддержку игры, и я ещё ни разу об этом не пожалела. С тех пор и до недавнего времени я работала в Simulation, где делала армейские игры-тренажёры на Unreal Engine 4. А теперь тружусь в Crystal Dynamics.

Космическая пивоварня

Идея сцены принадлежит прекрасному художнику Мину Нгуэну (Min Nguen). Мне нужен был новый проект, чтобы проверить, как с помощью RGB-каналов определять положение тайлинговых материалов. Так можно имитировать повреждения граней и добавлять грязь и пыль без ущерба для детализации при приближении к ассету.

Я хотела проверить, как в сгенерированных картах соотносятся эффективность и качество. По сути, я могу использовать четыре маски для каждой текстуры (пятая — чёрная основа). Канал Blue может быть сгенерированной картой кривых (Curvature map), с помощью которой создаются царапины на краях объекта. Альфа-канал — карта окклюзии (ambient occlusion) для пыли и грязи.

Карты генерировались в Substance Designer или Painter. Канал Black — базовый материал, а Red и Green — его вариации. Я также хотела попробовать использовать сплайны для создания проводов и труб.

Продакшн

Поскольку нужно было пробовать новые подходы к работе, я выбрала привычный Unreal Engine, в котором хорошо знаю редактор материалов. Именно в нём предстояло действовать методом проб и ошибок.

Обычно я начинаю проект с блокирования (blockout) примитивными формами — так можно быстрее переходить к дальнейшим итерациям. Уровень всегда проверяется на соответствие размеру персонажей, к тому же параллельно можно тестировать освещение и немного «играть» с камерами.

До того, как создавать ассеты, я попыталась понять, что нужно добавить в левую часть сцены, в которой должна была расположиться лаборатория. Уже после блокирования я начала делать более завершённые модели. Я также собралась настроить базовые материалы, чтобы протестировать RGB-маски и воду.

Ассеты

Если честно, до этого проекта мне ни разу не приходилось делать и «запекать» высокополигональные модели. Меня этому учили, но в работе я эти навыки не использовала. Так что я напряжённо вспоминала, как работать в ZBrush и оперировать булевыми операциями (booleans) в Maya — предстояло долго рисовать твёрдые поверхностей. В итоге около 80% высокополигонального моделирования делалось в Maya с булевыми операциями. Затем ассет дорабатывался в ZBrush — генерировался с помощью DynaMesh в высоком разрешении. Потом оставалось только перепроецировать детали по необходимости.

В Zbrush делалось большинство мелких элементов вроде проводов или винтов. Они были отдельными частями — так проще запекать их с помощью функции «bake by mesh name» в Substance. В итоге больше всего я занималась блокированием, чуть меньше — высокополигональным моделированием, а низкополигональное почти не использовала.

Растительность

​Вся флора сделана в Speedtree. Я хотела попрактиковаться в создании твёрдых поверхностей и применении RGB-масок, так что просто использовала деревья-болванки, слегка изменив их для сцены.

Материалы

Матералы должны были отлично выглядеть вблизи — они тайловые, и текстуры неточно соответствовали каждому ассету. Я хотела попрактиковаться в создании материалов с нуля в Substance Designer. Одной из главных проблем стало то, что одна функция «Материал» поддерживала только 12 текстур в качестве источника.

Кажется, что этого достаточно, но предположим, у вас есть 5 функций. Нержавеющая сталь, чёрная резина, окрашенный металл, поцарапанный металл и грязь. У каждого из них свои карты альбедо, шероховатостей и нормалей. Вы подключаете всё это в материал с как минимум одной текстурой RGBA-маски (иногда быстро появляется и вторая). В итоге я «упаковывала» альбедо, шероховатости и нормали в один из тайловых материалов. Так что они занимали одну текстуру вместо трёх. На этом примере я разбила маску, AO и искривление на разные карты, чтобы получились более понятные графики.

RGB-каналы используются для «маскировки» функции материала.

Каждый канал — просто чёрно-белая маска. Всё с припиской «_MF» — это тайловые материалы. Для проекта я сделала небольшую библиотеку — так проще визуализировать каналы

Вот примерно то же самое, но с более широкими возможностями контроля. У автоматически сгенерированных AO и Curvature есть проблема — они слишком ровные. Так что я создала несколько общих текстур царапин, пятен и запылений, а затем упаковала в RGB-каналы, чтобы выбирать тот, который посчитаю нужным.

Добавить маске вариативности можно было, использовав функции Multiply, Add или AO/Curvature в альфа-канале линейной интерполяции (Lerp).

Звучит запутанно, понимаю. Начнём с Curvature — красного канала кривизны/окклюзии. Иногда карта покрывает слишком большую зону, а с помощью SCurve можно это контролировать — примерно также, как «уровни» в Photoshop.

На верхний слой добавляется множество царапин или грязи, и Curvature становится разнообразнее. Красный канал первой маски инвертирован и размножен на верхнем уровне, чтобы исключить повреждения граней. Всё это составляет альфа-канал, используемый для царапин на гранях. Доводить работу до ума и добавлять детали можно в Photoshop или Substance. Но в этом проекте я не хотела распыляться — всё должно было быть сделано в Unreal.

Вот библиотека использованных в сцене материалов:

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

Вода

Честно говоря, я просто посмотрела 5 обучающих видео по созданию воды в Unreal и взяла из каждого понемногу. Использовались нормали высокой и низкой частоты, «прокручивающие» UV-развертки с немного разной скоростью. Цвет и непрозрачность менялись по Френелю и в зависимости от глубины затухания (Depth Fade).

Рендер

Эту часть сильнее всего критиковали. Первый «итоговый» проход освещения оказался очень плоским, но я столько работала над проектом, что глаз замылился, и результат показался мне отличным. От меня ускользнуло, что верхний свет в лаборатории сильно отвлекал. Хотелось, чтобы основным источником света были попадающие через окна солнечные лучи. Холодные источники — мониторы, огоньки в воде и около комнаты — должны были с ними контрастировать.

Чему я научилась

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

Обычно проще сначала сделать грубый набросок — так легче соблюдать масштаб и тестировать. Всегда прислушивайтесь к критике и иным точкам зрения на проект.

#арт #опыт

Популярные материалы
Показать еще
{ "is_needs_advanced_access": false }

Комментарии Комм.

0 новых

Популярные

По порядку

Прямой эфир

Узнавайте первым важные новости

Подписаться