Modeling || Кот Ученый

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

1. Названия

Структура названия какого-либо объекта:
[префикс L_R_]_имя_[принадлежность]_[разновидность]_[№№]_[U/D]
кто_чей_какой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_ всегда в самом начале и с большой буквы. Тоже самое, например, с постфиксами _U и _D. Если прям большой риг с верхней и нижней частью, где много контролов и глубокая иерархия, то можно и 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. Н-гоны запрещены.
3. Проверить перевернутые нормали на меше (Viewport: Shading -> Backface Culling = OFF).

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

xxxx.png

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


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) с задней стороны объекта (часто это противоположная сторона той, которая изображена на эскизе).
б) со стороны, которая реже всего будет видна
в) со стороны, которая частично скрыта другой частью объекта.

8.Все юви шеллы должны лежать  вертикально по длине. ( Пример ниже )

Screenshot_2.png

Ещё один хороший пример развёртки картинных рам.

Screenshot_1.png

Плотность 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

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

Перед публикацией необходимо пройти проверку модели.
Инструмент проверки находится в меню: 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

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

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

! Если проп - сложный или это перс, то помимо превью в заметки опубликованной работы необходимо добавить блендер-файл с ассетом, над которым производилась работа.

set.png

PS. Из общей схемы выделяется способ производства камней на проекте. Последовательность действий такова...

Моделинг камней и модулей для сборки скал

Скульптинг персонажей

Перед началом работы копируем из ФТ к себе, на локальный диск, концепт от художников. 

image.png

Затем запускаем фотошоп, и в нем режем концепт на отдельные  проекции видов. 

image.png

Стараемся, чтобы файлы совпадали по размерам и у них соответствовали друг другу центральные оси.

image.png   image.png

Получаем, по крайней мере, два основных вида Front и Side. Если в концепте отображены дополнительные виды, как то Back и Top, то делаем еще и их.

Запускаем zBrush, устанавливаем размер документа 1920 Х 1280 по крайней мере, не меньше.

image.png

Создаем куб и импортируем полученные картинки в проект в меню Texture.

image.png

Картинки назначаем на ортогональные виды в меню Draw и настраиваем как удобно, наверное, лучше всего нажать кнопку Front в основном разделе и отжать PLine в разделах назначенных видов.

image.png

Настраиваем трансформы картинок, если требуется, на основе созданного кубика.

image.png   image.png

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

image.png

По мере работы очень хорошо пользоваться функцией Dynamesh в меню Tool/Geometry.

Так нам проще всего будет воплотить в работе все пожелания художника и оптимизировать проект по полигонажу.

image.png

Если в концепте присутствует цветное изображение, следует раскрасить скульпт с помощью полипейнта, ориентируясь на это изображение.

image.png

Наиболее удачным сочетанием для демонстрации, в большинстве случаев, является полипейнт с материалом SkinShade для туловища и одежды, а для глаз полипейнт и ToyPlastic/

После окончания скульптинга публикуем работу в ФТ. В заметки, наряду с описанием того, что было сделано, добавляем изображение в формате JPG или PNG по следующему образцу.

image.png

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

Вместе со статичным изображением добавляем в заметки Turntable в 4-х исполнениях, орто-скульпт, орто_полипейнт, перспектива-скульпт и перспектива-полипейнт посредством меню Move.

Настройки следующие.

image.png

Нажимаем Doc и Large, так мы получим разрешение видео по установленным в начале работы значениям.

В Overlay Image и Title Image убеждаемся, что не назначены никакие картинки и, на всякий случай, обнуляем все значения.

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

Нажимаем.

image.png

После автоматического завершения создания фильма в zBrush, можно проверить его путем нажатия Play Movie. Если что-то пошло не так, прерываем запись нажатием Esc на клавиатуре и если результат не нравится, отменяем предыдущую работу нажатием Delete. Повторяем операцию до приемлемого результата.

image.png

Экспортируем видео на локальный диск.

image.png

Далее приступаем к публикации в ФТ.

Запускаем ФТ-коннект.

Во вкладке App заходим в My Tasks и находим свою задачу.

image.png

Проверяем путь к ассету находим задачу Sculpt и жмем на само слово Sculpt.

image.png

В правом верхнем углу находим три полоски и нажимаем на них, В выпавшем списке выбираем Publish.

image.png

image.png

Методом перетаскивания из локальной папки в поле 1 переносим ZPR, именно ZPR, а не ZTL, опубликован должен быть рабочий файл с подгруженными проекциями. В поле 2 Принтскрин рабочего окна проекта или любая картинка, демонстрирующая работу. В поле 3 десимейтнутый OBJ модели или можно ничего не перетаскивать, может сработать и так. В поле 4 пишем что-нибудь, например "Первая версия на просмотр". И жмем PUBLISH.

image.png

Если все правильно, то появится зеленый SUCCESS. В случае появления надписи PUBLISH FAILED, пишем лиду или, если понимаем природу ошибки и сделать ничего не можем, сообщаем об ошибке в HELP DESK в Телеграм @yarko_helpdesk_bot.

Моделирование персонажей

Принятый художником-постановщиком скульпт отправляем в Maya или Houdini.

В Maya, для оптимизации процесса ретопологии, можно импорт геометрии прогнать через GPU Cache.

image.png

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

Затем импортируем созданный Alembic в сцену.

image.png

Полученный Alembic выглядит так, объект с пунктирной сеткой.

image.png

Так сцена Maya весит значительно меньше и ретопить будет гораздо легче.

Ретопологии в Houdini имеет ряд преимуществ. Houdini более стабильна и легче справляется с высоко-полигональными объектами. Кроме того инструментарий для этого процесса имеет несколько удобных функций, которых нет в Maya.

Импортируем хайрезную модель File/Import/Geometry и ныряем в полученный объект.

image.png

В Network View создаем Topobuild и соединяем его правый Input Port с Output Port ноды File. ставим Template Флаг на ноде File и Render Флаг на ноде Topobuild. С курсором во Вьюпорте нажимаем D и производим следующие настройки, выбирая наиболее подходящее отображение референсной геометрии.

image.png

С выбранной нодой Topobuild и курсором в SceneView жмем ENTER на клавиатуре, чтобы активировать выбранный инструмент Topobuild. Вверху слева рабочего окна появятся инструменты для ретопологии. Переключение между этими инструментами осуществляется нажатия на них или SHIFT + 1, 2, 3, 4, 5, 6.

image.png

Инструмент Build с функциями, отсутствующими в Maya.

При вытягивании эджа, и зажимаем G или B в конечной точке, вращаем или скейлируем этот эдж.

То же можно и с вытягиваемыми лупами.

image.png

Придание эджам одинаковой длины Shift+E.

image.png   image.png

Выравнивание ряда эджей Shift+S.

image.png   image.png

Придание выделенным компонентам (пойнты, эджи, фейсы) формы круга Shift+C

image.png   image.png

Инструмент Edge Slide.

Выравнивание лупа по профилю (соседний луп с одной или с другой стороны) Match Profile  или Match opposite Profile. 

image.png  image.png  image.png

Инструмент Split. Выбор количества добавляемых пойнтов колесом мыши или Shifrt+колесо количества добавляемых лупов.

image.png  image.png

Инструмент Skin.

1. протягиванием линий поперек геометрии создаём сечения.

2. перечеркивая сечения создаем геометрию с любым количеством продольных лупов по выбору (удобно для цилиндрических объектов).

image.png  image.png  image.png

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

Паблиш из Maya.

Прежде всего, убедиться, что Maya запущена из ФТ-коннекта.

image.png

Рабочая сцена, до первого паблиша должна быть сохранена на локальном диске в формате Maya ASCII ( ***.ma ).

Запускаем в Maya ФТ-утилиту из меню Ярко. Выбираем App или Publish и проверяем путь к своему ассету, Нажимаем на три полоски справа вверху окна.

image.png

Выбираем Publish.

image.png

Выбираем WIP для незаконченной технически ( нет ЮВ, наличие ненужных для дальнейшего использования в проекте объектов ) сцены. Пишем что-нибудь в Комменты и жмем Publish.

image.png

После того, как художник-постановщик примет сцену, можно её подготовить для паблиша в OUTPUT.

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

image.png

  У объектов, условно плоских, имеющих толщину, ЮВ_шеллы части геометрии, определяющей эту толщину, должны быть отрезаны и выпрямлены в прямоугольники. Ориентация ЮВ-шеллов в ЮВ-редакторе должна, по возможности, совпадать с ориентацией геометрии в 3-Д пространстве.

image.png

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

image.png

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

image.png

Если ЮВ-шелл может быть выпрямлен частично, выпрямляем эту часть, с остальными ЮВ можно повторно выполнить UNFOLD или OPTIMIZE.

image.png

В сцене должен присутствовать только один ЮВ-сет с названием map1.

image.png

Все ЮВ-шеллы объекта или группы объектов относящихся к одному материалу должны иметь единый Texel Density.

Правильно.

image.png

Неправильно.

image.png

ЮВ не должны пересекать границы юдимов, располfгаться левее и ниже юдима 1001, правее юдима 1010 и выше юдима 1091.

Между ЮВ-шеллами и между шеллами и границей Юдимов обязательно должен быть паддинг 4-8 пикселей.

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

image.png bkMBbg6669vABmQx-x626sspgdfinufcw-jm8z5tbppxuwiz05-image.png image.png

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

image.png

Если у объекта много одинаковых частей, их можно сложить в рандомные кучки. ЮВ продолговатых или цилиндрических объектов ( колонны, толстые ветки, сучки деревьев ), которым предполагается назначение одинаковой текстуры, в ЮВ-пространстве должны иметь одно направление.

image.png

Если ассет контактный (взаимодействует с персонажем) или предполагаются его клоузапы или это персонаж, то тогда следуем многоюдимному Воркфлоу.

image.png

В этом случае, при выбранных всех объектах сцены, в ЮВ-редакторе не должно быть никаких оверлапов. У объектов с одним материалом может быть несколько юдимов. Глаза должны находиться в первом юдимв. Тексель всех объектов одного материала должен быть единым. Юв  области век должны быть как на голове с закрытыми глазами (про неё отдельно чуть ниже).

image.png

Проверка искажения ЮВ.

Первым шагом, можно воспользоваться нажатием кнопки отображения искажений.

image.png

Но этот инструмент не всегда достаточно информативен. И так как мы создаем модели под сабдив, нам надо проверить, как ведут себя ЮВ в сглаженном состоянии. Для этого не всегда подходит простое использование клавиши 3 на клавиатуре, так как это дает отображение сглаживания с настройками по умолчанию. На этапе рендера, сглаживание производится по алгоритму OpenSubdiv и поэтому необходимо произвести такое сглаживание на модели инструментом Smooth со следующими настройками.

image.png

И включив отображение Checker Map, проверить искажения UV. Особое внимание следует уделить местам границ ЮВ-Шеллов и сетке с неравномерными полигонами. Настроить размер Checker Map можно в окне её настроек.

image.png

После проверки вернуть объект в состояние до сглаживания.

Выделяем объект или объекты.

Нажимаем 1 на клавиатуре, сцена не должна сдаваться с превьюшным сглаживанием (клавиша 3).

Выполняем Unlock Normals и Soften Edge в меню Mesh Display.

Удаляем Вертекс колор, если есть, в Mesh Display/Color Set Editor.

image.png

Проверяем, есть ли невидимые фейсы (Invisible Faces) в Display/Polygons/Invisible Faces.

Если есть,

image.png

в режиме компонентов выделяем полигоны (можно все) и выполняем отмену невидимости

image.png

После нажатия Create или Apply снимаем выделение полигонов и наслаждаемся видением чуда, дьявольское наваждение невидимости исчезнет.

Запускаем утилитку Cleanup (Mesh/Cleanup).

Обратить внимание на Operation. Лучше ставить Select Matching Polygons и произвести починку вручную, т.к. автоматика, как правило, делает это плохо.

У объектов сцены не должно оставаться 1 - Zero Length Edges, 2 - nGons, 3 - Concave Faces,

image.png

Lamina Faces, Nonmanifold geometry,

image.png

Points on Edges

image.png

Проверка Нормалей.

Нормали на одной поверхности не должны быть направлены в разные стороны.

image.png

Проверяется через Dysplay/Polygons/Face Normals

image.png

А можно, чтоб туда не лазить, просто оставлять птичку в меню рабочего окна Lightning/Two Sided Lightnung отжатой, тогда противоположная от направления нормалей сторона полигонов будет просто черной.

image.png

Лечим выделением всейх фейсов с последующим применением Mesh Display/Conform (не всегда выполняет желаемое). Либо выделяем фейсы, которые считаем вывернутыми, и жмем Mesh Display/ Reverse.

Все объекты сцены должны находиться в нуле координат. Пивот пропов в центре объекта. Пивот Персонажей в нижней точке туловища между стоп.

image.png        image.png

Нормали у объекта должны быть залочены. Если модель - блокинг, то перед локом нормалей нажать сначала Harden Edge. Если полноценный ассет, то сначала Soften Edge.

image.png

У объекта должны быть обнулены все трансформы и удалена История.

image.png

Перед сдачей сцены проверить наличие лишних атрибутов и зависимостей объекта.

А. Atribute Editor/Atributes/Delete attributes.

image.png

Б. Windows/General Editors/Hypergraph:Hierarchy.

Здесь должны оставаться только трансформ-, шейп-, и шейдинг-ноды.

image.png

В. То же можно проверить и в Windows/Node Editor.

image.png

На объектах не должна оставаться информация о Vertex_Color. Проверяем , чтоб бы в Color Set Editor было чисто. Mesh Display/Color Set Editor

image.png

Информацию по неймингу объектов смотри в разделе Моделинг объектов.

На всех объектах сцены должны быть назначены материалы только типа Lambert, кроме стекла. На стекло назначаем материал типа Phong, со  следующими настройками. Если стекло, это визор шлема или любое другое, с которым взаимодействует аниматор, то Transparency = 90, Cosine Power = 2.0, Reflectivity = 0.05.

image.png

Если стекло, это часть, куда обычно вставляется 2д или подшоты: смартфоны, экраны и т.д. были обозначены ярким кислотным цветом, чтобы они маячили на бластах и на анимации не забывали при них. Transparency = 60 - 65.

image.png

Не на одном объекте сцены не должен оставаться дефолтовый материал Lambert1.

Все материалы должны иметь свой отличительный цвет.

image.png

Материалы назначаются только пообъектно (один материал - один объект). По фейсам назначать материалы нельзя.

Что бы проверить, назначен ли материал на фейсы или на объект, открываем Hypershade, выделяем материал и проводим нехитрую операцию, находящуюся по адресу Hypershade/Edit/Select Objects with Materials. Подсветиться должны не фейсы, а объект.

Неправильно

image.png

Правильно

image.png

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

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

Название самого материала и название его Шейдинг-Группы должны совпадать. В Шейдинг-Группе после названия обязательно наличие суффикса SG.

image.png

Смотрим в Outliner

image.png

В сцене должны присутствовать только объекты, относящиеся к ассету, взятому в работу, и четыре дефолтовые камеры. Все объекты, которые отправятся на риг и текстуринг, должны находиться в папке geo, которая находится в корневой папке root . Объекты в сцене НЕ должны находиться ни в каких дополнительных группах. Единственная дополнительная папка for_rig, которая присутствует в сцене, находится так же как и папка geo в корневой папке root. В ней находятся объекты, необходимые для текстуринга и рига, как то, голова с закрытыми глазами и открытым ртом ( в сцене над персонажем, смотри картинку ), отдельная голова и глаза с НЕУБИТЫМИ трансформами, если они у модели не круглые. 

Если ассет - животное с шерстью, То модель, утвержденная у художников отправляется в папку for_rig с названием body_fur. Тело же для грума и рига остается в папке geo как основное. Вертексы этого тела должны быть смещены внутрь по нормалям на незначительное расстояние, примерно равное объему будущего меха. Вертексы где не предполагается наличие шерсти, ка то, рот, нос и веки НЕ смещаются. Вертексы на ладонях и стопах смещаются минимально или вообще не смещаются, в зависимости от того как и где растет шерсть. Также в папке for_rig должно находиться тело с закрытыми глазами и открытым ртом (дубликат базового из geo) с названием body_grooming.

image.png

Некоторый мусор может оставаться в сцене и после всех операций, описанных выше. Что бы еще немного прибраться отжимаем птичку DAG Objects Only в Outliner/Display

image.png

выделяем все, кроме объектов сцены и материалов, назначенных на них, если они уже назначены, и жмем Delete на клаве, лишнее удалится. Снова нажимаем DAG Objects Only, что бы настроение не портилось от наблюдения этой хрени, которая все равно остается болтаться в Аутлайнере.

Проверяем наличие референсов в File/Referenca Editor.

image.png

Проверяем наличие Неймспейсов в Windows/General Editors/Namespace Editor.

image.png

Проверяем наличие слоев в Layer Editor.

image.png

Избавляемся от лишних материалов в сцене. Hypershade/Edit/Delete Unused Nodes.

image.png

Для финальной проверки перед паблишем пользуемся утилитой Modeling Validation Tool. Запускаем  и последовательно нажимаем Optimize и  Run All.

image.png

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

image.png

image.png

Также, для проверки качества ЮВ-раскладки, можно использовать утилиту UV checker. Запускаем и просто жмем большую кнопку. Если все ок, снова жмем кнопку.

image.png

ВАЖНО!!!

Перед финальной сдачей ассета сверится с технической документацией от рига.

https://bookstack.yarko.com/books/rigging-kot-ucenyi/page/texniceskaia-dokumentaciia-k-otdelu-modellinga-ot-rigginga

image.png

Запускаем, как и при публикации ВИПа, утилиту и жмем OUTPUT. ВАЖНО!!! перед публикацией вставить модель максимально ровно в центре вьюпорта, не слишком далеко и не слишком близко к краям. В утилите выбрать NEW AUTO FROM PERSPECTIVE, написать что-нибудь в комментариях и нажать на "ПУБЛИКАЦИЯ".

image.png

В новом окне появится список ошибок в сцене и надпись YOUR PUBLISH IS NOT VALID, но если они не существенны для публикатора, а следовательно для дальнейшего пайплайна, то внизу будет отображаться кнопка PROCEED. В противном случае, если ошибки серьёзные, эта кнопка будет отсутствовать. Нажимаем PROCEED и завершаем работу над ассетом.

Лоды и оптимизация модели

LOD Camera Coverage tool 
- Инструмент для расчёта метрик переключения LOD

Screenshot_74.png



1. Общие сведения

1.1. Что такое LOD

LOD (Level of Detail, уровень детализации) — это несколько версий одной и той же модели с разной плотностью сетки. Чем дальше объект от камеры, тем меньше он занимает места на экране, и тем меньше смысла отрисовывать его во всех подробностях. Движок в реальном времени подменяет высокодетальную геометрию на упрощённую, зритель этого не замечает, а нагрузка в сцене падает.

Screenshot_73.png

Нумерация идёт от самого детального к самому простому:

lod_0 — исходная, самая детальная модель. Видна вблизи.
lod_1 — упрощённая версия. Включается, когда объект отдалился.
lod_2 и далее — ещё проще, для дальних планов.

Главный вопрос при подготовке LOD: в какой именно момент переключаться?

1.2. По какому признаку происходит переключение

Переключение завязано не на метры и не на расстояние до камеры, а на экранный размер объекта — сколько пикселей он занимает на экране. Это правильнее, потому что один и тот же объект на разном разрешении и при разном угле обзора выглядит по-разному, а пиксели — универсальная величина.

Например: пока модель занимает на экране больше 200 пикселей, показываем lod_0. Как только стала меньше — переключаемся на lod_1. Вот эти пороговые числа в пикселях мы и измеряем.

1.3. Что такое Variant Set

Variant Set (набор вариантов) — это механизм USD, позволяющий хранить внутри одного ассета несколько взаимоисключающих состояний и переключаться между ними. Пример: одна модель камня с вариантами детализации — высокая с рельефом, средняя с упрощенным рельефом и лоу-поли с общей формой. В сцену подгружается ассет, а конкретный вариант выбирается уже на месте.

LOD-уровни хранятся ровно по такому же принципу: lod_0, lod_1, lod_2 — это варианты одного набора. В любой момент времени активен только один из них. На основе записанных метрик переключения лодов и по экранному размеру объекта уже в шоте будет автоматически определяться в какой лод переключать тот или иной объект.

1.4. Display Layers в сцене — только для удобства

Раньше слои отображения (Display Layers) с именами Lod0, Lod1 и так далее использовались как рабочий механизм. Сейчас это не так.

Screenshot_71.png

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

Единственное, что реально уезжает дальше — это метрики, сохранённые инструментом в служебную ноду. Всё остальное остаётся внутренней кухней. Но именовать слои в любом случае нужно как Lod0, Lod1, Lod2 — так как инструмент умеет их находить и переключать автоматически.



2. Как устроена модель

2.1. Структура групп

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

    root
     └── geo
          ├── lod_0
          ├── lod_1
          └── lod_2

Screenshot_70.png

Группа root — корень ассета, она должна быть одна и лежать в самом верху сцены.
Внутри неё geo, а уже внутри geo — группы по уровням.


2.2. Одинаковые имена внутри уровней

Важное правило: объекты внутри разных LOD-групп называются одинаково. Если в lod_0 лежит корпус с именем body, то в lod_1 тоже должен лежать body, а не body_lod1 и не body_low.

    root/geo/lod_0/body
    root/geo/lod_1/body
    root/geo/lod_2/body

Совпадение имён — это то, по чему система понимает, что перед ней разные версии одного и того же объекта, а не три разных предмета. Если имена разойдутся, связь между уровнями потеряется, и вариант просто не соберётся корректно. Валидация теперь не будет ругаться на одинаковые имена при такой структуре с лодами.



3. Что делает инструмент

LOD Screen Coverage Tool решает одну задачу: помогает определить и записать пороговые значения в пикселях, при которых должно происходить переключение между уровнями детализации.

Работает это так.

Инструмент создаёт временную камеру, наводит её на модель и позволяет отъезжать и приближаться, вращаясь вокруг объекта. В каждый момент он считает, сколько пикселей на экране занимает модель. Вы отводите камеру на то расстояние, где, на ваш взгляд, уже можно переключиться на следующий уровень, и нажимаете кнопку измерения. Полученное число закрепляется за конкретным LOD.

Когда все уровни измерены, данные сохраняются в служебную ноду сцены, а временная камера удаляется.



4. Интерфейс

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

4.1. Camera

Кнопка Create LOD Camera создаёт измерительную камеру и наводит её на модель. Камера сразу становится активной в основном вьюпорте Maya. После создания надпись на кнопке меняется на Recreate LOD Camera — повторное нажатие пересоздаёт камеру заново, если что-то пошло не так или вы поменяли модель.

Параметры камеры фиксированные: линза 35 мм, разрешение расчёта 2048 на 858 (разрешение утвержденное на проекте "Кот Ученый". Это сделано намеренно, чтобы измерения у всех моделлеров были сопоставимы.

4.2. Preview (правая часть окна)

Отдельный вьюпорт с собственной камерой, которая при создании автоматически охватывает всю модель целиком (Frame All). Он нужен, чтобы видеть объект вблизи, пока основная камера отъезжает. Это дает возможность наблюдать, как меняется лоды на объекте. И одновременно на основной камере уже оценивать силуэт и в какой момент упрощение перестаёт быть заметным.

Эта камера служебная, в расчётах не участвует и удаляется вместе с основной.

4.3. Distance

Ползунок Near — Far задаёт расстояние от камеры до модели. Справа отображается текущее расстояние в сантиметрах. Шкала логарифмическая: ближняя часть диапазона проходится плавно, дальняя — быстрее, так удобнее работать с большим разбросом дистанций.

4.4. Rotation

Два ползунка вращения камеры вокруг объекта:
- H (горизонталь, 0—360 градусов)
- и V (вертикаль, от минус 90 до плюс 90). Модель при этом не двигается, камера облетает её по сфере, всегда глядя в центр габаритного бокса.

Вращение полезно, чтобы проверить экранный размер с разных ракурсов: у вытянутых объектов сбоку и с торца цифры метрик заметно отличаются.

4.5. LOD Levels

Таблица уровней. Каждая строка — один LOD, колонки означают следующее:

LOD  — имя уровня: Lod0, Lod1, Lod2 и так далее.
Switch (px) — измеренный порог в пикселях. Пока измерения нет, написано not measured. У Lod0 стоит auto, у него собственного порога нет (см. пункт 6.2).
Range — диапазон видимости уровня в пикселях, считается автоматически из порогов соседних уровней.
Camera — кнопка Set. Возвращает камеру на то расстояние, с которого была снята метрика этого уровня. Активна только если измерение уже сделано.

Под таблицей три кнопки:

Add LOD  — добавить новый уровень в конец списка.
Remove — удалить выделенный уровень. Lod0 удалить нельзя.
Measure selected — снять метрику для выделенной строки: записать текущий экранный размер как порог переключения и запомнить дистанцию камеры.

Выделение строки в таблице также переключает Display Layer в сцене: выбранный уровень включается, все остальные Lod-слои отключаются. Под кнопками показывается статус: зелёным, если слой найден и включён, красным, если слоя с таким именем
в сцене пока нет.

Строка Lod0 - зарезервированная и существует всегда. Ее выделить можно, слой при этом тоже переключится, но кнопки измерения и удаления для неё заблокированы.

4.6. Screen Coverage Metrics

Показывает, сколько модель занимает на экране прямо сейчас:

Coverage X    — ширина в пикселях и в процентах от ширины кадра.
Coverage Y    — высота в пикселях и в процентах от высоты кадра.
Max Dim (px)  — наибольшая из двух величин. Это и есть та метрика, которая записывается при нажатии Measure selected.

Кнопка Refresh Metrics пересчитывает значения вручную. Обычно это не требуется: цифры обновляются сами при любом движении ползунков.

4.7. Сохранение

Save Metrics and Remove Camera — записывает все метрики в служебную ноду сцены, после чего удаляет измерительную камеру и камеру предпросмотра, а вьюпорт возвращает к прежнему виду.

Load from node — загружает ранее сохранённые метрики обратно в таблицу. Удобно, если нужно пересмотреть или поправить старые значения.

Select node — выделяет служебную ноду в сцене. Кнопка активна только когда нода существует.



5. Порядок работы

1) Открыть сцену с моделью. Убедиться, что структура групп соответствует пункту 2:
есть root, внутри geo, внутри уровни lod_0, lod_1 и так далее, имена объектов внутри уровней совпадают.

2) Создать Display Layers для уровней с именами Lod0, Lod1, Lod2. Это сильно упрощает работу: инструмент будет переключать их сам при выборе строки в таблице.

3). Нажать Create LOD Camera. Камера встанет так, чтобы модель целиком помещалась в кадр, и станет активной в основном вьюпорте.

4). НажатьAdd LOD — в таблице появится строка Lod1. Выдели её, при этом в сцене включится соответствующий слой, и увидишь упрощённую геометрию.

5). Ползунком Distance отвести камеру назад, наблюдая за моделью. Цель — найти расстояние, на котором подмена lod_0 на lod_1 перестаёт быть заметной. Также важно покрутить Rotation и проверить разные ракурсы: переключение не должно бросаться в глаза ни с одного из них.

6). Найдя нужное положение, нажать Measure selected. В строке Lod1 появится значение в пикселях, а диапазоны в колонке Range пересчитаются.

7). Повторить пункты 4)—6) для остальных уровней. Каждый следующий уровень измеряется дальше предыдущего, то есть его порог в пикселях будет меньше.

8). Нажать Save Metrics and Remove Camera. Данные уйдут в ноду, временные камеры удалятся.



6. Что сохраняется и как это читать

6.1. Служебная нода

Инструмент создаёт в сцене ноду типа network с именем optimization_data. Внутри неё, в строковом атрибуте, лежит JSON примерно такого вида:

    node_name: optimization_data
    type: LOD
    lod_metrics:
        lod0: range [200, 2147483647], distance 812.3
        lod1: range [50, 200],         distance 2400.0
        lod2: range [0, 50],           distance 5100.0

Поле range — диапазон экранных размеров в пикселях, в котором данный уровень должен быть виден. Поле distance — расстояние камеры, с которого снималась метрика; оно нужно только для того, чтобы можно было вернуть камеру в ту же точку кнопкой Set и перепроверить результат.

Число 2147483647 — это технический максимум целого числа, оно означает бесконечность: сверху уровень ничем не ограничен.

6.2. Логика диапазонов

Читается так: уровень активен, пока экранный размер модели попадает в его диапазон.

Screenshot_75.png

lod0 — от порога lod1 и до бесконечности. Пока объект крупнее 200 пикселей, показываем самую детальную версию. Своего верхнего порога у lod0 нет, поэтому в таблице у него написано auto.

lod1 — от порога lod2 до порога lod1, то есть от 50 до 200 пикселей.

lod2 — от нуля до своего порога, от 0 до 50 пикселей. Последний уровень всегда доходит до нуля.

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



7. Советы и FAQ

7.1. Метрика считается по габаритам модели на экране: берётся наибольшая сторона прямоугольника, в который вписывается объект. Для расчёта используется выборка вершин (до 500 точек на меш), поэтому на очень плотной геометрии значение может отличаться на единицы пикселей. Для задачи выбора порога это несущественно.

7.2. Измерять нужно, когда модель целиком помещается в кадр. Если объект вылезает за границы экрана, расчёт упрётся в размер кадра и покажет неверное число.

7.3. Пороги должны идти по убыванию: у lod_1 значение больше, чем у lod_2. Это естественно следует из порядка работы, но если измерять уровни вразнобой, стоит перепроверить итоговую таблицу.

7.4. Кнопка Set в колонке Camera возвращает камеру ровно на сохранённое расстояние, а не пересчитывает его заново. Точность полная, положение воспроизводится один в один.

7.5. Если строка в таблице подсвечена красным статусом "display layer does not exist yet" — значит слоя с таким именем в сцене нет. На измерения это не влияет, но переключать уровни вручную будет неудобно. Создайте слой с именем Lod1, Lod2 и так далее.

7.6. Повторное сохранение перезаписывает ноду целиком. Старые значения не накапливаются, в сцене всегда актуальный набор.