Моделируйте роботов с большей реалистичностью: Что нового в физике для Unity 2021.2 beta

Бета-версия Unity 2021.2 содержит улучшения в функциях физики, которые позволяют использовать новые возможности, упрощая создание и ускоряя отладку в области робототехники.
Компонент ArticulationBody лежит в основе нашего симулятора робототехники, поскольку позволяет моделировать кинематические цепи с высокой точностью, что необходимо для роботизированных рук, манипуляторов, мобильных роботов и многого другого. Мы прислушивались к отзывам пользователей и внесли множество изменений, чтобы улучшить производительность и удобство использования.
Свойства компонента ArticulationBody были перегруппированы для лучшего восприятия. Теперь параметры, связанные с массой, находятся в одном визуальном блоке, за ними следуют параметры, связанные с якорями, а затем с приводами. Эти изменения были перенесены в Unity 2021.1 и 2020.3.

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

Инструменты для работы с суставами поддерживают все типы суставов ArticulationBody, поскольку они были расширены для редактирования Prismatic Joint, что было недоступно ранее. Дополнительную информацию или отзывы можно найти в этой ветке форума.

В ArticulationBody появилась новая настройка, позволяющая выбрать режим обнаружения столкновений. Поддерживаются все режимы непрерывного обнаружения столкновений, как и в Rigidbody. Он был перенесен в версии 2021.1 и 2020.3, поскольку считался важным для некоторых случаев использования. Например, обучение модели машинного обучения для управления ходьбой гуманоидного персонажа потребовало включения непрерывного обнаружения столкновений на ногах, поскольку в противном случае наша модель могла научиться использовать импульс депенетрации, исходящий от ног, перекрывающих землю, в своих интересах: она двигалась вперед намного быстрее, чем обычно, и также были обнаружены некоторые модели полета.
Были добавлены дополнительные варианты ArticulationBody.AddForce, соответствующие вариантам Rigidbody.AddForce. Применяйте силу, ускорение или импульс напрямую. Это облегчает перенос существующего кода с Rigidbody на ArticulationBody.
Мы улучшили ясность документации, явно указав граничные условия и особые случаи. В этом выпуске появилась новая страница для компонента ArticulationBody.
Основываясь на отзывах пользователей, мы также включили в документацию единицы измерения для всех C#-свойств компонента ArticulationBody; например, см. массу.
Мы продолжаем вкладывать средства в упрощение использования конвейеров, связанных с общей физикой, и в обеспечение большей гибкости, чтобы приспособить их к различным моделям использования. Мы считаем, что это делает возможным более сложное моделирование, поскольку создатели теперь могут использовать дополнительные функции для лучшего понимания своей области и, таким образом, настраивать моделирование для достижения более точных результатов.
Тем не менее, отладчик физики теперь поддерживает префабы должным образом - как в режиме изоляции, так и в режиме контекста. Это позволяет в большей степени использовать принцип проектирования "разделяй и властвуй", наблюдая за свойствами префабов в отдельности, в то время как остальная часть сцены не показывается.

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

В Physics Profiler были добавлены дополнительные метрики. Теперь доступно больше графиков, а в текстовой панели отображается больше данных о текущей симуляции. Среди новых дополнений - общее количество запросов к физике, количество тел сочленения и количество трансформаций, синхронизированных с последним кадром.

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

Наконец, использование памяти теперь также доступно в виде метрики.
Пакетные запросы по физике - это способ повысить производительность запросов по физике (например, Raycasts), запустив их на всех доступных ядрах, в отличие от обычного случая, когда мы запускаем их исключительно на главном потоке.
В идеале код, зависящий от результатов пакетного запроса, сам является заданием на C#, чтобы получить максимальный прирост производительности. Однако основная проблема, мешавшая этому, заключалась в том, что удар коллайдера сообщался как компонент Unity(RaycastHit.collider). Ни один из компонентов Unity не доступен вне основного потока, так что это весьма ограничивает применение пакетных запросов.
Чтобы решить эту проблему, теперь выводится идентификатор экземпляра коллайдера, который был поражен. Идентификаторы экземпляров могут свободно использоваться вне основного потока, поэтому больше не должно быть проблем с цепочкой заданий запросов.
Режим трения патча - это режим моделирования трения по умолчанию в Unity. Это, конечно, компромисс в сторону большей производительности, а не точности моделирования, но его все же можно настроить, чтобы получить приемлемые результаты в рамках ограниченного вычислительного бюджета.
В настройках физики теперь доступен новый улучшенный режим трения патча. Он решает проблему, связанную с тем, что когда в контактной паре возникает более одного якоря трения, силы трения могут быть в два раза сильнее, чем предсказывают аналитические модели.
Например, на следующем графике кубики с разным динамическим трением скользят по плоскости. Красные кубики показывают ожидаемые конечные положения, предсказанные теоретически. Синие кубики используют обычное трение патча и, кажется, проходят примерно половину пути до цели. Зеленые кубики используют новое улучшенное трение патча и приближаются к ожидаемым значениям.

Новый API для модификации контактов уже доступен, и мы собираем отзывы в этой ветке форума. Он позволяет настраивать реакцию физического движка на контакты. Для любой контактной пары можно менять точки контакта, ограничивать импульсы, подаваемые решателем, настраивать скорость цели и многое другое. Помимо прочего, он позволяет проделывать отверстия в любых коллайдерах, создавать липкие контакты и различные конвейерные ленты, работающие на основе физики. В примере ниже сфера проваливается сквозь плоскость, потому что игнорирует точки соприкосновения с ней (можно сделать чувствительной к площади). Справа кубик отскакивает от двух наклонных плоскостей, но не вращается - потому что реакция на контакт была настроена так, чтобы исключить вращение.

Благодаря этим улучшениям пользователи получают более реалистичные результаты моделирования в Unity. Многие из этих улучшений были сделаны на основе предложений или отзывов нашего сообщества, и мы приглашаем вас присоединиться к обсуждению. Чтобы начать работу с робототехникой в Unity, ознакомьтесь с некоторыми нашими примерами и демонстрациями на Unity Robotics Hub.