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

Удаление полигонов

Удаление полигонов с помощью удаления мешей

Удаление любого меша уменьшает количество треугольников (логично) на размер меша.

Удаление полигонов с помощью блендшейпов

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

Компонент "AAO Remove Mesh By Blendshape"

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

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

AAO Remove Mesh by Blendshape

Компонент "MA Shape Changer"

Компонент является т.н. Reactive Component из Modular Avatar (документация), и может быть добавлен почти на любой GameObject (может использоваться для создания тогглов).

В нашем случае для удаления полигонов компонент должен находиться на GameObject, который всегда активен:

  1. Отдельный GameObject в аватаре, созданный специально для оптимизации
  2. GameObject с мешем, из которого удаляются полигоны
  3. GameObject с мешем одежды, который скрывает удаляемые полигоны. В таком случае в аватаре должны быть удалены тогглы/анимации, выключающие этот меш.

MA Shape Changer

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

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

Компоненты "MA Mesh Cutter" и "MA Mesh Filter - By Blendshapes"

Компонент также является Reactive Components, как и MA Shape Changer из предыдущего раздела, на него распространяются те же правила, куда можно добавить компонент.

Однако он гораздо более гибкий в плате выбора удаляемых полигонов за счет использования фильтров из MA Mesh Filter (позволяет комбинировать разные способы выбора удаляемых полигонов).

Порядок работы следующий:

  1. Добавьте MA Mesh Cutter на нужный GameObject
  2. В Target Renderer укажите меш, в котором будут удаляться полигоны
  3. В Multiple vertex filters handling указывается условие, по которому будут выбираться полигоны из нескольких фильтров
    1. Если удаляется несколько блендшейпов за раз, ставьте Vertices selected by any filters
    2. Если нужно удалить часть полигонов из выбранного (например, только блендшейпы на одной стороне аватара), ставьте Vertices selected by all filters
  4. Добавьте в этот же GameObject компонент MA Vertex Filter - By Blendshape в текущий объект
  5. Нажмите + и укажите блендшейпы удаляемых полигонов, повторите для каждого блендшейпа

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

На скриншотах ниже приведен пример комбинации фильтров для удаления блендшейпов только на одной ноге (полигоны выбираются по блендшейпам и по одной стороне оси X):
alt text alt text

Удаление полигонов с помощью "коробки"

Компонент "AAO Remove Mesh By Box"

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

Порядок действий:

  1. Добавьте компонент в тот же GameObject, где находится меш
  2. Включите Gizmos чтобы видеть "коробки" (области, внутри которых удаляются полигоны)
    Gizmos
  3. Нажмите Edit This Box чтобы переключиться в режим перемещения "коробки".
    • Для "коробки" работают инструменты перемещения и поворота
    • Размер изменяется в поле Size, там же можно вручную задать координаты и поворот
    • По завершению нажмите Finish Editing Box При нажатии + справа снизу или увеличении числа в поле Boxes будут созданы дополнительные "коробки" с координатами и размером последней "коробки" в текущем списке
      Editing Box

Удаление полигонов по костям

Компоненты "MA Mesh Cutter" и "MA Mesh Filter - By Bone"

Работает аналогично MA Mesh Cutter + MA Mesh Filter - By Blendshape, только выбирается фильтр By Bone.

Порядок работы с MA Mesh Filter - By Bone:

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

До фильтра:
alt text

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

Удаление полигонов с помощью маски

Компонент "AAO Remove Mesh By Mask"

Компонент добавляется в тот же GameObject, где находится меш. Используется для удаления полигонов по черно-белой маске. Скорее всего такую маску придется нарисовать вручную через редактор изображений, в компонент встроен редактор масок.

  1. Добавьте в меш с удаляемыми полигонами компонент AAO Remove Mesh By Mask
  2. Нужно указать материал, из которого будут удаляться полигоны, поставьте галочку Apply To Material Slot X, где X - номер слотам материала в меше.
  3. Нужно указать файл маски.
    1. Если создаете новую маску, нажмите кнопку Create. В появившемся окне укажите папку и название файла маски в проекте. Далее в инструкции рассматривается этот вариант
      AAO Remove Mesh By Mask - Create
    2. Если указываете файл с маской, он должен быть черно-белым, вставьте его в Mask Texture. Если появилась ошибка Mask Texture is not readable, нажмите кнопку Make Readable.
  4. Поле Remove Mode показывает какой цвет маски соответствует удаляемым текстурам, из вариантов - белый и черный.
  5. Для редактирования маски справа от поля Mask Texture нажмите кнопку Edit
  6. В появившемся окне будет видна полупрозрачная базовая текстура, на которой белым будет выделено какая часть текстуры наложена на выбранный меш.
    AAO Remove Mesh By Mask - View UV example
  7. На настройках по умолчанию вы рисуете черной кистью удаляемую область. Все изменения сразу же будут отображены на сцене.
  8. После окончания редактирования нажмите Save для сохранения маски
    alt text

Компоненты "MA Mesh Cutter" и "MA Mesh Filter - By Mask"

Работает аналогично MA Mesh Cutter + MA Mesh Filter - By Blendshape, только выбирается фильтр By Mask.

Порядок работы c MA Mesh Filter - By Mask:

  1. В поле Material Slot выбирается материал, у которого будут удаляться полигоны
  2. В Mask Texture указывается черно-белая маска с удаляемыми областями.
  3. В Delete Mode указывается какой цвет маски выбирает полигоны для удаления

TODO Попробовать предложенный редактор "nekobako's Mask Texture Editor", добавить в гайд

alt text