Оптимизируем физику в Unity: рейкастинг | OTUS
🔥 Начинаем BLACK FRIDAY!
Максимальная скидка -25% на всё. Успейте начать обучение по самой выгодной цене.
Выбрать курс

Курсы

Программирование
iOS Developer. Basic
-25%
Python Developer. Professional
-25%
Разработчик на Spring Framework
-25%
Golang Developer. Professional
-25%
Python Developer. Basic
-25%
iOS Developer. Professional
-25%
Highload Architect
-25%
JavaScript Developer. Basic
-25%
Kotlin Backend Developer
-25%
JavaScript Developer. Professional
-25%
Android Developer. Basic
-25%
Unity Game Developer. Basic
-25%
Разработчик C#
-25%
Программист С Web-разработчик на Python Алгоритмы и структуры данных Framework Laravel PostgreSQL Reverse-Engineering. Professional CI/CD Vue.js разработчик VOIP инженер Программист 1С Flutter Mobile Developer Супер - интенсив по Kubernetes Symfony Framework Advanced Fullstack JavaScript developer Супер-интенсив "Azure для разработчиков"
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-25%
DevOps практики и инструменты
-25%
Архитектор сетей
-25%
Инфраструктурная платформа на основе Kubernetes
-25%
Супер-интенсив «ELK»
-16%
Супер-интенсив «IaC Ansible»
-16%
Супер-интенсив "SQL для анализа данных"
-16%
Базы данных Сетевой инженер AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Внедрение и работа в DevSecOps Администратор Linux. Виртуализация и кластеризация Нереляционные базы данных Супер-практикум по использованию и настройке GIT IoT-разработчик Супер-интенсив «СУБД в высоконагруженных системах»
Специализации Курсы в разработке Подготовительные курсы
+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 комментариев
Для комментирования необходимо авторизоваться
🎁 Максимальная скидка!
Черная пятница уже в OTUS! Скидка -25% на всё!