Создание ScrapBot
Кирилл Медведев рассказал о своей работе над ScrapBot
И вот я делаю свой проект в sci-fi стилистике. Уже год я занимаюсь проработкой внутренностей космического корабля, разными деталями, предметами окружения. Но за это время, проработав множество мелких и простых объектов и порядком устав от них, я понял, что необходимо сделать что-нибудь посерьезнее консервной банки из будущего или очередной секции стен. Выбор пал на главного героя игры – космического бота- разведчика. Непосредственно в игру я его добавлять не планировал (Игра от первого лица и перед камерой торчит только грави - пушка клешня). Однако я решил сделать этого бота лицом игры, плюс, возможно, использовать в начальной кат-сцене. Поэтому пайплайн создания модели все же подразумевал PBR и дальнейший экспорт в движок, со всеми вытекающими.
Начало работы и сбор референсов
В общем цели были поставлены – нужен максимально проработанный персонаж, которого можно будет использовать на постерах и других промо-материалах, делать шоты как вблизи, так и издалека, одновременно с возможностью закинуть модель в движок и анимировать при надобности. Для меня это был настоящий вызов, так как ничего подобного по сложности раньше я не делал. К тому же не было никаких четких концептов, а я тот еще «дизигнер». Все, что было уже готово - это клешня. Что несколько осложнило задачу, так как мне предстояло органично вписать уже полностью готовую клешню в персонажа, которого я представлял себе только в голове. Само собой я начал с поиска референсов. В чем прекрасно помогла доска на Pinterest, на которой я уже год собирал разные sci-fi арты. Для организации референсов я использовал PureRef – незаменимая в таком деле вещь, кстати.
Блокинг
После сбора некоего пула референсов, в голове сформировался общий образ бота. Теперь, более четко представляя, что должно в итоге получиться, я решил очень быстро собрать несколько вариантов компоновки бота, и затем выбрать лучшую. В итоге получился даже не блокинг, а что-то еще более аморфное, но дающее общее направление для дальнейшего развития.
Общей идеей было то, что бот должен был быть похож на жука и иметь некое подобие мордочки, но очень отдаленное, скорее на уровне парейдолии. Выбрав общую компоновку, я, уже представляя, из каких частей будет состоять будущей бот-мародер, постепенно начал составлять блокинг модели.
Сначала был выполнен общий блокинг, задающий основные пропорции и силуэт модели, который я позже разбил на более мелкие части. Для каждой из этих частей я сделал отдельный мини-блокинг, с большим количеством деталей.
Главным, чего я хотел добиться на этапе блокинга, был интересный силуэт и органичное расположение всех частей бота. Это в том числе помогло решить проблему вписывания клешни в бота.
Переоценить важность блокинга сложно. Если на этом этапе силуэт будет скучный и неинформативный, то даже супер детализированная модель будет казаться недоработанной, но на поздних этапах кардинально исправить силуэт будет очень трудно.
Высокий полигонаж
Когда все части бота встали на место я получил что-то вроде mid-poly модели, некоторые части которой уже можно было использовать под сглаживание, а некоторые пришлось переделывать полностью заново. Я решил разбить бота на 4 стратегические части: тело, внешний трубчатый каркас, панцирь и все мелкие детали.
Каркас, тело и панцирь я так же решил пропустить через Zbrush, с которым у меня был не очень большой опыт работы. Но без скульптинга, того уровня проработки, который я запланировал, было не обойтись. Отличная возможность прокачать свои навыки! Начал я с самой заметной части бота – панциря. Его пришлось сделать заново, так как на блокинге была уже убитая сетка, да и в любом случае он был кривоват. В процессе создания добавились новые детали, вроде выреза сбоку под шарообразный контейнер и избавление от симметричности.
Панцирь моделился итерациями – добавление edit poly, создание деталей, затем одна итерация turbosmooth, новый edit poly и добавление более мелких деталей. Вот так выглядит финальный стак модификаторов.
Однако проблемой для меня стал фонарь, который должен был плавно срастаться с панцирем. Как я его не приделывал, сетка в итоге превращалась в настоящий ад из артефактов. А на стадии с высокой итерацией сглаживания соединить все точки друг с другом было бы просто непосильной задачей. Поэтому сварить два трудно стыкуемых элемента я решил уже в браше с помощью магии DynaMesh’а.
Так же на этом этапе были добавлены всякие мелкие царапины, следы от резки металла на круглом отверстии и швы внизу панциря.
С мелкими деталями я особо не усердствовал, так как планировал добавить еще на этапе текстуринга.
Затем наступила очередь внешнего трубчатого каркаса. У меня было желание уделить особое внимание сварным швам, которые раньше я добавлял только на этапе текстуринга, из-за чего выглядели они очень невыразительно. Каркас я так же прогнал через Dynamesh, чтобы сварные швы получились плавными и не был заметен острый угол.
Думаю, профи я вряд ли чем-то тут удивлю, однако новичкам может быть полезно. Вот мой быстрый пайплайн создания сварного трубчатого каркаса:
1 – Делаем болванку в максе, не «сваривая» вершины. Просто втыкаем геометрию друг в друга. И кидаем как есть в браш. Сразу сглаживаем на 5-6 сабдивов.
2- Используем DynaMesh, установив побольше разрешение (в моем случае это была 1000) и отказываемся от заморозки уровня сабдивов.
3 – Отлично, геометрия объединена, при этом угол остается достаточно острым. Я немного его сглаживаю, используя кисточку Clay и затем пройдясь smooth’ом.
4 – ну и самое приятное – используя кисточку со сваркой (Уже давно где-то купил небольшой пак альф для эффекта сварки), включаем небольшой lazy mouse и просто рисуем им вокруг шва. Занятие дико залипательное, советую для релаксации на ночь. Остальные части бота на этапе хайпольки ничем особым не отличались. Я просто брал деталь с блокинга, немного дорабатывал сетку и добавлял грани поддержки для будущего сглаживания. Пришлось немного покорпеть с «телом» из-за большого количества втыкаемых в него деталей:
Финальная хайполька (без деталей из браша) выглядит вот так:
Сетка без сглаживания:
Низкий полигонаж
Теперь, когда все хайпольные элементы уже были готовы, пришла пора ковать лоу-поли версию. Тут все объекты были поделены по сути на две категории – те, с которых можно было просто снять доп. грани для сглаживания (поэтому грани поддержки я добавлял отдельным edit poly модификатором, чтобы для low-poly версии просто удалить его и избавиться от ненужных граней) и те, что нужно было ретопить. Ко второму типу относился только панцирь и его небольшие кусочки. Ретопологию я выполнял стандартными возможностями макса из панели ribbon.
Сетка получилась далеко не идеальной, некоторые моменты явно лишние, но учитывая, что эта часть никак не будет анимироваться и нагружать игровой процесс ей так же не предстоит, я решил сэкономить время и не вычищать все до конца.
Итоговый «счет» всей модели составил 54к трисов.
UV и запечка
Так как бот уже был разделен на 4 логические части, я решил, что и развертка для каждой из них будет уникальная. Больше всего пришлось посидеть с деталями, так как их было действительно много. Развертывал стандартными средствами макса + немного помогал TexTools. С помощью чеккера и кнопочки rescale, я привел общую текселизацию к приблизительно одному уровню (+-15%)
Когда все было развернуто я так же по частям начал запечку. Запечка производилась (да простят меня поклонники marmoset) в substance painter 2. Как по мне результат вполне приемлемый и быстрый. В некоторых местах пришлось чуть пройтись фотошопом, но в остальном результат меня устраивал более чем.
В пэйнтере я запек помимо нормала и все остальные каналы – включая Ambient Occlusion, curvature, position, world space normal, thickness. Учитывая, что все части запекались отдельно, то например тень от панциря в АО тела и деталей не присутствовала. Поэтому я отдельной итерацией запек ао-шку уже всего бота целиком и объединил с АО каждой части. Немного запарно, однако, чем более подробная карта теней и curvature получится в итоге, тем лучше будут вести себя smart-материалы, для которых информация с таких карт крайне важна.
Текстуринг
Ну и самое сладенькое. Как известно, хорошую модель, можно запороть плохой текстурой и наоборот: плохенькую модельку вытащить хорошими текстурами и подать на блюдечке из киношного рендера и освещения. В моем случае моделька сама по себе имела не так много деталей до текстуринга. Особенно голым казался панцирь, который занимал 80% пространства, особенно если смотреть на модель под углом. Поэтому задача текстуринга в моем случае была, как можно более интересно закрасить панцирь, добавить так называемые points of interest – детали притягивающие взгляд. Это могут быть различные надписи, наклейки, необычные сколы, потертости и т.п. В общем все, что максимально разнообразило бы большие и ровные площади панциря. Ну и про более мелкие детали тоже не стоило забывать.
Пайплайн текстуринга у меня следующий: сперва я добавляю различных деталей на hightmap. Разные швы, винтики, маленькие детали и прочее, что я не стал вымоделивать на хайпольке. Рисую на отдельном слое-заливке, где высота установлена в районе -0.8 пунктов.
Затем я экспортирую получившиеся карты нормал и хаймапу. В дизайнере я прогоняю их через ноды Curvature и Ambient Occlusion и объединяю с запечёнными ранее картами. Примерно так выглядит дерево нодов.
Получив AO и curvature со всеми возможными деталями, начинается процесс раскрашивания. Так как все нужные доп. карты уже готовы я обычно сразу подбираю подходящий smart-материал, как базу, с которой можно будет работать + разбиваю модель по цветам. Ну а дальше начинается жонглирование разными картами грязи, пыли, потертостей и т.п. Я обычно использую маску со слоем-заливкой к которой подключен генератор, а сверху вешаю paint слой, где уже руками дотираю или грязню нужные места, которые смарт-материал обошел стороной. В случае со старой краской основными местами для затирки были углы, а в углублениях я добавлял больше пыли и грязи. Примерно такой стак материалов был на каждой из 4-х частей.
Когда я добавляю грязь и потертости, то всегда проверяю отдельно карты roughness и metallic. На рафнесе желательно иметь как можно более разнообразную текстуру, при этом стараться избегать монотонности карты бликов, чтобы не ощущалось повторение. Металлик я контролирую так, чтобы на нем не появились серые пятна, так как карта металлика должна быть строго черно-белой для естественного отображения.
Ну и конечно карта цвета или albedo, должна быть максимально выразительной и нескучной. В этом как раз и помогают ранее упомянутые points of interest.
Немного хочу еще рассказать о способе, как я делаю потертости на старой краске в районе швов и острых углов. Думаю, опять же новичкам будет полезно. Берем объект, рисуем на нем хаймапой детали.
Сверху материал краски, внизу чистый металл. Затем настраиваем кисточку: Берем квадратную альфу и выставляем параметры Jitters примерно так.
Добавляем белую маску на краску, и начинаем «затирать» швы. Кисточка с такими параметрами дает «рваный» эффект и достаточную случайность поворота, чтобы избежать повторения. Первый проход дает примерно такой результат.
Далее я переключаю альфу с черного цвета на белый, и начинаю замазывать шов краской обратно, но уже более мелкой кисточкой, тем самым уточняя края, чтобы не было видно квадратных следов. И таким образом постоянно инвертируя кисть и рисуя по маске, получается довольно натуральный эффект. (тут я делал быстро, доводить до идеала можно дольше).
Затем сверху можно подключить процедурные маски, которые добавят рандомных потертостей по поверхности.
Проходимся по всем швам и выделяем разные детали вроде болтиков и ручек. Получаем такой эффект:
Визуализация
Ну и напоследок немного о рендеринге. Альтернативы Marmoset toolbag в этом деле я пока не вижу. Никаких особенных настроек в материалах я не делал, за исключением эффекта огня из турбин. Для огня были нарисованы текстуры с картой прозрачности.
В соплах были размещены плейны на которые я натянул текстурки с огнем, немного изменил их скеил и получилось ка кто так.
Что, думаю, стоит отметить это, что в мармосете под каждый ракурс я выставлял свой сетап света и окружения. В иерархии очень удобно копировать уже настроенный скайбокс, а затем изменять его. Мармосет автоматически переключает скайбокс на тот с которым вы работаете. В итоге получилась такая вот колбаска, так как ракурсов я старался делать побольше и в каждом из них как можно более выгодно выставлять свет.
Однако стоит помнить, что перебарщивать с источниками освещения тоже не стоит и лучше ограничится 3-4 источниками на одну сцену. В рендеринге я так же выставил новую для мармосета настройку – global illumination. В некоторых случаях выглядело странно, и приходилось долго крутить настройки, чтобы все выглядело боле-менее приемлемо. Однако на некоторых ракурсах пришлось отказаться от этой фичи вообще.
Заключение
В итоге на всю работу ушло около месяца. В какие-то дни получалось сидеть по 5-6 часов, когда-то удавалось моделить только вечерами. Сейчас, смотря на результат, понимаю, что некоторые моменты, конечно, еще требуют доработки, и где-то я просто схалявил, где-то не заметил косяк, где-то просто не хватило опыта и знаний. Но каждая такая работа, для которой приходится прыгать чуть выше головы, приближает нас к совершенству, и новая работа будет уже на один порядок лучше и профессиональнее.
Thanks for the information: artstation.com