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

Пример оптимизации

TODO В следующих версиях пример будет дополнен остальными пунктами оптимизации

Оптимизируем стандартный префаб аватара Eku и добавим на него вручную одежду "Asteria Lycee", которая идет вместе с аватаром, но оставим чулки от оригинальной одежды. Никакая часть одежды сниматься не будет.

  1. Вытаскиваем аватар на сцену, смотрим характеристики: Исходный аватар
  2. Перетягиваем префаб одежды внутрь аватара (не используем версию из папки MA, расставим все сами для примера): Одежда
  3. В корень аватара на сцене добавляем следующие компоненты:
    1. AAO Trace and optimize, настройки не меняем
    2. MA Mesh Settings, задаем настройки:
      1. Anchor Override Mode: Set
      2. Anchor Override: выбираем точку, относительно которой считается освещение аватара, я обычно ставлю Chest, также иногда встречается Hips (но с Hips аватар может почернеть если погрузить попу в землю)
      3. Bounds Override Mode: Set
      4. Root Bone: Hips
      5. В Bounds оставляем Center всегда по нулям, а Extent (размер границ) ставим по 1.5 (размер будет 3х3х3 метра, соответствует Good аватару с запасом)
    3. MA VRChat Settings, галочка MMD World Support должна быть включена Компоненты в корне аватар
  4. Убираем меши, которые не будут использоваться в аватаре, одним из двух способов:
    1. Удаляем с префаба кнопкой delete. В случае необходимости меш можно будет восстановить из Overrides префаба
    2. Ставим tag: "Editor Only" (чтобы объект не добавлялся в аватар при загрузке) и выключаем GameObject чтобы видеть, что меша нет. В примере далее используется этот вариант Отключение мешей
  5. Удалим с тела полигоны, которые не видно под одеждой, используем способ с компонентом AAO Remove Mesh By Blendshape:
    1. Выбираем Body_base и разжимаем все BlendShapes, понадобится чтобы видеть что мы удаляем: Контур тела до удаления полигонов
    2. Добавляем компонент AAO Remove Mesh By Blendshape
    3. Отмечаем BlendShapes, полигоны которых необходимо удалить. На меше и его контуре удаляемые части исчезнут. Осматриваем аватар и убеждаемся, что удалены только невидимые под одеждой части тела: Удаление полигонов через блендшейп
  6. На одежде присутствуют рукава без блендшейпов, большая часть которых не будет видна под одеждой. Удаляем лишнее с помощью AAO
    1. Выбираем рукава
    2. Добавляем компонент AAO Remove Mesh By Box
    3. Нажимаем Edit this box в компоненте (Gizmos должен быть включен), перетягиваем и настраиваем размеры куба, чтобы внутри оказались все невидимые полигоны, и нажимаем Finish editing box Remove Mesh By Box
  7. Стандартные чулки клипают с обувью из надеваемого костюма, поэтому тоже их обрежем с помощью AAO Remove Mesh By Box, добавляем компонент на чулки и выполняем все действия из предыдущего шага: Обувь
  8. Если собрать аватар (ПКМ на аватар -> Modular Avatar -> Manual Bake Avatar), то на сцене появится копия аватара, которая будет загружаться в VRChat, и из VRChat SDK будет видно, что:
    1. На аватаре, в котором меши не удалялись вообще, а одежда была добавлена поверх стандартной, будет 184 тысячи полигонов.
    2. Количество полигонов с выключенными стандартными частями одежды было 116 тысяч
    3. После удаления лишних полигонов на оставшихся мешах будет 95 тысяч (удалено 21 тысяча полигонов). Чтобы аватар мог быть хотя бы Poor, нужно убрать еще 25 тысяч.
    4. Сжатие полигонов оставим напоследок, т.к. это самая долгая операция.
  9. Сделаем копию аниматора FX и удалим все лишнее (в частности тогглы на оставшиеся части одежды). Для данного аватара остаются:
    1. Лицевые анимации
    2. Управление ушками
    3. Обнуление блендшейпов рта при разговоре (слой LipSyncController)
    4. Управление волшебной палочкой
    5. AFK alt text alt text
  10. Используем Meshia Mesh Simplifier чтобы автоматически обрезать лишние полигоны. На данном этапе придется много значений подбирать руками и смотреть, чтобы оно нормально выглядело. Лучшим вариантом, конечно, будет использование блендера, но это очень долгий путь.
  11. Нажмем на корень аватара правой кнопкой мыши и добавим Meshia Mesh Simplification - Meshia Cascading Avatar Mesh Simplifier Добавление Meshia
  12. В аватар добавится компонент со списком всех оставшихся мешей и количеством полигонов, которые для них нужно оставить. alt text
  13. С галочкой Enable NDMF Preview сжатие мешей происходит "в прямом эфире" и сразу видно результат, но это грузит комп, поэтому при необходимости галочку включайте только для проверки настроек
  14. ВНИМАНИЕ! На версии v3.0.0 Meshia Mesh Avatar Simplifier НЕ ЗНАЕТ про удаленные полигоны с мешей и считает общее кол-во полигонов по всем мешам. Поэтому на данном этапе нужно посмотреть сколько полигонов удаляется с аватара после сборки и прибавить разницу в полигонах к 70000 в Target Triangle Count, в нашем случае это примерно 116 тысяч - 95 тысяч примерно 21 тысяча, т.е пишем 91000.
    1. После сжатия количество реально получившихся полигонов может плавать, поэтому данный параметр может меняться в процессе работы
  15. На данном этапе проходим по всем мешам, смотрим на них со всех сторон и меняем ползунки/галочки, запускаем Play Mode в юнити с Gesture Manager и двигаем аватаром, пока не получится приемлемый результат. Тут простой инструкции нет, внешний вид будет сильно зависеть от многих вещей.
  16. После сжатия на чулках остался плохо обрезанный бантик, поэтому он был удален с помощью MA Mesh Cutter и MA Vertex Filter alt text alt text
  17. Итого для данной модели получились следующие настройки для 70к полигонов, не считая детальных: alt text