1 Уроки Lightwaves 3D Создание низкополигонального персонажа 1/4 Пн Окт 04, 2010 9:38 pm
Admin
Admin
© Paul Tosca 2006-2007, www.paultosca.com. Оригинал статьи находится здесь. Перевод Акжола Абдулина.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
1. Введение
Персонаж «Варга» был представлен на конкурсе Dominance War II. Темой конкурса являлось создание игрового (низкополигонального) персонажа с соблюдением ограничений по геометрии и размеру текстур. На главного героя было разрещено потратить 6000 треугольников, немногим более 1000 на оружие/амуницию. Можно было использовать дополнительные модели ручных животных, но их полигонаж вычитался из модели главного героя. Разрешались одна общая текстура для героя и модели животного размером 2048х2048 и отдельная для оружия и снимаемой амуниции размером 1024х1024. Можно было использовать такие типы текстур как diffuse, specular, normal, bump, opacity, glow, reflection.
Данный урок посвящен игровым персонажам, и подразумевается, что читатель имеет базовое представление о картах нормалей и об их использовании. Для поиска начальной информации о предмете автор советует использовать Google (или зайти на сайт zbrush.info).
Для начала посмотрим на серию изображений, размещавшихся на сайте конкурса. Они иллюстрируют процесс создания персонажа.
Концепт:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Создание модели:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Текстуры:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Подбор ракурсов и положений для моделей:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Финальная модель:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
2. Технологии моделирования для игр
На текущий момент практически все игровые проекты используют карты нормалей при создании игровых персонажей (даже MMO). Карты нормалей могут быть сделаны по-разному: и с помощью бампа (bump maps), и даже нарисованы вручную (ниже будет показаны некоторые приемы, используемые для рисования карт нормалей в Photoshop). Однако полученный таким образом результаты будет заведомо хуже результата, получаемого при использовании высокополигональных версий моделей, который является наиболее интересным.
Для создания такого персонажа потребуются:
- Низкополигональная версия модели (или несколько версий модели для различных уровней детализации, LOD-ов).
- Высокополигональная версия модели, используемая для расчета карт нормалей (с этой модели можно также получить и окклюжн [occlusion maps] и другие карты, которые помогут в текстурировании). Подробности в разделе 4.3 «Перенесение текстур и координат».
- Все типы текстур, поддерживаемые игровым движком (diffuse, normal, specular — наиболее используемые).
Предполагается, что концепт/скетч персонажа уже готов, и мы переходим к моделированию/текстурированию. Есть два основных подхода к моделированию персонажа (разница в порядке следования этапов создания контента):
- Низкополигональная модель -> основная текстура (diffuse texture) -> высокополигональная модель -> карта нормалей и другие текстуры.
- Высокополигональная модель -> низкополигональная модель -> карта нормалей (normal map) -> основная и дополнительные текстуры.
При правильном подходе оба метода дают хорошие результаты, и выбор зависит от текущих обстоятельств и налаженных процессов. Автор пользовался обоими способами, но отдает предпочтение второму подходу.
Первый метод (начинающийся с низкополигональной модели) может иметь некоторые преимущества. В этом случае низкополигональная модель будет сделана раньше, что удобно для аниматоров. Возможно, создание высокополигональной модели будет проще при условии аккуратного текстурирования с сохранением силуэтов и слоев в PSD-файле основной (diffuse) карты, которые понадобятся позже для displacement карт высокополигональной модели. Но имеется большой минус в таком подходе, который будет проиллюстрирован на следующем примере.
Допустим, есть часть модели — одежда с несколькими пуговицами. Предполагается, что низкополигональная модель и основная [diffuse] текстура уже готовы:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Следующим шагом будет детализация модели, для чего мы импортируем подготовленную низкополигональную версию модели в Mudbox, туда же загружаем diffuse-текстуру для уточнения местоположения деталей. Затем добавляем в геометрию модели полигонаж (увеличивая сетку), необходимые детали вроде складок, подчеркиваем объемы и глубину:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Для уточнения глубины объектов сделаем карту высот на базе основной diffuse-текстуры (это быстрее и точнее, чем выдавливать на модели рельеф, используя рисунок основной текстуры):
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
После того как мы все это сделали, делаем экспорт с высокополигональной модели для просчета карт нормалей в Maya/3ds Max или другом софте. Используем трассировку лучей для просчета карты нормалей, которая будет использована в финале. Но во время детализации модели возможны некоторые смещения положения деталей, как это показано на рисунке ниже (эффект преувеличен для наглядности):
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Вы видите, что местоположение деталей на основной текстуре и на карте нормалей не совпадает — при изготовлении крупных складок на материале геометрия модели несколько сместилась. Это привело к смещению деталей, и, так как мы использовали карту высот (displacement map) для добавления деталей (пуговиц), они оказались не там, где нужно. При трассировке лучей детали, полученные на карте высот, перекрывают детали на основной текстуре. Чтобы избежать этого, детализация высокополигональной модели должна быть аккуратной, и, если возможно, нужно избегать больших деформаций оригинальной низкополигональной версии модели. Но это будет мешать выразительности модели, кроме того, будет трудно менять направление геометрии поверхности и управлять общим объемом модели.
Результат может получиться еще хуже, если вы будете использовать ZBrush, а именно рассчитывать карту высот, применяя его внутренний алгоритм (ZBrush использует собственную подразделенную геометрию, subdivision level). Этот результат будет сильно отличаться от того, который будет отображаться в других программах/движках. Если вы будете рассчитывать карту нормалей этим способом, возникнет извечная проблема: каждая используемая программа (автор использовал несколько) имеет разные методы просчета/отображения карт нормалей в системе угловых координат.
Наилучшим выходом из данной ситуации будет просчет карт нормалей в программе, которая будет использоваться на конечной стадии редактирования. На этом проекте автор использовал Maya для финального просчета (rendering), и Maya же использовалась для просчета карт нормалей. Это гарантировало, что результат будет корректным. Если вы используете карты нормалей, рассчитанные в Maya (пользуясь инструментом Transfer maps), и хотите сделать финальный просчет (rendering) с mental ray в Maya, то убедитесь, что включена функция Maya Derivatives в установках рендеринга (Render Settings dialog -> mental ray tab->Translation->Performance), как показано на картинке внизу. Обратите внимание, что данная опция по умолчанию отключена, это обеспечит совместимость расчета нормалей с расчетом бампа (bump) для mental ray. Также надо заметить, что эта опция доступна, если включена опция Export Polygon Derivatives.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Второй метод моделирования (высокополигональная модель -> низкополигональная модель -> мэппинг -> текстуры) дает больше свободы в лепке модели и добавлении деталей и позволяет избежать описанных выше проблем. Тем не менее, изготовляя первой высокополигональную версию, следует помнить, что она будет использована для расчета нормалей на низкополигональной сетке. Вы должны учитывать, какие детали стоит добавлять, а какие нет, какие детали будут выглядеть хорошо после расчете нормалей на низкополигональной версии. Например, мы имеем высокополигональную модель:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Мы можем использовать один квадратный полигон для низкополигональной модели, но результат не будет соответствовать качеству деталей высокополигональной версии. С этого ракурса они выглядят идентичными:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Но под небольшим углом, квадратный полигон плохо отображает детализацию высокополигональной версии:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Более выразительный результат можно получить, добавив немного полигонов на низкополигональную модель, так чтобы она примерно соответствовала высокополигональной модели:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Тогда низкополигональная модель с картой нормалей будет выглядеть значительно лучше при разных углах обзора (конечно, возможность добавлять геометрию зависит от ограничений на полигонаж):
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Кроме того, надо избегать моделирования деталей со сложным, замысловатым контуром, которые позднее будет трудно «спроецировать» на низкополигональную сетку. Такого рода объекты требуют слишком много полигонов, чтобы выглядеть хорошо. Избегайте соблазна добавлять множество сложных деталей, подобно показанным ниже:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Высокополигональная модель может выглядеть хорошо, но при изготовлении низкополигональной версии вы всегда столкнетесь с ограничениями на количество полигонов (5–10 тысяч полигонов или около того). Если вы не планировали наперед «проецируемость» деталей, то легко можно выйти за ограничения на количество полигонов, и вам придется переделывать высокополигональную версию модели. Но после небольшой практики должно прийти понимание: какие детали стоит включать в высокополигональную версию, а какие можно исключить, так как они будут трудновоспроизводимы на низкополигональных версиях.
Другим преимуществом этого метода является то, что можно сразу получить окклюжн карту (occlusion map), а также заготовки для других текстур (просчет [запечение, baking] diffuse карты или карты бликов [specular] даст разные интересные варианты), и, используя детализацию высокополигональной модели, можно получить большой задел для дальнейшего текстурирования.
Также возможно комбинирование этих двух методов моделирования. Фактически, так и произошло при создании «Варги», что будет показано в следующих главах.