[ { "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" ], "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": ["\u0433\u0440\u0430\u0444\u0438\u043a\u0430"], "comments": 4, "likes": 18, "favorites": 11, "is_advertisement": false, "section_name": "gamedev", "id": "11581" }
Дмитрий Мучкин
1 009
Gamedev

Создание панели управления для фантастического сеттинга

Подробное описание процесса моделирования на Unreal Engine 4.

Поделиться

В избранное

В избранном

3D-моделлер Эмиль Скривер (Emil Skriver) рассказал порталу 80.lv о том, как он создал панель управления в фантастическом сеттинге на Unreal Engine. DTF c разрешения главного редактора 80.lv Кирилла Токарева публикует перевод интервью How to Build a Sci-Fi Cockpit for a Game.

Проект

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

Ещё один важный аспект — контраст между материалами, особенно в данном случае. Материалы здесь мало различаются, поэтому их приходится разнообразить с помощью настроек. Для этой цели я пользуюсь полным спектром настроек физически верного рендеринга (PBR): чередуя металлы и неметаллы, высокие и низкие значения шероховатости (roughness), тёмные и светлые цвета.

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

Элементы

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

Ещё как можно больше клонируйте элементы и жульничайте везде, где только можно. Например, вокруг большинства кнопок я добавил углубление, которое представляет из себя простую геометрию кнопки с экструзией (extrusion) вокруг неё. Чтобы создать подобное, нужно выдавить внешнюю рёберную петлю (edge loop) наружу и переместить её вверх. Теперь можно выдавить эту новую петлю, и получится углубление, которое хорошо подчеркнётся картой нормалей.

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

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

Материалы

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

Я использовал Substance Painter для создания текстур. Основа моей работы — смарт-материалы (smart materials). Мне кажется хорошим решением собрать библиотеку смарт-материалов и создавать всё на их основе. Но их всегда нужно дорабатывать: смарт-материалы отлично подходят в качестве начальной точки, но не более того. Без обработки они не будут работать на создание иллюзии.

Смарт-материалы я всегда начинаю с основного слоя. Здесь я использую простые базовые значения или текстуры. Затем добавляю детали: немного AO-пыли, пятен грязи, варьирования шероховатости и так далее. Хороший приём — сделать AO-грязь светлее и наложить на неё маску через MG Mask Editor. Я контролирую маску через искривление (curvature), AO и значения текстуры. Искривление зависит от меша. Для меня лучше всего работает Mode: Edges.

Чтобы добавить разнообразия, я использую текстуру Grunge Splashes Dusty с режимом наложения (blending mode) «линейный осветлитель» (linear dodge). Для информации шероховатости я пользуюсь набором текстур Дэвида Грувьера (David Gruwier).

Кнопки должны выглядеть уместно и практично. Для этого я добавил небольшое углубление на карте нормалей вокруг каждой кнопки для ощущения, что их можно нажать. Без углублений кнопки будто приклеены на плоскую поверхность. Далее я добавил цветовой чёткости (color definition) вокруг каждой кнопки. Также вокруг каждой кнопки есть немного пыли и AO в углублении. Далее я повысил их значение шероховатости, чтобы они выглядели приятными на ощупь. Чтобы ещё усилить этот эффект, я добавил немного потёртости на гранях.

Текстура

Я создаю низкополигональную модель объекта и топологию, чтобы его части можно было развернуть для работы над текстурой. То есть, если я хочу, чтобы какая-то часть объекта была на текстуре отдельно, я располагаю полигоны так, чтобы появился отдельный UV-участок, к которому я мог бы применить текстуру. Когда топология готова, нужно лишь скопировать эти части на другой меш и построить текстуру по ним. Если считывать геометрию текстуры поверх полигонов, на которые она будет применена, текстура идеально подойдёт.

Я использовал шейдер скруглённых граней от Modo, чтобы на карте нормалей получились мягкие грани. Мне не пришлось ничего разделять (subdivide), а значит, и волноваться о топологии. Почти каждая часть, которую вы видите, — это отдельный меш, но они выглядят хорошо благодаря шейдеру: он добавляет незаметный переход там, где части перекрывают друг друга.

Не тратьте время на создание небольших повторяющихся деталей вроде винтиков или отверстий, смоделируйте их один раз и используйте как альфа-маску в Substance Painter. Так быстрее.

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

Рендеринг

Объект создавался для VR-игры, значит, он должен был быть очень ресурсоэффективным. На нём всего 8400 полигонов, и все текстуры в 2К, так что с этой задачей я справился. Для рендеринга я использовал VXGI от Nvidia, так как она даёт возможность генерировать отражения и HBAO в реальном времени.

Для демонстрации объекта я создал уровень со схемой (blueprint) для демонстрации, взятой из сообщества Unreal. Её легко настроить, и в ней есть несколько отличных пресетов для HDRI.

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

Дополнительный свет — это нейтральный прожектор, освещающий центр панели. Третьестепенные источники не важны для сцены, они эмулируют освещение окружения. Расположение тёплого и холодного света напротив друг друга делает сцену интереснее.

Для текстуры я использую функцию parallax occlusion mapping. С помощью Normal to Height HQ в Substance Designer я сделал карту высот из карты нормалей. Главное — не забыть выставить высокое качество, а Relief Balance присвоить значение единицы. У альбедо такая же маска прозрачности, как и у текстуры в альфа-канале. Я использую её через интерполяцию для создания маски между единой текстурой (trim sheet) и плиточной.

#графика

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

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

Популярные

По порядку

0

Прямой эфир

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

Подписаться