Моделирование жука

в 15:47, , рубрики: Baking, beetle, game development, Mudbox, photoshop, Realtime, TopoGun, UVLayout, xNormal, Zbrush, Анимация и 3D графика, жук

Моделирование жука

Как то я слушал подкаст, в котором вскользь говорилось о написании шейдера для жука (25 минута, 35 секунда), имитирующего радужную поверхность (не знаю как сказать это по-русски, но в английском языке есть термин — iridescence). Я посмотрел этого персонажа и мне захотелось написать свой шейдер, но имитирующий более реальную поверхность хитина, о нем я расскажу в следующей статье.
Однако возникла проблема — у меня не было подходящей модели жука.

Сначала я поискал модели в интернете, но у бесплатных не устраивало качество, а у платных была слишком высокая цена (~50$), тем более, нужной модели вообще не было. В общем я решил сделать своего жука, поэтому опишу тот пайплайн, который я составил для себя.

  1. Поиск референсов
  2. Моделирование high poly модели
  3. Ретопология в low poly
  4. Создание текстурных координат (развертка)
  5. Запекание нормалей
  6. Запекание ambient occlusion
  7. Добавление карты смещений для определения цвета в шейдере (об этом позже)

Разумеется пайплайны могут быть разными, например, в этом могли бы присутствовать такие пункты, как «создание концепта» или «риггинг персонажа». Их нет, потому что в роли концепта у меня были рефы реальных жуков и модель не планировалась быть анимированной. В более серьезных моделях так же бывает промежуточная ретопология high poly моделей. Для разных задач в разных компаниях используется свой пайплайн.

Референсы

Из всех жуков мне больше всего понравилась своим окрасом хризолина, а точнее подвид chrysolina herbacea. Этот жук имеет красивую, яркую радужную окраску, посмотрите сами:

Моделирование жука

Поэтому я нагуглил как можно больше картинок и слил их все в одну. Так же для лучшего понимания строения могут пригодиться модели других жуков. В итоге получилась такая картинка, которая маячила на втором мониторе почти все время создания жука (кликабельно):
Моделирование жука

Моделирование high poly модели

В основном скульптинг я производил в ZBrush, начал с панцирей, каждый объект вылепливал из сферы:

Моделирование жука

В процессе скульптинга можно столкнуться с одной проблемой — вдавливая участок на поверхности — она выдавливается с другой стороны, что иногда бывает неудобно или вообще не нужно, чтобы этого не происходило нужно включить опцию BackfaceMask в подменю Auto Masking меню Brush.
Так же может быть полезна опция Lazy Mouse в меню Stroke — если ее включить, трекинг кисти будет усредняться, что позволит избежать ненужного дрожания и проводить более сглаженные линии. Параметр LazyRadius меняет степень сглаживания.
В ZBrush есть одна классная опция, которая помогает избежать некоторых проблем с сеткой — DynaMesh. По сути она перестраивает измененный участок сетки, адаптируя ее под геометрию. Некоторые недолюбливают ее, из-за того что после применения этого модификатора, сетка получается некрасивой, иногда она слегка ломает геометрию, но для моих нужд она мне подошла весьма кстати. Альтернативный вариант этой опции — постепенно повышать сабдивы модели и изредка производить ретопологию.
Моделирование жука
BackfaceMask, Lazy Mouse и DynaMesh

Постепенно добавлялись новые части и повышалась детализация:
Моделирование жука

Отдельно стоит рассказать про глаза. У жуков фасеточные глаза, они состоят из множества полусфер, можно заметить, что располагаются они как бы по гексагональной сетке:
Моделирование жука

Мне показалось, что проще всего их будет смоделить в 3D Max, делал их я примерно так:
сначала нужно создать GeoSphere, задать нужное количество сегментов и конвертировать в редактируемую полигональную сетку:
Моделирование жука

далее выделяем все ребра и нажимаем на кнопку Chamfer, а точнее на кнопку рядом с ней — откроются поля с настройками. Подбираем параметры, чтобы получилось примерно как на скриншоте ниже:
Моделирование жука

теперь выделяем все вершины и выбираем Weld, настраиваем так, чтобы все вершины в узловых точках слились в одну:
Моделирование жука

выделяем все полигоны и применяем Bevel, выдавить их нужно примерно на высоту равную размеру ячейки, и чуть-чуть расширить:
Моделирование жука

один раз нажимаем на кнопку Tesselate, чтобы добавить полигонов:
Моделирование жука

и наконец, применяем модификатор TurboSmooth, мне хватило двух итераций, чтобы получить более-менее сглаженный вариант:
Моделирование жука

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

Ретопология в low poly

Несмотря на то, что в ZBrush есть свои инструменты для ретопологии, ее я проводил в TopoGun, так как по мне там ее проводить удобнее на порядок. Там есть очень удобный инструмент для сглаживания — можно сделать довольно крупную сетку, потом применить его. Эта сетка разобьется на заданное количество сабдивов, причем новые вершины будут располагаться на высокополигональной модели:
Моделирование жука

Опять же отдельно глаза — так как это по сути сферы, то в качестве лоу поли сетки я взял обыкновенные сферы и обрезал у них невидимую часть.
В результате ретопологии получилась модель в 60к полигонов. Это, конечно, не совсем лоу поли, но для сцены состоящей только из одного объекта нормально.
Моделирование жука
low poly модель

Создание текстурных координат

Развертку я делал в UVLayout — довольно удобная программа, основанная на хоткеях, работает быстро и наглядно, особенно нравится то, как она показывает цветом растяжение/сжатие полигонов.
Моделирование жука

Нарезая модель следует делать как можно меньше швов, но в тоже время стараться слишком не растягивать полигоны. Так как у меня не будет диффузной текстуры, швы могут проявиться только в рельефе (при нормал маппинге), на карте смещений и окклюжена они будут не заметны. Меня больше заботило отсутствие перекосов полигонов, поэтому швов получилось довольно много.
Когда для всех моделей была готова развертка, я импортировал их в 3D Max, чтобы отрегулировать относительный размер развертки. Это довольно важный шаг, так как позволяет повысить детализацию особо важных участков без увеличения текстуры. Так, например, развертку пуза жука я намеренно уменьшил, а головы — наоборот увеличил. В конечном итоге я воспользовался стандартным упаковщиком модификатора Unwrap UVW, и получил вот такую развертку всей модели:
Моделирование жука

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

Запекание нормалей

Карту нормалей составлял в xNormal — довольно своеобразная программа с «интересным» интерфейсом. Оффтопик, вообще, если честно удивляет то, что все программы связанные с графикой имеют свой неповторимый интерфейс, разобраться в котором порой сложно даже с инструкцией, которую еще попробуй найди. Хотя если какое то время попользоваться ею, то привыкаешь и кажется даже удобно. Но это лишь мое мнение.
Моделирование жука

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

Запекание ambient occlusion

AO просчитывал в Maya рендер-движком Mental Ray (в 3D Max с ним были какие то проблемы, а xNormal с полным списком моделей немного косячил, считал довольно долго и сам по себе имеет мало настроек)
Моделирование жука

Добавление карты смещений

Если присмотреться, то заметно, что у настоящего жука есть места, которые отличаются цветом, нечто вроде пятен на голове и панцире:
Моделирование жука

Чтобы обозначить эти места, я вручную нарисовал в MudBox на отдельном слое черно-белые пятна. В последствии их я буду использовать в шейдере, чтобы смещать одну из составляющих цвета:
Моделирование жука

В итоге получилось три карты, все их можно упаковать в одну текстуру следующим образом:

  • Красный и зеленый каналы — карта нормалей
  • Синий канал — ambient occlusion
  • Альфа канал — карта смещений

Итоговая карта стала выглядеть так :)
Моделирование жука

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

Ссылки

Автор: Torvald3d

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js