Making Of "Шотган"

Привет! Меня зовут Александр Шейнин, я hardsurface artist из Тулы, работаю на фрилансе; в 3D с 2016 года. В данной статье я постараюсь подробно рассказать о моем процессе работы при создании модели «Шотган». Из программ использовались: 3ds Max 2018, Zbrush 2018, Unfold3D VS 2018, Substance Painter, Marmoset Toolbag 3, Adobe Photoshop CC 2017, PureRef.

Идея
Оригинальный концепт художника Ивана Тараненко я нашел на его странице на artstation. Темный синий металл в контраст с ярким желтым цветом пластиковых деталей, потеки ржавчины, пятна крови на лезвии, грязная ткань, намотанная на закаленный ствол, засохшая краска на рукоятке, - все это привлекало внимание, а также отлично подходило под мои цели – изучению текстурирования в substance painter. Поскольку, работа создавалась для себя, я сделал некоторые изменения в самой конструкции модели. Вероятно, изначально предполагалось наличие двух стволов вместо одного, отсюда и название концепта – sawed-off shotgun (в переводе – обрез). Мне же казалось, что пушка будет смотреться более органично, если оставить один ствол, да и своими размерами она больше напоминала гранатомет, нежели дробовик. Отсюда и родилась идея дополнить работу 40 мм гранатой.

1.png

План работы
Перед тем, как начать делать ту или иную модель, я составляю небольшой план задач. Он не всегда одинаков; в зависимости от сложности модели, этот список может меняться, дополняться, или наоборот, - быть короче. Обычно выглядит следующим образом :
1. Подбор референсов
2. Blockout
3. Highpoly
4. Lowpoly
5. Uv
6. Baking
7. Texturing
8. Rendering

Подбор референсов

Референсы я, в основном, нахожу через поиск гугла, гораздо реже – pinterest, а также – через youtube, делая скриншоты при просмотре видео, на которых показывают моделируемый объект. Чтобы все это собрать воедино и организовать, я использую Pureref - бесплатная программа, позволяющая выводить изображения поверх всех окон, делать их прозрачными (как в Zbrush see-through слайдер), а также закреплять на экране, без возможности каких-либо манипуляций с окном. Все рефы можно поделить на 2 категории: 1) для понимания материала; 2) для понимания форм. Количество изображений необязательно должно быть большим; достаточно лишь тех, которые непосредственно будут использованы в работе.

2_2.jpg

Modeling
Основной программой, которую я использую для моделинга, является 3ds Max. В ней есть как куча плюсов, так и минусов; тем не менее, у меня она работает достаточно стабильно, а в совокупности с дополнениями, позволяет мне получить желаемый результат довольно быстро. Из скриптов и прочих аддонов я использую:
1) Regularize edge loop – формирует окружность из выделенных ребер или границ выделенных полигонов;
2) Align Pivot To Selection – быстро выравнивает pivot объекта относительно выделенного подобъекта/ов, вместо того, чтобы двигать его вручную;
3) Sub-object pivot – позволяет установить манипулятор трансформаций относительно выделенного подобъекта/ов. Аналог referenced системы координат, как в maya/xsi, в виде скрипта;
4) Vertex Cleaner – убирает лишние вертексы после максовского булеана.
В плане приемов, тут ничего особенного – использование симметрии, array для повторяющихся частей (отверстия на кожухе охлаждения); почти все действия с ребрами и полигонами, такие как extrude, chamfer, bridge, cap hole, connect, weld, quick slice, collapse и прочие у меня забиты на горячие клавиши. Особенно часто применяю выравнивание по осям; команды: center pivot; autosmooth и harden/soften для создания групп сглаживания; set flow; remove loop (все тоже на горячих клавишах). Также использую Proboolean в режиме instance - работает наподобие live booleans в Zbrush. Чтобы избежать лишних вершин, в настройках ставлю на Remove only visible, остальное – убираю с помощью vertex cleaner.

Blockout
Обычно, надо придерживаться правила «от больших форм к малым», тем не менее, когда у тебя есть только вид сбоку, не всегда понятно, насколько объект широк. Поэтому я начинаю с цилиндрических форм, поскольку они имею 2 равные стороны. Все меши, относящиеся к блокауту я располагаю на отдельном слое, оставляя на дефолтном только основной референс/камеры/свет (если есть). Список слоев выглядит так: 1) 0- default; 2) blockout; 3) highpoly; 4) lowpoly.
На основе полученных на этапе блокаута мешей, в последующем будут созданы и highpoly, и lowpoly модели, поэтому, топология важна, в первую очередь, для тех объектов, которые потом станут основой для subdiv highpoly мешей (например – граната). Для объектов, которые будут дорабатываться в zbrush, топология и количество n-гонов менее существенны. Главное для них – передать силуэт. Поэтому я не экономлю на количестве сечений в круглых формах. Идея такова, что даже с относительно близкого расстояния, фрагмент меша не должен выглядеть угловатым.

2.jpg

1.jpg

Чтобы создать различные сложные вырезы или слияния форм, я использую proboolean в максе, либо создаю отдельный меш под форму выреза, делаю его экспорт, а саму булеановскую операцию уже произвожу в Zbrush, либо полностью делаю этот меш в зебре, а потом – вырезаю из основной формы. В максе, булеановским объектам назначаю отдельный материал.

3.jpg

В данном случае были использованы 1-ый метод на этапе блокаута и 2-ой при создании highpoly.
После того, как созданы основные формы, я редактирую положение пивотов, делаю линки отдельных частей объекта, что позволяет трансформировать разные меши вместе, не сливая их в один объект; проверяю, не происходит ли перекрытий частей объекта во время трансформаций, все ли двигается так, как должно. После, перехожу к созданию highpoly.

Highpoly
Принцип моделирования highpoly-частей был обусловлен количеством времени, требовавшимся на их создание. К примеру, гранату было проще и быстрее сделать под сабдив, т.к. никаких крупных повреждений или царапин, которые пришлось бы скульптить на ней нет, да и из макса ее экспортить не придется. Я скопировал с блокаут-слоя меш, добавил вверх стека модификатор edit poly, - на нем я выделяю ребра, к которым добавляю support loop-ы. Тут же, если нужно, делаю поддерживающие ребра вручную с помощью cut и quick slice. После, добавляю turbosmooth с парой итераций и проверяю на наличие артефактов.
Отдельный модификатор под саппорты нужен для того, чтобы разом убрать всю лишнюю геометрию при создании lowpoly из highpoly модели, а не выделять и удалять каждый loop по отдельности (в данной работе, lowpoly создавалась из blockout-модели, поэтому отдельный модификатор был обусловлен привычкой, а не необходимостью). Также, подобные вещи можно делать с использованием модификаторов Crease set (или Chamfer), или через extrude выделенных ребер на отдельном edit poly в режиме animate (позволит поменять расстояние экструда).
Все остальные части были экспортированы в Zbrush. Перед экспортом, я создаю модификатор edit poly, меняю его название на Triangulate, выделяю все вершины и делаю connect. Это нужно для того, чтобы в Zbrush не возникло артефактов при импорте, а в максе – можно было в одно действие удалить модификатор и вернуться к первоначальному мешу для создания lowpoly. В зебре я назначаю полигруппы по нормалям, включаю dynamesh, после чего сначала маскирую грани (mask by feature – groups), затем отдельно делаю polish на весь меш, потом инвертирую маску и применяю polish на краях (polish, polish by features или polish by crisp edges, в зависимости от формы объекта). Далее, добавляю повреждения с помощью кистей trim dynamic, clay, planar, hpolish, orb_slash. Рельеф на рукояти мне было удобнее добавить в Zbrush, поэтому я создал паттерн альфы в Photoshop, и на основе стандартной кисти нанес на меш. После всех этих манипуляций, делаем decimate и экспортим назад в 3ds Max, где называем каждый объект своим именем с постфиксом _high (через tools – rename objects или вручную).

4.jpg

Lowpoly
Тут все довольно просто. В ретопе нужды не было, поэтому я лишь оптимизировал меши со слоя blockout, убрав лишние вершины и ребра, и приаттачил их в единый объект. Итоговый поликаунт составил 19806 трисов. Единственный важный момент – это группы сглаживания. Стоит помнить, что hard edges будут видны даже после запекания, поэтому надо понимать, где их ставить, а где - нет. К примеру, по граням углубления на лезвии, я назначил разные группы сглаживания, хотя угол между некоторыми больше 90 градусов. В то же время, я использую одну группу сглаживания на круглую часть, иначе вмятина под курок после запекания не будет выглядеть ровно.

5.jpg

Uv
Перед тем, как перейти к развертке, я отделяю симметричные и повторяющие части от модели и назначаю им отдельный материал. Впоследствии, эти части будут скопированы с тех, на которых я создам развертку и перенесены на соседнее uv-пространство, чтобы оставить больше места под остальные.
Для создания разверток я использую Unfold3D VS 2018. Она максимально быстро позволяет нарезать швы, разгладить uv-островки и автоматически упаковать их. Интерфейс и функции довольно схожи с теми, что есть в 3ds max/maya, поэтому программа интуитивно понятна. Развертка квадратная, т.к. пространство заполнилось равномерно; uv-островки тех частей, которые не видны (внутренние поверхности тряпки, ствола и кожуха охлаждения) я уменьшил, чтобы оставить больше пространства для тех, что на виду. Параметры margin (отступ по краям всего uv-пространства) и spacing (dilation в substance painter, он же padding) следует устанавливать исходя из будущего разрешения текстур. Я оставил 8 и 16 соответственно.

6.jpg+

После того, как развертка создана, я экспортирую модель обратно в макс, дублирую повторяющиеся части с тех, которые развернуты, переношу их на соседнее uv-пространство. Затем, разбиваю на отдельные части (чтобы избежать артефактов при запекании в substance painter), присваиваю названия, соответствующие их highpoly аналогам, делаю weld для всех точек с малым пороговым значением (чтоб не было дыр), далее еще раз проверяю на наличие артефактов, лишних дыр, неправильных групп сглаживания; после делаю reset xform и экспортирую.

Baking
Запекание делал в painter’е, поскольку здесь все довольно понятно и сам бейк происходит достаточно быстро. Тут тоже все просто, разрешение – 8k. Сначала пеклись normal, wsm, ID, curvature и Position с параметром antialiasing на 2х2, затем AO и Thickness без антиалиасинга.

7.jpg

Match – by mesh name – для того, чтобы избежать артефактов при запекании соприкасающихся частей (вместо того, чтобы раздвигать их в пространстве).
Ignore backface – если нормаль полигона отражена внутрь, painter не учтет это при запекании.
Average normals – усредненные нормали. В данной работе, достаточно плотная и равномерная сетка, поэтому больших искажений при запекании с усредненными нормалями нет. В случаях, когда они возникают, обычно совмещаю 2 бейка – один делаю без усредненных нормалей (по сути – кейджа) для плоских граней, чтобы все детали проецировались ровно на поверхность, второй – с усредненными для углов, чтобы грани плавно переходили друг в друга. Затем эти две карты совмещаю по маске. Также, можно временно увеличить плотность сетки на меше (добавить tessellate или turbosmooth с флажком smoothing groups), запечь карты, а затем, заменить меш на исходный.
Max frontal и max rear distance определяются опытным путем.

8.jpg

Ignore backface при запекании AO отключен, т.к. без него карта становится более контрастной, occlusion-области будут темнее.
Self occlusion – always, чтобы затемненные следы оставались на соприкасающихся объектах.
Аналогичные параметры на Thickness. Настройки карт Position и Curvature я оставил по умолчанию. Для карты ID – Color source: Mesh ID/Polygroup.
Отдельно стоит отметить, что на этапе запекания и текстурирования, приходится использовать как модель с разведенными в разные стороны частями, так и модель в сборе. Сборная – для запекания, разведенная – для того, чтоб был доступ при рисовании к закрытым частям (например – граната в стволе). Заменить исходный lowpoly меш можно через edit – project configuration без каких-либо потерь.

9.jpg

10.jpg

Texturing
Для каждой отдельной части модели идет своя папка, по сути – смарт материал. Такая организация не даст запутаться в большом количестве слоев, а также позволит легко манипулировать ими. Add color selection позволяет создать маску на основе ID-карты, по выбранному цвету части или частей модели.
Внутри любой папки также идет иерархическая структура. В большинстве случаев это – папки base и wear&tear, а сверху них – пустой слой с фильтром sharpen и небольшим значением sharpen intensity. В папке base идут слои, определяющие основной материал – т.е. почти чистый материал, без царапин, ржавчины и прочего износа. Здесь я использую один основной слой – base. Это может быть уже готовый материал (не смарт), или созданный вручную на основе пустого fill layer.
Далее идут вариации цвета – слои с названием color variations. Я никогда не встречал на материалах однородный цвет, поэтому на этих слоях отключены все каналы, кроме color, и наложены маски с различными процедурными картами типа dirt/grunge spots/grunge shavings или генератором mask builder. Цель здесь – создать цветовую вариацию (берутся схожие оттенки) по маске мелких точек или небольших пятен. Первый слой – совсем мелкий шум, затем – пятна среднего размера и последний – крупные пятна. Чтобы уменьшить количество маски, можно сверху поставить фильтр histogram scan. Похожую конструкцию из слоев можно сделать для канала roughness, если требуется.
После того, как базовый материал создан начинается работа над износом. Тут используются и мелкие царапины, и обшарпанные углы, и подтеки ржавчины или краски, небольшие дырки и прочее. Принцип здесь такой: стараться делать износ там, где он имеет место быть и убирать его оттуда, где его быть не должно. Поэтому, я часто добавляю сверху всех процедурных генераторов и фильтров к маске paint-слой. С помощью него, я вручную довожу износ до желаемого уровня. Для мелких царапин или пятен я добавляю пустой слой с фильтром sharpen. Небольшой износ он делает более реалистичным и выделяет его на фоне крупного. Последним слоем в папке wear&tear идет слой с пылью.

11.jpg

Существует огромное количество способов добиться одного и того же результата в substance painter. Можно использовать различные сочетания генераторов и фильтров или рисовать маски от руки. Оптимальным для меня стало совмещение этих способов, а благодаря планшету, все это делать становится гораздо удобнее. Именно таким образом были, в том числе, нарисованы потеки краски и крови на рукоятке.
Еще один важный момент – фактура материала. Если это металл, то я добавляю контрастную карту в канал roughness. Для всего остального – различные карты в канал height. На рукоятке есть потеки краски, которые имеют небольшую положительную величину height, а потертости с краев – отрицательную. Также стоит помнить, что если на модели есть затертый угол или бок, то в этом месте, скорее всего фактурная рельефность будет меньше, или вообще отсутствовать.

12.jpg

Плавный переход цвета на кожухе – градиентные маски 3d distance. Кровь – это два идентичных слоя (различаются только масками) fill layer, c бардовым цветом, небольшими параметрами roughness и height. Вариация цвета создана за счет карты bnw spots 2, примененной к слою (add fill) в режиме наложения overlay. Первый слой – большие скопления крови на лезвии, второй – мелкие брызги на лезвии и рукояти. Обе маски представляют из себя генератор mask editor и слой paint.
После того, как с текстурингом закончено, я перехожу в режим Rendering, включаю пост-эффекты, антиалиасинг, тени, и если результат меня устраивает, перехожу к экспорту текстур в Marmoset.
Параметры экспорта: config: document channels + normal+ Ao. На выходе имеем карты: base color, height, metallic, mixed ao, normal, normal directX, roughness.

Rendering

Для рендеринга я использую Marmoset Toolbag 3. Тут все также, довольно просто, но в зависимости от положения камеры, некоторые параметры приходится периодически менять.
Настройки для рендера, которые я обычно меняю:

14.jpg

Сразу после того, как все карты помещены в соответствующие слоты, я подбираю карту неба (sky preset: indoor fluorescent – была использована в работе) и перехожу к настройкам самого рендера. Чтобы текстуры выглядели более детально, следует отключить параметр mipmaps. Параметр occlusion strength подбираю на глаз, также, как и brightness и voxel scene fit. Затем, начинаю добавлять источники света в сцену прям в окне light editor. Много ИС не бывает, поэтому их количество может доходить до 20 и более. Главное – подчеркнуть бликами силуэт модели. В настройках камеры, редактирую кривую, делая изображение более контрастным (curves), добавляю chromatic aberration с небольшим значением, и dof, если нужно.
Итоговые изображения получаю в формате png, разрешение более 3000-4000 пикселей по малой стороне. Sampling ставлю не ниже 100х, transparency – включено.
В Photoshop’е никакой пост-обработки не делаю, лишь добавляю фон и свои контакты.

15.jpg

Работа заняла порядка 5 дней. В основном, это конечно же текстурирование и моделирование блокаута.

228909.jpg

228910.jpg

228916.jpg

Благодарю всех, кто дочитал до конца! Надеюсь, статья была вам полезна.

813 0 850 19
7
2019-02-19
Спасибо за пост! Было легко и интересно читать.
2019-02-21
В очередной раз убеждаюсь - ребята из Тулы умеют делать крутые пушки)
2019-02-22
очень, круто!

как вам удалось так корректно перенести текстуры из Substance Painter в max?

При стандартном экспорте и установки текстур в материал, так корректно не получается - даже если выкручивать настройки color correct и output.

Спасибо.
2019-02-25
Maxim Zheleznyak (core.nod)очень, круто!

как вам удалось так корректно перенести текстуры из Substance Painter в max?

При стандартном экспорте и установки текстур в материал, так корректно не получается - даже если выкручивать настройки color correct и output.

Спасибо.
Ну, во-первых в мармосет, а не в макс. А во-вторых, тут нет никаких премудростей - экспорт по дефолту (Document channels + Normal + AO (no alpha), png 8 bit. А в мармосете уже устанавливаешь свет, как тебе нужно. Скорее всего, достаточно будет изменить кривую в Curves, а остальное - опционально.
Поэтому не стоит искать скрытый смысл там, где его нет))

Если принципиально важно соответствие, но ты не можешь его добиться (или тебе кажется, что не можешь) - советую попробовать color-профиль Aces. Для substance painter его можно скачать здесь https://www.artstation.com/artwork/mrqd8
А в мармосете, начиная с версии 3.05 он уже предустановлен. Это не значит, что все будет идентично, не стоит забывать про карту освещения, но цветовой профиль совпадет. Вот пример: https://www.artstation.com/artwork/Dxvx1n
2019-03-09
Круто, спасибо за статью.
2019-06-05
Добрый день. Спасибо за статью, очень помогла в работе.
На artstation случайно увидел этот шотган
https://www.artstation.com/artwork/58bNaE
У вас случайно его не "позаимствовал" этот товарищ из Индии?
2019-12-26
Вопрос Александру Шейнину.
скажите; Вы перечисли программы, кот использовали для создания данной модели;
3ds Max 2018
Zbrush 2018
Unfold3D VS 2018
Substance Painter
Marmoset Toolbag 3
Adobe Photoshop CC 2017, PureRef
Скажите пожалуйста, они все платные? Сколько стоят
RENDER.RU