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

PhysBone Components

Описание

Это количество компонентов VRC Phys Bone на аватаре. Каждый такой компонент задает общие настройки физики для всех костей, которыми он управляет:

  • PhysBone управляет всеми костями, которые принадлежат его рутовой кости (на которую добавлен PhysBone или которая добавлена в параметр Root Transform), кроме тех, которые добавлены в Ignore Transforms
  • Максимум костей на один PhysBone составляет 256 (хотя я ни разу не видел столько на одном PhysBone)
  • Если рутовая кость PhysBone содержит несколько костей, то она по умолчанию не используется в физике, ее нельзя увидеть и потрогать (меняется параметром Multi Child Root, в подавляющем большинстве случаев используется как Ignore, т.е. значение по умолчанию)

С PhysBone Components можно сделать следующее:

  1. Объединить одинаковые PhysBones. Самый быстрый вариант
  2. Объединить похожие PhysBones. У таких может отличаться хотя бы один параметр физики, и для них надо подобрать его общее значение.
  3. Удалить компоненты, тогда физика работать не будет.
    1. Удалять в первую очередь можно физику с малозаметных вещей на аватаре (например, шнурки на обуви)
    2. Удаление компонентов часто может использоваться с удалением полигонов, которыми управлял PhysBone (например, сережки, которые не видно за волосами)

Зачастую авторы добавляют по PhysBone-компоненту на каждую отдельную цепочку костей, даже если их настройки не отличаются. Поэтому обычно не составляет проблем уменьшить кол-во таких компонентов в несколько раз, используя только объединение одинаковых PhysBones.

warning

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

Компонент "AAO Merge PhysBone"

Для объединения костей удобно использовать компонент AAO Merge PhysBone. Позволяет недеструктивно объединять PhysBones в один, показывает чем отличаются указанные настройки и что можно с ними сделать. Компонент можно добавлять:

  1. На рутовую (общую, родительскую) кость без PhysBones, тогда новый PhysBone будет находиться на этой кости
  2. На новый Game Object рядом с объединяемыми костями (полезно если объединяется только часть PhysBones).
    1. Можно поставить галочку Make Children of me, тогда кости будут перенесены в данный GameObject, иначе будет создан отдельный объект на месте родительской кости

    TODO Новая рутовая кость точно увеличит кол-во PhysBones Affected Transforms, а вот GameObject только с PhysBone-компонентом - не факт, проверить.

  3. На отдельный Game Object вне арматуры (например, если вся физика в аватаре/одежде указана отдельно)

Если компонент добавлен в отдельный GameObject в арматуре, можно поставить галочку Make Children of Me чтобы использовать этот GameObject в качестве рутовой кости.

В список Components добавляются все объекты/кости с компонентом VRC Phys Bone, которые необходимо объединить. alt text

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

Доступные действия с параметром можно посмотреть при нажатии кнопки C справа от значения параметра. Возможные варианты:

  • Copy - Скопировать значения параметра
  • Override - Перезаписать значение параметра
  • Clear - Обнуляет значения Endpoint Position (длины последних костей в цепочках PhysBone) и добавляет в конец каждой цепочки костей end bone на расстоянии из параметра (Увеличивает количество PhysBone Transforms count по количеству добавленных end-костей и PhysBone Collider Transforms по количеству коллайдеров X end-костей)
  • Fix - Встречается у угла поворота (Rotation) костей в Limits, изменяет поворот костей в арматуре чтобы им всем можно было выставить одинаковые настройки в PhysBone (без компонента такое можно сделать только в 3D-редакторе моделей)
  • Merge - Встречается у списка коллайдеров, добавляет все встречающиеся в PhysBones коллайдеры в объединенный компонент.
    warning

    Увеличивает количество PhysBone Collider Transforms, т.к. к костям будут применены дополнительные коллайдеры

Способы оптимизации

Одинаковые PhysBones

Зачастую авторы добавляют на каждую отдельную ветвь кости отдельный PhysBone и выставляют для них полностью одинаковые настройки. Такие достаточно просто добавить в список AAO Merge PhysBone и радоваться жизни. В настройках не будет гореть никаких предупреждений alt text

PhysBones с отличающимися значениями параметров

Для PhysBones, отличающихся только числом в значении какого-либо параметра, можно опытным путем подобрать одинаковый для всех параметр (самый маленький/средний/самый большой).

  1. Выберите действие Override для параметра, вызывающего ошибку alt text
  2. Подберите значение из оригинальных PhysBones или среднее между ними alt text
  3. Если для параметра были заданы кривые, но отличается только численное значение, кривые в Override все равно сбросятся, см. инструкцию для параметров с кривыми

PhysBones с отличающимися кривыми в параметрах (curves)

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

alt text

Отличия в кривых могут заметно изменить физику объединенных PhysBones и заставить вас посидеть/подумать над настройками, поэтому рекомендую перед этим попробовать объединить что-нибудь еще и вернуться к таким костям позже.

Anyway, если вы выбрали конкретную кривую из объединяемых костей и хотите вставить ее в Merge PhysBone, то есть нюанс. В юнити нельзя скопировать и вставить кривые напрямую через условный Ctrl+C-Ctrl+V (подскажите если я не знаю), но есть хитрость:

  1. Откройте желаемую кривую в одном из оригинальных PhysBones
  2. Нажмите шестеренку слева снизу, у вас откроется список пресетов
  3. Нажмите "New" чтобы добавить текущую кривую в конец списка пресетов alt text
  4. В компоненте Merge PhysBone выбираете действие Override, вставляете численные значения параметра и нажимаете кнопку C справа от численных значений для задания кривой
  5. Так же открываете список пресетов через шестеренку и выбираете последний, (ну или все пресеты приведены снизу под текущей кривой)

PhysBones с отличающимся поворотом костей в Limits

У каждой кости в арматуре есть собственный угол поворота. Относительно этого угла рассчитываются ограничения поворота кости в PhysBones (раздел Limits). Часто бывает, что авторы не поворачивают кости модели в 3D-редакторе, а создают для каждой кости отдельный PhysBone и задают там угол поворота.

Такие PhysBones просто так объединить в один не получится, если не повернуть кости, т.к. параметр ограничений поворота должен быть у всех одинаковый. Задание в наглую одинакового поворота практически гарантированно сломает физику. Повернуть саму кость в арматуре в Unity не получится, потому что вместе с костью повернется и относящаяся к ней часть модели.

Однако это решается с помощью AAO Merge PhysBone:

  1. Для параметра Rotation в Limits выберете действие Fix alt text
  2. Если у PhysBone задан параметр Endpoint Position, то возникнет новое предупреждение. Параметр нужно будет обнулить, выберите действие Clear для Endpoint Position. Это добавит для аватара несколько новых костей на расстоянии из Endpoint Position чтобы не сломать физику (увеличит PhysBone Transforms count для всех по количеству последних костей и увеличит PhysBone Collider Transforms для PhysBones с коллайдерами) alt text

PhysBones с отличающимися коллайдерами

Если у PhysBones отличаются списки коллайдеров, то коллайдеры для новой кости можно объединить. Однако это может значительно увеличить PhysBone Collider Transform, который, считается как кол-во костей PhysBones x кол-во коллайдеров.

Отличающиеся коллайдеры

  1. Чтобы объединить списки, нужно для Colliders выбрать действие Merge. Merge Colliders
  2. Чтобы не увеличивать сильно/вообще PhysBone Collider Transform, можно задать собственный список коллайдеров, выбрав действие Override.
    1. Из списка можно убрать коллайдеры, взаимодействие с которыми может происходить нечасто (например, для длинных волос убрать коллайдеры на предплечье, оставить на плечах)

Возможные ошибки

There's no source PhysBones

Ошибка "There's no source PhysBones" говорит о том, что при сборке в компоненте AAO Merge PhysBone не осталось существующих костей. Если PhysBones есть в списке компонента, то это значит, что сами PhysBones были удалены при сборке. Проверьте:

  • Включены ли кости с PhysBone Component и включен ли PhysBone Component в них. Если выключенные PhysBones не включаются в анимациях, они будут удалены
  • Если все включено, нет ли в инспекторе у кости с PhysBone компонентом или ее родительскими костями тега Editor only - объекты с таким тегом не попадают в аватар. Если PhysBones должны быть включены, поменяйте тег на Undefined
  • Если же вы специально удалили оригинальные кости, удалите и соответствующий AAO Merge PhysBone alt text