Gamedev Vladislav Khromov
1 688

Создание стилизованных модулей окружения

Дома-конструкторы.

В закладки

3D-художник Йохан Виллиам Лёффер (Johann William Löffler) рассказал сайту 80.lv о том, как он создавал стилизованные модели окружения. Читатель DTF перевёл интервью.

Я из Берлина, мне 19 лет. Сейчас я прохожу третий семестр по курсу Цифрового Искусства (Digital Art) в Берлинской Академии Игр (Berlin Games Academy). Впервые я познакомился с 3D-моделлингом для игр в 2013 году, во время стажировки в игровой студии. После этого я немного моделил во время учебы в школе, а с лета 2016-го плотно занялся 3ds Max, Zbrush и Substance Painter. До сих пор я, в основном, занимался 3D для учебных проектов и частной практики, но так же стажировался в небольшой инди-студии на мобильных играх. Вы можете познакомится с моим портфолио на Artstation.

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

До этого момента, я создавал только реалистичные или около-реалистичные ассеты, и мне хотелось узнать, как я могу добиться стилизации с такими PBR инструментами, как Substance Painter и Substance Designer, без создания текстур раскрашенных вручную, как очень затратного по времени процесса. Также я выбрал этот проект чтобы углубиться в скульпт стилизованных моделей в Zbrush и узнать больше о заменяемости, повторном использовании ассетов и о том, как лучше всего это представить в Unreal Engine 4.

{ "items": [{"title":"","image":{"type":"image","data":{"uuid":"b329bcbf-52b9-9d63-2796-dce3b4d77efe","width":1920,"height":960,"size":606908,"type":"jpg","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"05fdffe1-9e96-d7ce-d0ef-76534a898fd9","width":1920,"height":960,"size":481471,"type":"jpg","color":"","external_service":[]}}}] }

Для начала я подробно изучил стилизованные сцены и игры на Artstation, чтобы понять как другие создают подобные работы. После этого решил построить рабочий процесс через 3ds Max, ZBrush и Substance Painter на примере небольшой сцены и проработать текстуры до тех пор, пока не добьюсь стиля, который устроит меня. Вскоре я понял, что мне придётся вырезать небольшие детали и лишний шум, чтобы добиться должной стилизации и чёткости, а так же добавить игры света и теней.

{ "items": [{"title":"","image":{"type":"image","data":{"uuid":"3a4f819a-a27e-1452-cc91-44b260115d3f","width":1920,"height":960,"size":1838231,"type":"png","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"d96b8182-1e95-73e5-7664-d9a9c39a5d99","width":1920,"height":960,"size":1507499,"type":"png","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"cc57096c-e966-86d9-6102-6e4ab4cee9a3","width":1920,"height":960,"size":1120549,"type":"png","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"dc36a912-d34f-5a5d-19dd-b28fbdf1dfa9","width":1920,"height":960,"size":1640105,"type":"png","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"e138f1c9-3630-e672-3091-706bb81d0cbe","width":1920,"height":960,"size":1545608,"type":"png","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"454aec4d-a148-f360-eafa-a14f296e2a87","width":1920,"height":960,"size":1680198,"type":"png","color":"","external_service":[]}}}] }

Шаг за шагом я создавал составные материалы (smart materials), которые состояли из базового слоя с чёткими цветами и подходящим уровнем шершавости и металлического блеска, с несколькими слоями поверх этого, с highlights, AO dirt, blurred edges и так далее. Я использовал этот материал практически для всех моих деталей, просто немного изменяя базовый слой и добавляя некоторые детали. Говоря о моделлинге, я преувеличивал общий размер вещей и искривлял их для создания интересных силуэтов.

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

Большую часть мелких деталей и моделей для сцены я создал, используя заново вещи, созданные до этого. Ящики, бочки, колодец и телега сделаны из бесшовных текстур и деревянных досок, произведённых до этого. Иногда я запекал кое-какие уникальные детали (например колесо телеги или веревка фонтана). Таким образом, я смог добиться большего от существующих вещей, а так же единообразия стиля. Для полностью уникальных моделей, как например продукты на рынке, я создавал базовые формы в 3ds Max, скульптурировал их используя несколько кистей из наборов ORB и AJ, а затем делал лоу-поли, просто подгоняя изначальную модель.

Когда я делал UV-развертку, я старался максимально часто использовать всё пространство и не разбрасываться ни единым пикселем. Текстуры ассетов делались в Substance painter, с помощью smart material, созданным ранее для экономии времени и единообразия стиля. Я создал бесшовную текстуру сена в Photoshop и Substance Designer, для использования её в альфа-канале, расположив декаль по кругу стога, чтобы эффект был более правдоподобным.

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

{ "items": [{"title":"","image":{"type":"image","data":{"uuid":"bb4a0204-6d8b-e0dc-eacc-3d211104dccd","width":1920,"height":960,"size":580102,"type":"jpg","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"b05cf596-496e-3e00-a977-2c1f0fe3ccb4","width":1920,"height":960,"size":536953,"type":"jpg","color":"","external_service":[]}}}] }

Основная идея моего набора в том, что у меня есть четыре базовых формы дома (большой/маленький/угловой/длинный) и есть возможность добавлять к ним детали (дверь, окно, балка, мансарда, балкон). Базовые модули созданы так, чтобы можно было сменить текстуру и добиться другого внешнего вида без необходимости моделить что-то новое. К домам можно добавить лишь второй этаж, но подобные модули могут быть легко добавлены.

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

Более того, церковь — это просто увеличенный длинный дом с добавлением дозорной башни и столбов с другой стороны. Для церковных окон я заново использовал бесшовную текстуру камней, вставив их в оконную раму. Располагая всеми этими отдельными частями, я мог свободно комбинировать их для создания интересных и разнообразных с виду зданий.

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

{ "items": [{"title":"","image":{"type":"image","data":{"uuid":"ab328a63-fdcb-0fd9-874d-6d396db13f92","width":1920,"height":960,"size":492324,"type":"jpg","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"8e63689b-f887-d35f-f363-567b5d3c8a71","width":1920,"height":960,"size":591526,"type":"jpg","color":"","external_service":[]}}}] }

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

Это делает экспорт более простым, так как вы можете экспортировать несколько ассетов за раз, используя скрипты вроде Batch Exporter. Напоследок, я бы порекомендовал каждому присоединиться к сообществам вроде Ten Thousand Hours, Polycount или Dinusty discord. Хороший отзыв стоит много и это действительно может помочь посмотреть на вашу работу свежими взглядом и мотивировать вас добавить больше усилий и продолжать работать.

#арт

Материал дополнен редакцией
{ "author_name": "Vladislav Khromov", "author_type": "self", "tags": ["\u0430\u0440\u0442"], "comments": 13, "likes": 30, "favorites": 1, "is_advertisement": false, "subsite_label": "gamedev", "id": 12665, "is_wide": false }
{ "id": 12665, "author_id": 1834, "diff_limit": 1000, "urls": {"diff":"\/comments\/12665\/get","add":"\/comments\/12665\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/12665"}, "attach_limit": 2, "max_comment_text_length": 5000 }

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

Популярные

По порядку

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

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

Ответить
4

Не стоит искать реализм там, где ему быть не обязательно.

Ответить
4

Пока в городе не бродят торговцы и ремесленники, а пьяницы не справляют нужду - конечно же, все норм. Игрок вообще редко останавливается и думает об окружающем в играх, всегда есть цель. Но мне нужен не реализм, а непротиворечивость окружения. Если какой-то персонаж начинает говорить о несварении желудка, то где-то должен быть туалет. И тут как раз забавно вспомнить игры, где туалетов чрезмерно много, например, в Duke Nukem, Doom.

Ответить
1

Но мне нужен не реализм, а непротиворечивость окружения.

Чорт, спасибо, у меня как раз есть проблема, как объяснить подобный момент коллегам, хорошо звучит.

Ответить
0

Многие иммерсив симы повторяют одни и те же сцены каких-то трапез, праздников не просто так. Вам очень легко принять такое окружение. В таких играх, как Dishonored, можно объяснить разрухой или порчей отсутствие каких-то деталей. В Heroes of the Storm нелепые декорации подчеркивают театральность и абсурдность происходящего, заставляют улыбаться от нелепых схваток в нелепом окружении. В Overwatch я не верю в этот мир, он полон упаковок и оберток, но мяса и конфет нет.

Ответить
2

Есть такое понятие как игровая условность. В Циве например люди больше зданий.

Ответить
2

Из всех условностей в Циве вы выбрали ту, которой как раз в игре нет)

Ответить
0

Да, Серж явно должен извинится - в циве юниты размером с город

Ответить
0

Не-а, иначе бы население города было бы равно 0 с такими размерами людей. Это условность отображения персонажей на карте игрока, как фигуры на доске - но не условность самой игры.
А вот моментальная передача информации между командующим (игроком) и войсками - уже игровая условность

Ответить
0

Грубо говоря, карта в Hitman, на которой отображаются все живые NPC, с указанием направлений взгляда - игровая условность.
А вот возможность "на паузе" прокрутить инвентарь и выбрать оружие - нет, так как пауза существует только для игрока, а для 47-го ее нет, он просто выхватывает моментально оружие, которое потребовалось

Ответить
1

Как раз сейчас занимаюсь подобным. Только немного иная ситуация: так как в здания можно забегать, 3D-тайлы стен, пола и т.д. отдельны.

Ответить
0

Почему-то для зданий принята именно такая практика - по крайней мере, я гораздо чаще вижу именно блочные варианты, а не тайловые

Ответить
0

По сути это и есть блочность, просто я называю блоки "3D-тайлами". Взял общий фиксированный размер блока 3 метра и относительно этого создаю контент, параллельно пытаясь соблюсти реальные размеры элементов окружения (оконные проемы, высота ступенек лестниц и все такое прочее). Некоторыми моментами пренебрегаю, так как в top-down игре с перспективной проекцией они в принципе не нужны. Изначально планировалось делать дома цельными, без необходимости запекания нормалей и текстур ("красота" наводилась шейдерами). Но сейчас направление изменилось и было решено вернуться к традиционным запеканкам и текстурам. Тогда и началась работа с блоками.

Ответить

Комментарий удален

0

Прямой эфир

[ { "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" ], "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" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Хидео Кодзима оказался алгоритмом
машинного обучения
Подписаться на push-уведомления