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



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

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



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



    Ссылки


    Support the author
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 50

      0
      Я думал, что первая фотка — это уже рендер. До чего дошла техника, даже никаких сомнений не было.
        +33
        Приоткрою немного завесу тайны:


        снизу фото, сверху — так выглядит готовый шейдер для жука, про него я на данный момент пишу статью.
          +15
          Да Вам, батенька, нужно в LA ехать, киношки рисовать. Такая проработка деталей, просто супер.
            0
            На самом деле, в кино самое сложное это анимация. Не умаляя заслуги автора, модель действительно качественная, без умения анимировать и делать риги, в киношные студии не попасть.
              0
              В индустрии (особенно в кино) анимацию делают не моделлеры (как правило). Умение анимировать и делать риги нужны соответственно аниматорам и риггерам.
                0
                И да и нет. Для создания модели подходящей для анимации, нужен опыт анимирования. Проблем с искажениями и переломами моделей море. Тоже самое для риггинга. Вы можете делать отлично выглядящие модели, но аниматор сломает себе об нее руки. В студиях переодически делают ротацию, для поддержания квалификации, на некритичных элементах проекта.
          • UFO just landed and posted this here
              +2
              Ну а как по мне — жук сразу выглядит неестественно из-за усиков и лапок — у жуков они никогда не бывают полностью гладкими. Даже у жуков с блестящим хитином на лапках, на них есть еще шипы и крючки. То же самое с ротовым аппаратом, особенно у второго жука это хорошо заметно.
                0
                Если отойти от монитора на полметра, разницу вообще не видно. А вот если сидеть рядом, всё ещё чувствуется, что не хватает совсем мелких деталей: потёртостей на панцире, ворсинок на лапках, ротового аппарата.
            +6
            С трудом верится, что это делал «не моделлер и не художник». Не в том смысле, что у меня есть основания для сомнений, а в том, что сделано, на мой непритязательный вкус, просто отлично.
              +1
              Потрясающе!
              Добавьте пылинок и мусора — понимаю, это еще один слой, ну или объекты/спрайты уже на сцене.
                0
                не знаю как сказать это по-русски, но в английском языке есть термин — iridescence

                Иризация?
                  0
                  переливчатость
                    0
                    радужность; переливчатость; игра цветов; игра воображения; сияние; блеск; авантюресценция (радужная окраска); иризация (оптический эффект, связанный с интерференцией света; наблюдается в опале, Лабрадоре, лунном камне)

                    www.multitran.ru/c/m.exe?CL=1&s=iridescence&l1=1

                    ну, хватит уже :P
                  +5
                  Если вы хотели добиться неровности на поверхности жука как на картинке, то стоило бы подумать над картой Celular и Noise причем в миксе (речь о 3ds max). Можно былобы легко применить её. А так похоже на мятое железо или неровный камень.
                  С глазами таже история.
                  Скажу ещё что в 3ds Max нет никаких проблем с запеканием АО. С созданием карт нормалей и развертки тоже.
                  Кол-во программ использованых для одной лоуполи модели зашкаливает. Я просто непонял для чего они все… Если все это можно было сделать в одном лишь Максе или Майе. В том числе и скульптинг если он действительно тут был нужен.
                  Конечно каждому своё… Но я действительно не понял… Проработал 3 года в компании которая занимается созданием vfx и вт том числе немного играми.

                  Еще не пойму логигу, если вы пихаете 60к модель в движок ради одной только сцены, то зачем печь ао вообще? Можно же включить его нативно, современные движки его поддерживают, тот же unity.

                  Понимаю что в статье написано своё ИМХО

                  Но всетаки подумайте о том, чтобы изучить одну программу типа Maya, Max, Blender хотябы на уровне базовых функций. И тогда не потребуется обилие сторонних програм и плагинов.
                    +1
                    Много программ — потому что они есть, художники и моделлеры с ними работают, программисту желательно знать и о их существовании и для чего они нужны как минимум для лучшего понимания и общения с художником или моделлером. То есть статья описана с точки зрения программиста и цель ее — лучше понимать людей, которые создают контент для игр, так сказать побывать в их шкуре.
                    Макс вряд ли выдержал бы такой полигонаж с которым я работал в збраше, вообще макс и збраш довольно сильно отличаются как инструменты.
                    АО печь затем, что его риалтаймовая реализация как правило хуже, а так как объект статичный то почему бы и не запечь? Опять же статья про ссао у меня есть, а про то как запекается и используется ао нет.
                    На счет мятого железа — действительно мой косяк, про процедурные карты тоже можно было бы подумать, но мне интересно было лепить в збраше.
                    Спасибо за отзыв
                      +1
                      60к полигонов многовато для игрушки и совсем недостаточно для презентации. Я бы упростил оригинальную модель так, что-бы ямки на панцире были из 4-6 полигонов. А про железо, возможно дело еще в низком разрешении текстуры, попробуйте перезапечь в 2-4 раза больше. Добавте источник тени, ее отсутсвие сильно выдает. И вокруг жука есть какое то странное гало, от него тоже реализм страдает.
                      Кстати, у жучков на брюхе поверхность менее блестящая, а на рендере там мессиво из периливаний.
                        0
                        В ямках (мятое железо) виновато не разрешение текстуры, а мои кривые руки, 4к текстуры более чем достаточно. А в остальном все верно подметили
                        +1
                        Я не спорю что Макс и Збраш отличаются как инструменты. Просто в конкретном случае можно было бы обойтись и без него. А что касается кучи програм которыми пользуются художники и моделлеры, дак что теперь программису нужно изучать их все сразу? Для понимания процесса и хватит одной, работают они все одинакого практически. Другой вопрос если этого хотелось вам попробывать кучу инструментов разных.
                        В последнем максе есть инструменты для работы с огромным числом полигонов. Конечно не спорю что Збраш для скульпта лучше. Но не думаю что вам нужно было в случае жука обрабатывать около 5 милионов полигонов. Оно незачем и не стоит того.

                        По поводу глаз захотелось написать… Зачем их было делать геометрией вообще? Там в одних глазах только тысяч по 10 треугольников. Неужели нельзя было обойтись картой с нормалями. Причем можно было эту саму карту нарисовать за 4,5 минуты, а можно было запечь из вашего же глаза.

                        Экономнее же получается. + Есть возможность редактировать колличество многоугольников глаза. Тайлить до потери сознания.

                        image

                          0
                          Изначально я так и делал, вот даже паттерн остался:

                          Но мне не понравился этот подход из-за того, что на экваторе сферы ячейки получаются крупными, а на полюсах наоборот, мелкими. Подобрать нормальную развертку для такого тайлинга у меня не получилось, поэтому особо не заморачиваясь наплодил кучу полигонов.
                            0
                            Дак смотрите, вы сделали геометрию в максе для глаза, после чего можете сделать для нее любую стандартную развертку, например кубом. Есть геометрия, есть развертка. Все что вам осталось, запеч геометрию в текстуру по этой развертке, а потом накинуть эту текстуру на объект более простой. Такая функция в максе есть. И не будет никаких искажений.
                              0
                              Но ведь геометрия для глаза — это и есть высокополигональная модель со всеми выпуклостями?
                              Все что вам осталось, запеч геометрию в текстуру по этой развертке, а потом накинуть эту текстуру на объект.

                              Что я и сделал, текстура с нормалмаппом в статье.
                              Или я вас неправильно понял, можно подробнее?
                                0
                                Извиняюсь. Незаметил ваших запеченых глаз… Показалось что оставили глаза геометрией.
                                Просто не пойму почему глаза плохо выглядят.
                                  0
                                  Плохо выглядят на рендере вначале и конце статьи или плохо выглядят на рендере шейдером (в цвете)?
                                  В первом случае — это стандартный максовый сканлайн. Во втором случае глаза сазаны из-за мипов. Вот крупный план:
                                  image
                                    +1
                                    А понял в чем дело. Скорее всего изза масштаба сот, их нужно было делать крупнее + делать карту отражений для глаза, тогда каждая ячейка будет бликовать, и будет впечатление сложного рисунка глаза. А так на картинках у вас они черные, как будто просто темный шейд.
                                    На самом же деле у них есть доля отражений.
                                      0
                                      Да, у них есть доля отражений:
                                      image
                                      Просто у той карты окружения источник света не очень ярко выражен
                                      image
                                      а масштаб сот у них действительно мелкий, из-за чего смазывается мипами. Вот реальное фото:
                                      image
                                        0
                                        Возможно из-за этого. Всетаки сетка должна быть крупнее… У тех жуков что на фото-референсах приведены у них покрупнее будут, может поэтому. Вблизи гораздо лучше смотрится видимо из-за различимости рисунка.

                                        #Черные глаза… Вспоми…
                                        0
                                        Но согласен, можно было бы сделать покрупнее или применить какой нибудь хак, чтобы бликовали лучше. На фото выглядят более рельефными
                                          0
                                          Размер самого блика глаз у жуков на фото, ещё более обширный… т.е к примеру у них половина глаза освещена, а на вашей картинке 1/3. Может это из-за карты отражений, может из-за света.
                              0
                              >>В последнем максе есть инструменты для работы с огромным числом полигонов.
                              Это какие инструменты?
                                0
                                Извиняюсь за не точность. Хотел сказать что Макс переварит в легкую 10 милионов полигонов, если мешь будет цельный. Темболее что последняя версия вьюпорта с нитросом работает неплохо. В основном макс глючит когда не много полигонов, а когда много объектов.

                                А что касается конкретно редактирования модели, дак посмотрите на стандартные инструменты вроде обычного эдитора. как при выделении нескольких полигонов оно все глючит и попробуйте их еще и подвигать (при нескольких миллионах полей). Воспользуйтесь например инструментом Shift с новой панели Graphite tool, при этом вам нет необходимости, переходить на уровень полигонов и вьюпорт «летает», покрайней мере у меня, хотя я бы не сказал что у меня сверхмощная видеокарта стоит. С каждой версиеей Макса эти инструменты начинают работать немного лучше. Конкретно я пользовался 2014.
                                  0
                                  Забыл сказать что есть еще и gpoly.
                            0
                            Спасибо!
                            Очень интересно наблюдать за подобным процессом! C нетерпением жду следующую часть.
                              0
                              Поясните пожалуйста по xNormal. Чем он лучше встроенного в 3ds max инструмента?
                              Я сейчас пытаюсь собрать сцену на UE4, в документации тоже говориться о xNormal. Но меня дико утомляет экспортировать модель по частям и я не нашёл преимуществ перед 3ds max.
                                +1
                                Дело в том, что макс очень плохо переваривает большое количество полигонов, так что настраивать cage для модели довольно не удобно. В xNormal cage вообще просчитывается автоматически.
                                А полигонов у меня действительно много — несколько миллионов, хотя, возможно, не стоило столько делать… Так же не исключаю, что я просто плохо разобрался в максовом запекании нормалей. В общем xNormal мне показался шустрее.
                                  0
                                  Спасибо. Этот момент я упустил из виду.
                                0
                                Извиняюсь за оффтоп, но мне интересно — с какими характеристиками надо иметь машину, которая позволит комфортно работать с такими детальными моделями, и будет рендерить их за адекватное время? Я просто помню как рендерил небольшой примитивный диванчик в комнате — так его рендерило около часа, при моём core i3 и Nvidia GeForce 710m.
                                  0
                                  Мне было вполне комфортно на i7 870 2.93мГц, nVidia GTX560. Но на самом деле видеокарта в моем случае не играла практически никакой роли, дело в том что у ZBrush очень крутой софтварный рендер, скорость работы которого зависит от разрешения монитора, количества ядер процессора и его частоты (еще нужна обязательная поддержка SSE, но она есть у всех современных процессоров). Единственное — вращение модели в ZBrush подтормаживает на нескольких миллионах полигонов.
                                  TopoGun ускоряется видеокартой, но ретопологию я проводил по частям, так что проблем не возникло совсем. В 3D Max, Maya и MudBox я грузил только лоу поли модели.
                                  Что касается рендера, то запекание нормалей и ао длилось всего несколько минут. Как такового финального рендера модели я не производил — дальнейшее использование было только в риалтайме лоу поли модельки.
                                    0
                                    скорость работы которого зависит от разрешения монитора

                                    Это как?
                                      0
                                      Очень просто — больше пикселей отрисовывать, больше работы.
                                        0
                                        Это же рендер. Он рендерит картинку любого указанного разрешения вне зависимости от разрешения монитора. (Никто не мешает отрендерить fullhd-картинку, если у вас монитор 800x600).
                                          +1
                                          Речь идет о рендере (отрисовке на мониторе во время моделирования) модели в рабочем окне программы, а не специальной процедуре визуализации.
                                            0
                                            Osmandos, я понял — речь шла о реалтайм-рендере. Но тут скорее зависимость не от разрешения монитора, а от размеров окна.
                                              0
                                              Да, наверное, от размера окна. Просто в таких программах никто не работает не в полный экран :)
                                              Разрешение не слишком сильно влияет на производительность в 3d софте, в играх больше.
                                                0
                                                да, все верно, от разрешения вьюпорта. Неточно выразился
                                        0
                                        Время финального рендера сильно зависит от его настроек. Важно оптимизировать его. Бездумное включение опций приведёт к очень длительному рендеру без улучшения качества.
                                        В общем, это целая наука. Железо тут вторично, по моему мнению.
                                          0
                                          Можете смело моделить что угодно на этом железе. Делаете модель в Майе, Блендере или в чем нибудь еще, до момента когда модель выглядит хорошо (Для головы человека 1000-1500 полигонов к примеру, что-бы терпения хватило все вертексы руками несколько раз подергать), потом обрабатываете скульптором в 4-8 раз большим числом полигонов. Так вы делаете очень качественную модель с нормальным количеством полигонов и правильной топологией. Начинать модель в скульпторе неправильно и приводит к запредельному числу полигонов. Такие модели можно и для кино использовать и для презентаций на игровых движках.
                                            0
                                            Добавлю свои пять копеек. Для рендера критичен мощный многопоточный процессор, для моделирования — нет. Поэтому художнику персонажей, например, не нужен 8ми поточный i7, но он может пригодится при запекании карт — там есть поддержка многопоточности. В остальных случаях для работы с софтом необходим процессор наиболее быстрый в одном потоке, и скорее всего i5 и i7 в однопоточном режиме не будут сильно отличаться. (К сожалению, интел тут вне конкуренции) А вот в рендере пойдут все ресурсы. У меня был Core2Quad q6600, потом апгрейд до i7 3770k. Последний быстрее раза в 3-4 в рендере.
                                            0
                                            image
                                              0
                                              Хорошая работа. Особенно до лоуполи все вообще здорово. Но, лоуполи, конечно, совсем не лоупольная, да и развертка не совсем правильная. Но в целом очень хорошо получилось, учитывая что автор программист, насколько я понял.

                                              Я пеку амбиент в xnormal, не замечал там проблем, но считает долго, да.

                                              Only users with full accounts can post comments. Log in, please.