Перейти к основному контенту

Моделирование объектов

1. Названия

Структура названия какого-либо объекта:
[префикс]_имя_[принадлежность]_[разновидность]_[№№]_[L/R]
кто_чей_какой1_какой2_какой3

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

Примеры:
box_bottom
school_lamp_classroom_red

Doc_costumeDino_small
pencil_Philip_A
hand_R

Геометрия без суффикса _geo и группа без _grp.

Если в группе геометрия принадлежит к одному типу по смыслу, ее следует именовать с тем же названием, но множественным числом. (При условии, что данные объекты имеют разные материалы, иначе они должны быть объединены в один меш (см. далее)).

image.png

Иногда можно использовать _group для обозначения чего-то общего среди объектов группы и сложности с названием объектов во множественном числе на англ. языке.

Нумерация по-умолчанию множества объектов в группах _01 до _99 или, если объектов больше, то от _001 до _999 и т.д.
Постфиксы левый/правый - _L или _R всегда в самом конце и с большой буквы. Тоже самое, например, с постфиксами _Up и _Down. Если прям большой риг с верхней и нижней частью, где много контролов и глубокая иерархия, то можно и U и D для краткости.

Другие название суффиксов могут быть на свое усмотрение, главное чтобы не было двусмысленности в названии. Аниматору должно быть интуитивно понятно значение суффикса каждого контрола.

2. Сцена

1. Структура групп в ассете (см. рис. 001):
root - корневая группа всего файла.
geo - группа для хранения геометрии, которая кэшируется на этапе анимации. 
2. Данные обе группы должны иметь нулевые трансформации и пивот в нуле. 
3. Все геометрические объекты должны лежать внутри группы geo.
4. У симметричных объектов правая или левая сторона определяется относительно оси +Z:
поэтому постфиксы для имен объектов:
_R - это сторона оси -X
_L - это сторона оси +X
5. Проверить, для стоящих на какой-либо поверхности объектов, что они стоят четко на поверхности нуля. Нижняя точка объекта Y = 0.:
Также стоит внимательно посмотреть как объект при сглаживании стыкуется с поверхностью нуля.
К примеру, если внизу есть лоуполи части, объект может слегка летать в воздухе.
6. Сцена имеет формат *.ma
7. Имена шейпов для каждого объекта-меша = [имя объекта + Shape] (Например, box_01 должен иметь шейп box_01Shape).
8.  Почистить сцену перед паблишем (перед этим лучше сохранить сцену):
- удалить лишнюю историю;
- удалить ненужные слои;
- удалить созданные камеры;
- исправить одинаковые имена;
- скрыть стандартные майевские камеры: persp, top, front, side;
- проверить ненужные скрытые объекты (нужно ли их удалить);
- удалить пустые шейпы (Hypershade: Edit -> Delete unused nodes);
- ни с чем несвязанные материалы (Hypershade: Edit -> Delete duplicate shading networks);
В качестве ускорения процесса можно использовать File -> Optimize Scene Size и выбрать соответствующие пункты. (В некоторых ригах, возможно что-то может сломаться при выполнении данной операции, лучше все проверить или вручную все сделать).
Многие из этих пунктов будет реализованы в скрипте валидации/чекинга перед паблишем с возможность исправить, выделить ошибочные объекты и т.д..

3. Расположение объектов и пивота

1) По-умолчанию все объекты должны стоять на плоскости XZ и пивот будет внизу в центре объекта.

Screenshot_4.png

2) Пивот всех частей  меша так же должен быть в нуле.

3) Группы root и geo всегда должны иметь нулевые трансформации и их пивоты находится в центре координат сцены. tyty1.png

4. Топология

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

Ниже будут показаны примеры хорошей/плохой топологии.

На скриншотах ниже показана корректная топология ( равномерная, без треугольников, с хорошей оптимизацией )

Screenshot_8.pngScreenshot_7.png

Ниже следует пример плохой топологии, на рисунке показан излишний полигонаж, который будет неоправданно грузить сцену.

Screenshot_5.png

На скриншоте ниже не хватает полигонов, геометрия при сабдиве "плывёт"  и теряет в объёме, сетка неравномерная.

                Screenshot_6.png                    

1. Стараться делать равномерную сетку на всем меше. 
2. В меше не должно быть полигонов с более, чем 4мя вершинами.
3. Проверить перевернутые нормали на меше (Viewport: Shading -> Backface Culling = OFF).

Также можно включить направление нормалей в атрибутах шейпа:

xxxx.png

4. Для органических объектов и других неплоских объектов желательно делать полигоны ближе к квадратной форме (для оптимизации: скорее это не касается длинных тонких объекты, такие, например, как стебли и провода, где продольные полигоны будут в виде длинных прямоугольников).
5. Разбитие геометрии на объекты по материалам (например, у шкафа все деревянные части в одном меше-объекте, а металлические во втором меше-объекте).
6. Удалять полностью невидимую глазу геометрию, скрытую за другой частью меша (это не относится, например, к задней стенке шкафа).


plant_4x.jpg

7. Цилиндры
Для цилиндрических частей использовать количество вершин, кратные 4м: 4, 8, 16, 32.
Для мелких частей геометрии достаточно 8 вершин. На очень мелких объектах в большом количестве можно даже 4 вершины.

8. Объект, который вплотную стыкуется с другим (например, ручки двери с поверхностью двери), делать с подворотом полигонов и сплитом. Вообщем, чтобы объекты в прямую просто не втыкались. Исключение могут составлять объекты дальнего плана.

Слева втыкается, справа вплотную примыкает.

image.png  image.png    

Обратная сторона этой же корректной дверной ручки:

image.png

9. Поддерживающие лупы с обоих сторон жесткого ребра модели. Не сильно их прижимать к основному центральному ребру.

10. Не оставлять 3х-угольники на сходах ребер, например, на плюсах сфер и цилиндров.

ty1.png    ty2.png

                      

5. Материалы

Имена материалов должны иметь название, соответствующее названию материала например: 
metal_mtl, wood_mtl, grass_mtl, body_mtl

Шейдинг группы данных материалов будут иметь названия соответственно: 
metal_mtlSG, wood_mtlSG, grass_mtlSG, body_mtlSG (т.е. добавляется "SG" в конце).

Желательно называть так, чтобы художник, который будет красить модель, мог легко понять на какой меш назначен материал. Т.е. материал в самой частой ситуации просто имеет имя, совпадающее с именем 3д-объекта.

hn5.jpg   hn6.jpg

Для удобства именования и ускорения работы с материалами следует использовать инструмент Material List. Позволяет просмотривать все материалы в сцене и связи с объектами, а также иметь возможность переименовывать материалы и шейдинг группы. Подсвечивает красным неправильное именование. Доступна как из меню Ярко, так и из окна проверки модели.

Screenshot_339.jpg

При выборе меша подсвечивает синим материалы, которые назначены на него. Кнопки с иконкой сферы позволяют выделить соответствующий материал или шейдинг группу.

Переименовать материал или шейдинг группу можно просто в области с названием.

Имена материалов имеют очень важное значение, т.к. по именам шейдинг групп происходит покраска модели по слоям в Substance Painter. После того как модель принята - название материала нельзя менять, потому что уже начался текстуринг. В крайнем случае необходимости переименования материала можно посмотреть в фтреке - начался ли текстуринг или еще нет, либо согласовать данное действие с лидом моделинга

Перед паблишем обязательно проверять имена материалов и их шейдинг групп.

6. UV

  1. Раскладка UV должна быть в положительных координатах
  2. Если модель меньше главного персонажа (< 1.6м), все объекты-меши располагаем в одном юдиме.
  3. Одинаковый тексель юви в одном юдиме.
  4. Оптимально использовать UV-пространство.
  5. Если UV объекта занимают 3/4 юдима при выбранной uv плотности, его можно увеличить до целого
  6. Например вы делаете объект дерева где листва это три повторяющиеся объекта, тогда на юви пространстве нужно сделать оверлап листочков. ( пример ниже )

Screenshot_9.png

7. Как можно меньше швов. Неглубокие выемки делать без швов.
Шов по возможности делать в наиболее невидимых местах:
a) с задней стороны объекта (часто это противоположная сторона той, которая изображена на эскизе).
б) со стороны, которая реже всего будет видна
в) со стороны, которая частично скрыта другой частью объекта.

Плотность UV Texel Density 

Texel Density(px/unit) = 10 означает, что на 1см 3д пространства сцены будет приходится 10 пикселей текстуры (тексель) при заданном размере текстуры (например, 4к).
Параметр Map Size задает размер текстуры (на 1 юдим).
Вычислить плотность можно в UV Editor-> UV Toolkit -> вкладка Transform (UV Toolkit открывается Tools-> Show UV Toolkit).

td1.png   td2.png
 ( плотность зависит от размера текстуры и масштаба UV в юдиме)

1) Персонажи
свитер Фила - при 4к текстуре значение 40-50 пикселей на 1 см.
Можно приблизиться к гипотетическому размеру объекта в сцене на всю ширину экрана без потери качества при рендере в 4К:
4к текстура, UV на весь юдим при плотности 50 = 3996 / 50 ~= 80см (мин. ширина отличного качества на весь экран)
8к текстура, UV на весь юдим при плотности 100 = 3996 / 100 ~= 40см (мин. ширина отличного качества на весь экран)

Итого для персонажей:
100px/unit (от 80 до 120) для текстур 8к

2) Плотность UV в зависимости от плана. Юви должны быть примерно в указанных в пределах.

а) Макроплан - персонаж или объект очень крупно:
100 (от 80 до 120)

б) Взаимодействующие с персонажами объекты переднего плана (например, держат в руке):
50 (от 40 до 60)

в) Объекты среднего плана: рядом с персонажем во весь рост или немного сзади него:
20 (от 15 до 30)

г) Объекты заднего или общего плана:
10 (от 7 до 15)

(Внимание) Если информации нет - делаем для общего плана - 10 (лучше 10, но можно и от 7 до 15 в зависимости от возможности уместить целиком в юдим).

9. Smooth UV (прочитать к общему сведению).
Существует несколько режимом сглаживания краев юви-частей (uv-shell'ов):
а) Maya Catmull-Clark - обычно стоит по-умолчанию в Maya, но есть проблема - дает растяжения ювишек на цилиндрической поверхности в месте рядом с вершиной UV смежной с 3мя швами:

image.pngimage.png

б) Preserve Edges and Corners - устраняет эти растяжения (но есть другая проблема с кольцевой ювишкой).
При использовании инструмента Smooth для разбиения геометрии с уже готовыми ювишками, следует выбрать именно данный пункт в настройках инструмента.

image.pngimage.png

7.Персонажи

Общие требования по моделям распространяются также и на персонажей, за исключением нескольких моментов.

Необходимо создать 2 группы blendshapes и for_rig в корневой группе root.

В группе blendshapes для модели необходимо сделать 2 блендшейпа:
1) Блендшейп на закрытые веки (для того, чтобы риггер заранее знал место стыковки век и конечную форму закрытия).
2) Блендшейп на открытие рта (как для текстуровщиков, чтобы видеть внутренность рта, таи для риггера).

В группу for_rig добавляется все необходимое, что упростит работу риггера. 
Если персонаж имеет несферичекую форму глаза, то в данной группу нужно добавить глаза в исходной сферической форме с назначенными латтисами, каждый из которых сжимает соответствующий глаз в финальный сплющенный вид.

hf1.png

Обе группы лежат отдельно от группы geo, потому что им не нужно попадать в кеш. 

Группы в раскрытом виде:

Screenshot_505.jpg

2 блендшейпа на закрытые веки и открытие рта:

hd6.png

Глаза делим на левый и правый, а также каждый из них на 3 объекта: белок, зрачок и блик:

eyes_new.PNG

Зубы и десна тажке делим на 2 отдельных меша, т.к. они имеют разные материалы и не удобно рисовать маску на шейдинге:

Screenshot_483.jpg

Если глаза имеют некруглую форму - добавляем им группу трансформ с сохраненными трансформациями из исходный сферы в нуле координат и кладем в группу for_rig:

Screenshot_503.jpg

Перед паблишем персонажа стоит делать Optimize Scene с предпоследней галкой Remove Unknown nodes. Второй вариант - в инструменте валидации нажать кнопку Optimize Scene.

hd4.png

hd5.png

Screenshot_504.jpg

9. Варианты детализации модели (Hi, Low, Proxy)

Для высокополигональных объектов (кроме персонажей и локаций), которые имеют более 10 тыс. вершин часто необходимо сделать три варианта представления: Hi, Low и Proxy. Для этого нужно создать три Display Layer'а с данными названиями, и затем добавить в них геометрию. Из данных слоев генерируются соответствующие USD представления.

Каждый объект имеет группу со своим именем и содержит 3 представления с суффиксами _high, _low, _proxy. Каждый меш с соответствующим суффиксов добавляется в свой слой. 

(!) Если для объект вообще не планируется использовать варианты детализации, то он будет просто без группы - лежать как обычный меш в группе geo. Но его нужно добавить в слой Proxy, чтобы он отображался в упрощенном виде при сборке локации.

Паблиш модель происходит с включенным по-умолчанию слоем Proxy и отключенными слоями Hi и Low.

dp_options.jpg   outliner_hi_low_proxy.jpg

Hi - текущая оригинальная модель.
Low - упрощенная модель от оригинальной. Используется для дальних планов. Со средней дистанции разницы не должно быть заметно. Уменьшаем по вершинам от 40% и более от оригинала.
Часто достаточно сделать Mesh->Reduce с 40-60%. Ювишки при этом должны совпадать (при Reduce их трогать по идее не нужно).
Proxy - максимально упрощенная модель. Используется только во вьюпорте для быстрого отображения в локации.
Важно, чтобы она повторяла основные формы и юви, чтобы на ней можно было проверить корректность текстуры на шейдинге. Уменьшаем по вершинам от 60% и более от оригинала.

hi_low_proxy.jpg

При операции Reduce нужно поставить Sharpness от 0 до 1 и посмотреть какое значение дает лучший результат для каждой поверхности.

reduce_options.jpg

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

P.S. Наличие слоя Proxy заставляет менять поведение генератора Geo-Layer-а на следующее: на группе /root/geo создается атрибут purpose='render', на всех объектах слоя proxy добавляется атрибут purpose='proxy'.

10. Проверка модели (валидация)

Перед публикацией необходимо пройти проверку модели.
Инструмент проверки находится в меню: Yarko->Modeling->Check Model

xs1.png

Если нет такого пункта:
Взять архив с питоновскими скриптами, распаковать и положить папку model_validation по удобному адресу на своем диске. Затем в Maya выполнить python-команду:

import sys
sys.path.append('C:/maya/tools')   # (!) Change this path to your path
import model_validation.checker_main as checker_main
checker_main.run()

Откроется окно:

hd1.png

Состоит из множества пунктов проверки, разделенных на категории:
1) Preferences - проверка настроек майского файла, глобальные вещи.
2) Scene - проверка наличия групп, истории и мусорных объектов.
3) Names- проверка имен объектов, групп и шейпов.
4). Connections - показывает связи объектов с чем-то. Шейп чаще всего должен быть связан с одним материалом.
5). Mesh - проверка геометрии (пока нет, в процессе добавления).
6). UV - проверка ювишек (пока нет, в процессе добавления).

Каждый пункт проверки состоит из:
1) Названия.
2) Статуса - Wait (не проверялось), Error (есть ошибки), Ok (все в порядке).
3) Кнопка Check - проверка пункта.
4) Кнопка Select Error Nodes - выбрать ноды, содержащие ошибку (не для всех пунктов есть).
5) Кнопка Fix - пофиксить ошибку автоматически (не для всех пунктов есть).

Optimize Scene - запускает оптимизацию сцены, удаляя мусорные объекты, которые не обнаруживаются другими проверками.

Error Nodes: - текстовое поле, пишет список нод, содержащих ошибку, а также возможно описание ошибки.

Show Connections - показывает Hypergraph с выбранными объектами

Clear - очистка поля проверки

Run All - запуск всех скриптов
Check Failed Only - запуск только тех пунктов, которые не прошли проверку

После запуска окно инструмента будет выглядеть так:

hd2.png

11. Публикация

При паблише нужно сделать единый скрин со всеми ракурсами, пример скриншота ниже. 
Скриншот нужно прикрепить к таску комментарием.

set.png