Оптимизируем физику в Unity: рейкастинг | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Разработчик IoT
-13%
C# Developer. Professional
-9%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Java Developer. Professional JavaScript Developer. Professional Базы данных Android Developer. Professional Framework Laravel Cloud Solution Architecture Highload Architect Reverse-Engineering. Professional Vue.js разработчик Agile Project Manager VOIP инженер Scala-разработчик Супер-практикум по использованию и настройке GIT Symfony Framework Java Developer. Basic Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Экспресс-курс «IaC Ansible»
-10%
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Дизайн сетей ЦОД
-13%
NoSQL Основы Windows Server MS SQL Server Developer Инфраструктурная платформа на основе Kubernetes Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Оптимизируем физику в Unity: рейкастинг

otus_Posts_25may_VK_1000x700_3-20219-cf4b8f.jpg

Рейкастинг — полезный и довольно мощный инструмент в физическом движке. Он даёт возможность направлять луч какой-нибудь длины в определённом направлении, получая информацию о произошедших столкновениях. Производительность рейкастинга зависит от типов коллайдеров на сцене и длины луча.

Предлагаем вам ряд советов по применению рейкастинга: — очевидно, но факт: стремитесь к наименьшему числу лучей; — не стоит делать лучи длиннее, чем это действительно надо, ведь чем длиннее будет луч, тем больше объектов придётся проверять на столкновение; — не стоит применять рейкасты внутри метода FixedUpdate(). Мало того, иногда бывает излишним даже применение их внутри метода Update(); — обращайте внимание на типы используемых коллайдеров. Например, рейкастинг с меш-коллайдером обойдётся достаточно дорого. При этом неплохим решением станет создание дочернего объекта с примитивными коллайдерами и повторение с их помощью приблизительной формы меша. Ведь все дочерние коллайдеры у родительского Rigidbody будут вести себя, как составные коллайдеры. Если же вам очень надо использовать именно меш-коллайдеры, то сделайте их хотя бы выпуклыми; — уточняйте, во что конкретно должен попадать луч и, если это возможно, конкретизируйте слой-маску в функции рейкаста; — не забывайте, что данные, которые указываются вами в функции рейкаста, являются не идентификатором слоя, а битовой маской. Если желаете, чтобы луч сталкивался с объектом, находящимся на слое с идентификатором 10, указывайте битовый сдвиг влево на 10 (1<<10), а не просто 10. Если желаете, чтобы луч врезался во всё, кроме объектов на слое 10, используйте побитовый оператор дополнения (~) — он инвертирует каждый бит в побитовой маске.

Как это выглядит на практике

Теперь рассмотрим простую демо-сцену, в которой объект стреляет лучами, которые сталкиваются лишь с зелёными объектами.

Простая демо-сцена с рейкастами:

physicsbestpractices04_1-20219-8dfbb8.jpg

Здесь, чтобы получить данные профилировки, ведётся управление числом и длиной лучей. Давайте посмотрим на них на графике, где представлена зависимость производительности от числа лучей:

physicsbestpractices05_1_1-20219-9f41a7.jpg

А теперь посмотрим на зависимость производительности от длины лучей:

physicsbestpractices06_1-20219-04940f.jpg

А теперь посмотрим, что произойдёт, если мы поменяем примитивные коллайдеры на меш-коллайдеры. Меш-коллайдеры на сцене (110 полигонов на коллайдер):

physicsbestpractices07_1-20219-566b3e.jpg

Примитивные коллайдеры по сравнению с меш-коллайдерами в данных профилировки:

physicsbestpractices08_1-20219-67620e.jpg

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

По материалам статьи «Physics Best Practices»

Также возможно вам будет интересно: — «Оптимизируем физику в Unity: слои и матрица коллизий».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться