Making Of China Dragon
Всем доброго времени суток. Хочу поделиться с Вами процессом создания проекта Сhina Dragon.
Статья состоит из двух частей: в первой рассказано про цифровую часть (моделинг, скульптинг, рендер), во второй - про саму печать (подготовку и оптимизацию модели для печати, некоторые особенности настройки принтера и финальная покраска напечатанной модели.)
Начнем с небольшого предисловия: главной целью данного проекта было создание максимально детализированной модели под печать, и я не планирую в дальнейшем использовать её под анимацию или другие цели, поэтому над оптимизацией не заморачивался.
Итак, идею для проекта мне подкинул мой брат, у него появился свободный месяц, и он хотел запилить что-то масштабное на 3Д-принтере. За базовую идею решили взять китайского дракона, сидящего на классическом восточном здании (но четко не привязываться по стилистике к китайским ящерам).
Пошел процесс сбора референсов, часть из гугла, часть с артстейшена и пинтереста. Рефы раскидал по группам в PureRef: архитектура, базовые формы тела, головы, особое внимание попытался уделить анатомии (как ни странно, но существует достаточно много изображений и анатомических атласов внутреннего строения драконов разных видов).
Подборка референсов в PureRef
Базовый блокинг делал в Maya. Для здания накидал несколько кубов и цилиндров, для дракона использовал обычную curve (Curves/ EP Curve Tool), так как её удобнее редактировать налету, а затем уже преобразовывать в геометрию (Create/Sweep Mesh). Это проще и экономит много времени и нервов, намного лучше, чем пытаться лепить что-то сразу из геометрии. К тому же её можно преобразовать в кисть curve в Zbrush. Этот метод я покажу ниже.
Базовый блокинг в Maya
Вернемся к дому. Со зданием я решил сильно не заморачиваться, это будет не основной элемент композиции, поэтому с архитектурой не мудрил. Остановился на трех каскадах и круглой крышей со шпилем. Само здание выполняет роль храма, посвященного данной рептилии, так как это все у нас фэнтези и делается для красоты, поэтому изначально было решено не стремится к «историчности» и архитектурной правдоподобности. Дом начал с создания базовых форм в Maya, замоделил черепицу и крыши (сделал несколько видов с различным расположением лупов, но остановился на таком как на скриншоте ниже, в дальнейшем будет видно почему).
Основа для крыш
Теперь перемещаемся в Zbrush, основная работа происходила в нем. Недавно я открыл для себя USD export/import оказалась очень удобная вещь, можно экспортировать весь проект, а при импорте выбирать только те элементы сцены или объекты, которые тебе нужны (в Zbrush USD работает через встроенный плагин).
После импорта встал вопрос, как быстро и несильно муторно замостить скаты крыши шифером и черепицей. Вот метод, к которому я пришел:
-создаем новую кисть-кривую на основе шифера и черепицы, играемся с настройками расстояния между элементами (Curve Step), и включаем прилипание к поверхности (Snap);
Создание кривой
- при помощи Zmodeler инструментом Poly Group (режим выделения Poly loop) расчерчиваем, предварительно отрезанную, верхнюю часть крыши на поперечные разноцветные полоски; затем применим Frame Mesh с включённым Poly groups во вкладке Stroke/Curve Functions и подбирая масштаб размером кисти просто кликаем на появившиеся линии кривых. Удаляем кривые и отделяем черепицу в отдельный сабтул, удаляем лишнее, дублируем, поворачиваем. Также можно добавить немного вариативности в расположение отдельных черепиц (Poly groups /Auto groups и с зажатым контролом в режиме гизмы кликаем на нужный элемент, а затем крутим как хотим).
Наложение черепицы на крышу
- повторяем тоже самое для продольной черепицы.
Правда иногда в Zbrush происходит странная вещь, то ли это баг, толи фича, одна из кривых меняет свое направление на противоположное. Я просто разворачивал черепицу вручную в этих местах.
Затем добавил детализации очень быстрым способом:
-лучше будет, если изначально геометрия имеет более равномерную сетку, но можно это сделать и позже с помощью ZRemesher с включённым KeepCreases, предварительно накинув crease с небольшим углом 30-45°;
- нужно отделить основные плоскости от боковых и
применить к ним разные шумы, чтобы получить более интересный результат. Применяем Polygroups /Groups By Normals (подбираем нужный угол);
- чтобы шум лег равномерно, без потяжек, необходимо положить его по UV. Делаем ленивую развертку по полигруппам Zplugin/ UV Master (отключаем Symmetry, включаем Polygroups)/ Unwrap;
- накидываем пару сабдивов, включаем Morph Target/StoreMT, он понадобится в дальнейшем для добавления разнообразия шуму;
- маскируем нужные полигруппы и сглаживаем маску, применяем на своё усмотрение какой-то из шумов LightBox/Noise, открываем NoiseMaker во вкладке Surface, выбираем режим проецирования UV и там же настраиваем масштаб и интенсивность шума, применяем, инвертируем маску, применяем более агрессивный шум на грани. Для плоскостей я использовал что-то похожее на асфальт Noise05, для граней использовал Noise09, чтобы получить сколы на краях.
- выбираем кисть Morph (можно включить альфу с жёсткими краями) проходимся в рандомных местах, тем самым добавляя разнообразия на поверхность или полностью приводим геометрию в первоначальное состояние, где это необходимо;
- наносим вручную крупные повреждения используя альфа кисти (для трещин я использовал пак DP-20 Zbrushes), а также прошёлся по граням кистями Clay и Flatten.
Проработка черепицы
Бетонные основания крыш вначале пересчитал ZRemesher-ром, по граням прошёлся кистями Clay и Flatten, для узоров использовал кисть DecoCurveDrag, по поверхности прошелся альфа кистями из паков (Jonas Ronnegard, DP-20Zbrushes), чередуя их слоями с кистью Morph. Чтобы трещины выглядели более интересно при помощи Morph усиливаем их на выступающих краях и наоборот немного убираем во впадинах.
Проработка крыши
Также заскульптил каменные драконьи головы на углах нижнего яруса. Создал одну как отдельный сабтул, а затем размножил с поворотом на 90 градусов относительно крыши, стыки скрыла черепица.
Каменные драконьи головы
Таким же методом сделал другие бетонные и деревянные элементы. Для бетона использовал кисти из тех же паков, структуру дерева накладывал слоями чередуя кисти из набора Zbrush Wood и Wood Surface с кисточкой Morph на которую также применял разные альфы.
Процесс создания древесины
Таким методом можно добиваться очень реалистичных поверхностей, особенно если не жалеть времени и использовать множество различных альф. Если объект тонкий, в параметрах кисти можно включать BackfaceMask (Brush/Auto Masking/BackfaceMask), чтобы в конце не получить сюрпризов на обратной стороне моделей. Но желательно отключать этот режим, когда начинаете работать над более мелкой детализацией, кисти могут вести себя некорректно при наложении на уже сильно деформированную поверхность.
Основные элементы для сборки храма
Следующим этапом необходимо было собрать все вместе. Собирал все в Zbrush, так как использовались хайпольки, хоть я и не везде брал самый высокий сабдив, ориентируясь на масштаб и расположение элемента, в финале все равно получилось около 250 мил. полигонов, кроме браша нормально это вывозить другие проги навряд ли смогли бы (при этом использовалась вся доступная оперативная память из 24 Gb общей).
Про подготовку здания к печати расскажу в следующей части.
Храм в сборе
А теперь прейдем к Дракону.
У меня уже была попытка в скульптинг летающего ящера, но на мой взгляд результат получился неудовлетворительный. Поэтому я прекрасно понимал, что нужно начинать с правильной анатомии, иначе к финалу получится полная каша и ужасный общий силуэт. Лучше подольше поработать над базой и перепробовать разные варианты, чем пытаться потом на этапе детализации что-то менять. И самое главное, на мой взгляд, это разбивать модель на уровни по детализации, и не переходить на следующий пока досконально не проработаете текущий, а не метаться туда-сюда. Это занимает много времени, но оно того стоит. Может с набором опыта и удастся халявить в некоторых местах, но до этого лучше стараться прорабатывать все основные элементы как можно более усердно.
Начал с головы. В Zbrush есть скелет дракона, он лежит в Light Box/Brush/Insert IMM/IMM Dragon Bones, взял оттуда череп и, используя его в качестве основания, заскульптил вокруг несколько вариантов голов. Использовал в основном кисти Clay, Clay Builup, Dam Standart с включенным режимом Sculptris Pro Mode, для рогов применил кисти Snake Hook и Dam Standart.
Вариации основы для голов
Всегда держал открытыми на втором мониторе анатомические выкладки по драконам.
Анатомические референсы
Остановившись на одном из перепробованных вариантов, начал более детально его прорабатывать, опираясь на референсы.
Проработка головы
Когда основа меня устраила, сделал инсерт кисти шипов и зубов, применил их на поверхность. Для оптимизации объединил все инсерт объекты в один сабтул, продублировал, пересчитал zRemesher-ром, продивайдил и спроджектил (Project/ ProjectAll) на них верхний сабтул, который после удалил. Так мы получаем одинаковую плотность сетки на элементах разного первоначального разрешения.
Нанесение Insert-кистей
Теперь пришло время для тушки, как я говорил выше, положение тела я задал в Maya кривой. Сейчас расскажу, как я переносил её в Zbrush:
- в Maya создаем геометрию вокруг кривой с очень маленьким радиусом (Create/Sweep Mesh);
- переносим геометрию в Zbrush и при помощи ZModeler присваиваем одной продольной грани Crease в режиме EdgeLoop Partial;
- Stroke/Curve Functions создаем кривую вдоль неё Frame Mesh (Creased edges), обычной кистью curv кликаем по ней предварительно настроив необходимую толщину разных участков в Stroke/Curve Modifiers с включенным параметром Size;
- удаляем изначальную геометрию и кривую, а положение получившегося тела можем отредактировать кистями move и anchors. Для оптимизации и удобства работы я разделил туловище на отдельные элементы и работал с ними по очереди.
Перенос кривой из Maya в Zbrush
Затем перешел к созданию конечностей. Сначала хотел поступить также как с головой (натянуть базовую форму на кости), но потом отказался от этой идеи из-за сильного расхождения в пропорциях. Вначале задал базовые мышцы сферами, затем Desimate и, опираясь на референсы, начал слой за слоем их прорабатывать.
Проработка конечностей
Проработка туловища
После встал вопрос, как наиболее удобно разместить шипы и гребень на спине. В итоге шипы это InsertMesh - Curve с большим расстоянием между объектами с настроенной кривой Stroke/Curve Modifiers, с включенным параметром Size. А с гребнем поступил также как с основным телом: Duplicate туловище, Merge, DynaMesh (для слияния отдельных элементов), Zremesher, отрезал начало и конец, ZModeler/ Crease в режиме EdgeLoop Partial, Stroke/Curve Functions создаем кривую вдоль неё Frame Mesh (Creased edges), кистью CurveStrapSnap кликаем по ней предварительно настроив необходимую толщину разных участков в Stroke/Curve Modifiers с включенным параметром Size, с зажатым контролом, чтобы кривая встала перпендикулярно геометрии, а затем её дальнейшая проработка ручками.
Создание гребня
Затем наступил черёд мелкой детализации. Опять вернулся к голове. Альфа кисти использовал из пака CGSphere Dragon, но сильно переделав их, а то первоначальный вариант был очень тяжёлый для компа и не подходил по стилю.
Основные альфа-кисти для мелкой детализации
Сначала наносил большие пластинки, а затем забивал пространство между ними более мелкой чешуёй, если где-то альфы накладывались друг на друга, убирал лишнее кистью морф и дальнейшая мелкая проработка кистью Clay с квадратной альфой. Места крепления рогов проработал кистями Slash3, Blob. Затем такими же методами сделал нижнюю часть головы.
Детализация головы
Пришло время заняться рогами, для референсов решил использовать арты Лилит из Diablo (она как раз тогда была в тренде). Базовые формы «волны» сделал кистью Slash 2, для проработки использовал Clay и Flatten, в конце решил нанести царапины. Их взял из пака Orb Brush и применил морф по такому же принципу, как и с трещинами на крыше (уменьшил интенсивность во впадинах, увеличил на выступающих частях).
Детализация рогов
Как вы могли заметить, я осознано не использовал симметрию на высоких уровнях детализации, это позволяет немного выиграть в оптимизации при нанесении тяжёлых альф. Чтобы не делать двойную работу возвращаем симметрию, для этого удалил все нижние сабтулы, применил Mirror, продублировал голову, одну из копий пересчитал ZRemesher-ром и через ProjectAll вернул детализацию. Также потом проработал место где был шов симметрии, чтобы скрыть его.
Та же методика на всем остальном драконе, правда уже без симметрии, везде кроме лап. Финальное положение конечностям я задал с помощью масок и инструмента Proxy Pose, это что-то похожее по принципу работы на Decimation Master (очень сильно упрощает геометрию, триангулируя её), но с возможностью вернуться к первоначальному состоянию детализации после выставления в позу.
FULL END
На этом с цифровой частью было почти закончено, дальше только подготовка и сама печать, но об этом я расскажу в следующей части. Вот несколько фото для подогрева интереса:
Но я хотел бы вкратце рассказать про рендер цифровой модели в Marmoset. Ведь красиво показать цифровую модель тоже необходимо. Рендерить решил в Мармосете, так как в Keyshot мне не нравится работать со светом, а заморачиваться с долгими подстройками Redshift в Maya на тот момент у меня не было желания (возможно позже отрендерю с окружением).
В процессе подготовки модели нет ничего необычного. Для оптимизации решил не рендерить хайпольку. За лоуполь модель просто взял первые дивайды всех сабтулов; развертка - RizomUV (дулам сделать автоанрап, но адекватного результата так и не добившись, пришлось немного порезать ручками). Запечка в Мармосете, запек следующие карты: AO, Cavity, Curve, Normal, Thickness. Когда начал собирать сцену для рендера целиком, столкнулся с ужасными лагами из-за недостатка VRam (рендерилось на GTX 1060 – 3Gb). И тут начался поиск оптимизона и компромиссов. Очень помог вот этот топик на форуме https://polycount.com/discussion/230792/marmoset-4043-low-vram-usage. Но выделю те методы, которыми я пользовался в своем проекте:
- Уменьшил разрядность всех текстур, кроме нормалки, с 16 до 8 bit;
- Для настройки сцены использовал тип видового экрана «Draft Quality», а режим «Full Quality» включал только в конце при финальной настройке;
- В настройках текстур отключал Mipmaps («метод текстурирования, использующий несколько копий одной текстуры с разной детализацией», по логике, включение Mipmaps должно ускорять рендер, но в моем случае это приводило к переполнению буфера видеопамяти);
- Использовал денойзер CPU вместо GPU.
А вообще меня спас один лайфхак. Логика такова – больше всего VRam потребляют две вещи, разрещение и количество текстур. Раз мы не можем уменьшать разрешение без потери финального качества, значит надо уменьшать количество текстур, и я решил действовать на примере паковки текстурных карт для Unreal Engine (карты АО, Rougness, Metallic записываются в разные каналы одной текстуры). Придерживаясь такой логики, я вставил в разные каналы Cavity, Curve и AO карты для каждой из разверток, но не стал останавливаться на этом и создал текстуру, в которой в разных каналах лежали Thicknes карты от разных разверток. И таким способом мне удалось снизить общее количество текстурных карт в четыре раза. Моей видеокарте это понравилось и можно было спокойно работать дальше.
По настройке материалов. Загружаем нужные нам текстуры и выбираем соответствующие каналы. Немного поигравшись с SSS, решил использовать в нем свою смешанную текстуру - это давало очень интересный эффект подповерхностного распределения света. По настройкам света использовал обычную трехточечную систему, только добавил два контурных источника света (один подсвечивает модель снизу, второй сверху) и отдельный источник, который использовал только для добавления бликов, модель он не освещал.
Рендер в Marmoset toolbag
При финальном рендере каждый источник света отрендерил отдельно, а затем собирал все в фотошопе. Это дает гораздо больше контроля на выходе и позволяет не делать десятки промежуточных рендеров для мелкой подстройки (если кому-то интересно как я собирал все в фотошопе дайте знать).
Финальная сборка в Photoshop
И на этом у меня ВСЁ! В сумме на модель ушло около 200 часов.
Ещё больше рендеров по Ссылке https://www.artstation.com/artwork/DvWJXo ; https://render.ru/ru/gallery/artwork/235351
P.S. Мое железо:
CPU: AMD FX 8300 (overclock core 4.2 GHz)
RAM: 24 Gb (overclock 2133 MHz)
Motherboard: Asus M5A97R2
GPU: Gigabyte GTX 1060 – 3Gb
SSD: Kingston 500 Gb (Sata III)
HDD: WD Green 1 Tb
Планшет: Wacom CTL-671
P.S. 2: Кому нужен файл модели для печати обращайтесь в личку.