Как стать автором
Обновить

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

Время на прочтение5 мин
Количество просмотров49K


Как то я слушал подкаст, в котором вскользь говорилось о написании шейдера для жука (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
  • Альфа канал — карта смещений

Итоговая карта стала выглядеть так:



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



Ссылки


Теги:
Хабы:
Всего голосов 86: ↑80 и ↓6+74
Комментарии50

Публикации

Истории

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань