Удаление полигонов
Удаление полигонов с помощью удаления мешей
Удаление любого меша уменьшает количество треугольников (логично) на размер меша.
Удаление полигонов с помощью блендшейпов
В большинстве баз для аватаров есть, например, блендшейпы для сжатия частей тела, которые скрыты под одеждой. Они используются чтобы тело не клипало (не было видно сквозь одежду) в случае несовпадения весов, полигонов и не только. Эти же блендшейпы удобно использовать для удаления полигонов.
Компонент "AAO Remove Mesh By Blendshape"
Компонент добавляется в тот же GameObject, где находится меш. Галочка напротив нужного блендшейпа удалит его из модели при загрузке и уберет видимость на сцене. На скриншоте ниже оранжевым цветом выделена оставшаяся часть меша тела аватара.
В документации на компонент параметр Tolerance рекомендуют увеличить, если нужные полигоны не удаляются и уменьшить, если наоборот. На практике мне ни разу не приходилось его менять, но встречался с ававтарами, арматура которых была увеличена в 100 раз чтобы модель была нормального размера, у таких этот параметр должен помочь (хотя лучше нормально пересохранить такую модель с помощью блендера).

Компонент "MA Shape Changer"
Компонент является т.н. Reactive Component из Modular Avatar (документация), и может быть добавлен почти на любой GameObject (может использоваться для создания тогглов).
В нашем случае для удаления полигонов компонент должен находиться на GameObject, который всегда активен:
- Отдельный GameObject в аватаре, созданный специально для оптимизации
- GameObject с мешем, из которого удаляются полигоны
- GameObject с мешем одежды, который скрывает удаляемые полигоны. В таком случае в аватаре должны быть удалены тогглы/анимации, выключающие этот меш.

Для каждого элемента в списке указывается меш и удаляемый блендшейп. Режим должен стоять Delete для удаления полигонов.
Режим Delete работает следующим образом: если объект не выключается анимациями/тогглами в аватаре - удаляет полигоны, иначе устанавливает блендшейп на 100, когда активен.
Если выбрать меш, с которого удаляются полигоны, оранжевым цветом будут выделены оставшиеся полигоны.

Компоненты "MA Mesh Cutter" и "MA Mesh Filter - By Blendshapes"
Компонент также является Reactive Components, как и MA Shape Changer из предыдущего раздела, на него распространяются те же правила, куда можно добавить компонент.
Однако он гораздо более гибкий в плате выбора удаляемых полигонов за счет использования фильтров из MA Mesh Filter (позволяет комбинировать разные способы выбора удаляемых полигонов).
Порядок работы следующий:
- Добавьте
MA Mesh Cutterна нужный GameObject - В
Target Rendererукажите меш, в котором будут удаляться полигоны - В
Multiple vertex filters handlingуказывается условие, по которому будут выбираться полигоны из нескольких фильтров- Если удаляется несколько блендшейпов за раз, ставьте
Vertices selected by any filters - Если нужно удалить часть полигонов из выбранного (например, только блендшейпы на одной стороне аватара), ставьте
Vertices selected by all filters
- Если удаляется несколько блендшейпов за раз, ставьте
- Добавьте в этот же GameObject компонент
MA Vertex Filter - By Blendshapeв текущий объект - Нажмите
+и укажите блендшейпы удаляемых полигонов, повторите для каждого блендшейпа
Если выбрать меш, с которого удаляются полигоны, оранжевым цветом будут выделены оставшиеся полигоны.
На скриншотах ниже приведен пример комбинации фильтров для удаления блендшейпов только на одной ноге (полигоны выбираются по блендшейпам и по одной стороне оси X):

Удаление полигонов с помощью "коробки"
Компонент "AAO Remove Mesh By Box"
Компонент удаляет все полигоны внутри заданной прямоугольной области (коробки). Таких областей может быть несколько на одном компоненте.

Порядок действий:
- Добавьте компонент в тот же GameObject, где находится меш
- Включите
Gizmosчтобы видеть "коробки" (области, внутри которых удаляются полигоны)

- Нажмите
Edit This Boxчтобы переключиться в режим перемещения "коробки".- Для "коробки" работают инструменты перемещения и поворота
- Размер изменяется в поле
Size, там же можно вручную задать координаты и поворот - По завершению нажмите
Finish Editing BoxПри нажатии+справа снизу или увеличении числа в полеBoxesбудут созданы дополнительные "коробки" с координатами и размером последней "коробки" в текущем списке

Удаление полигонов по костям
Компоненты "MA Mesh Cutter" и "MA Mesh Filter - By Bone"
Работает аналогично MA Mesh Cutter + MA Mesh Filter - By Blendshape, только выбирается фильтр By Bone.
Порядок работы с MA Mesh Filter - By Bone:
- В поле
Target Boneдобавляется кость, полигоны которой нужно удалить (смотрит по весам) - в поле
Weight Thresholdуказываются допуски, по котором выбираются полигоны от веса. Увеличиваете - удаляется меньше полигонов - В отличие от
By Blendshape, в фильтреMA Mesh Filter - By Boneможно указать одну кость, так что если нужно за раз удалить полигоны с нескольких костей, добавляет по одному фильтру на каждую кость, аMultiple vertex filters handlingставится в режимVertices selected by any filter
До фильтра:

После фильтра:

Удаление полигонов с помощью маски
Компонент "AAO Remove Mesh By Mask"
Компонент добавляется в тот же GameObject, где находится меш. Используется для удаления полигонов по черно-белой маске. Скорее всего такую маску придется нарисовать вручную через редактор изображений, в компонент встроен редактор масок.
- Добавьте в меш с удаляемыми полигонами компонент
AAO Remove Mesh By Mask - Нужно указать материал, из которого будут удаляться полигоны, поставьте галочку
Apply To Material Slot X, гдеX- номер слотам материала в меше. - Нужно указать файл маски.
- Если создаете новую маску, нажмите кнопку
Create. В появившемся окне укажите папку и название файла маски в проекте. Далее в инструкции рассматривается этот вариант

- Если указываете файл с маской, он должен быть черно-белым, вставьте его в
Mask Texture. Если появилась ошибкаMask Texture is not readable, нажмите кнопкуMake Readable.
- Если создаете новую маску, нажмите кнопку
- Поле
Remove Modeпоказывает какой цвет маски соответствует удаляемым текстурам, из вариантов - белый и черный. - Для редактирования маски справа от поля
Mask Textureнажмите кнопку Edit - В появившемся окне будет видна полупрозрачная базовая текстура, на которой белым будет выделено какая часть текстуры наложена на выбранный меш.

- На настройках по умолчанию вы рисуете черной кистью удаляемую область. Все изменения сразу же будут отображены на сцене.
- После окончания редактирования нажмите
Saveдля сохранения маски

Компоненты "MA Mesh Cutter" и "MA Mesh Filter - By Mask"
Работает аналогично MA Mesh Cutter + MA Mesh Filter - By Blendshape, только выбирается фильтр By Mask.
Порядок работы c MA Mesh Filter - By Mask:
- В поле
Material Slotвыбирается материал, у которого будут удаляться полигоны - В
Mask Textureуказывается черно-белая маска с удаляемыми областями. - В
Delete Modeуказывается какой цвет маски выбирает полигоны для удаления
TODO Попробовать предложенный редактор "nekobako's Mask Texture Editor", добавить в гайд
