Приветствую всех друзья! В прошлой статье я рассказал о настройках графики в окне настроек проекта. Сегодня я продолжу цикл статей о настройках проекта, и на очереди у нас вкладка настройки физики для 3D проектов.
Используйте настройки физики (находятся в окне настроек проекта по пути Edit\Project Settings, вкладка Physics), чтобы применить глобальные настройки для 3D физики. Для управления 2D физикой используйте вкладку Physics 2D, следующую статью я как раз посвящу ей.
Эти параметры определяют пределы точности физического моделирования. Вообще говоря, более точное моделирование требует больших затрат на обработку, поэтому эти настройки предлагают способ обменять точность на производительность.
- Gravity – используйте оси X, Y и Z чтобы задать величину силы тяжести, приложенный ко всем компонентам RigidBody. Для реалистичных настроек гравитации примените отрицательное число к оси Y. Гравитация определяется в мировых единицах на квадрат в секунду. Если вы увеличиваете гравитацию, вам также может потребоваться увеличить значение параметра Default Solver Iterations для поддержания стабильных контактов.
- Default Material – установите ссылку на физический материал по умолчанию, который будет использоваться, если он не был назначен отдельному коллайдеру.
- Bounce Threshold – Установите значение скорости. Если два сталкивающихся объекта имеют относительную скорость ниже этого значения, они не отскакивают друг от друга. Это значение также уменьшает дрожание, поэтому не рекомендуется устанавливать его на очень низкое значение.
- Sleep Threshold – установите глобальный порог энергии, ниже которого не кинетический Rigidbody (то есть тот, который не контролируется физической системой) может заснуть. Когда Rigidbody спит, он не обновляется каждый кадр, что экономит ресурсы системы. Если кинетическая энергия RigidBody деленная на его массу, находится ниже этого порога, то оно является кандидатом на сон.
- Default Contact Offset – установите расстояние обнаружения столкновения, которое система использует для генерации контакта при коллизии. Значение должно быть положительным, и если оно установлено слишком близко к нулю, это может вызвать дрожание. По умолчанию это значение равно 0,01. Коллайдеры генерируют контакты при столкновении только в том случае, если их расстояние меньше суммы значений смещения контактов.
- Default Solver Iterations - определите, сколько процессов решателя (solver) Unity выполняется при каждом физическом кадре. Решатели - это небольшие задачи физического движка, которые определяют ряд физических взаимодействий, таких как движение суставов (joints) или управление контактом между перекрывающимися компонентами RigidBody. Это свойство влияет на качество выходных данных решателя, и рекомендуется изменить его в случае, если свойство Time.fixedDeltaTime установлено в значение не по умолчанию, или конфигурация является очень требовательной. Как правило, он используется для уменьшения дрожания, возникающего в результате стыков или контактов.
- Default Solver Velocity Iterations - установите, сколько процессов скорости (velocity) выполняет решатель в каждом физическом кадре. Чем больше процессов выполняет решатель, тем выше точность результирующей скорости выхода после отскока RigidBody. Если вы испытываете проблемы с сочлененными компонентами RigidBody или регдолами (Ragdolls), слишком сильно движущимися после столкновений, попробуйте увеличить это значение.
- Queries Hit Backfaces - включите этот параметр, если вам нужны запросы физики (например, Physics.Raycast) для обнаружения попаданий с обратной стороны треугольников у MeshColliders. По умолчанию этот параметр отключен.
- Queries Hit Triggers - включите эту опцию, если вы хотите, чтобы физические тесты попадания (такие как Raycasts, Sphere Casts или Sphere Tests) возвращали попадание, когда они пересекаются с коллайдером, помеченным как триггер. Отдельные рейкасты могут переопределить это поведение. По умолчанию этот параметр включен.
- Enable Adaptive Force - включите эту опцию, чтобы включить адаптивную силу. Адаптивная сила влияет на то, как силы передаются через кучу или стопку объектов, чтобы дать более реалистичное поведение. По умолчанию этот параметр отключен.
- Contacts Generation - выберите метод генерации контактов.
- Legacy Contacts Generation - до Unity 5.5 Unity использовала метод генерации контактов, основанный на теореме о разделительной оси (SAT. PCM более эффективен, но для более старых проектов, возможно, Вам будет проще продолжать использовать SAT, чтобы избежать необходимости немного изменить физику. PCM может привести к немного отличному от SAT отскоку, а также уменьшить количество бесполезных контактов, которые окажутся в буферах контактов (то есть массивы, которые вы получаете при столкновении коллайдеров и которые передаются в OnCollisionEnter, OnCollisionStay и OnCollisionExit). Совет по обновлению: чтобы перенести проект, созданный с Unity 2018.2 или ниже, возможно, потребуется обновить скрипты для работы с кодом, который работает с выбором контактов.
- Persistent Contacts Manifold (PCM) - каждый физический кадр генерирует меньше контактов, и больше контактных данных совместно используется между кадрами. Путь генерации контактов PCM также является более точным и обычно обеспечивает лучшую обратную связь при столкновении в большинстве случаев. Это значение по умолчанию.
- Auto Simulation - включите этот параметр, чтобы автоматически запустить физическую симуляцию или разрешить явный контроль над ней.
- Auto Sync Transforms - включите этот параметр, чтобы автоматически синхронизировать изменения преобразований с физической системой всякий раз, когда компонент Transform изменяется.
- Reuse Collision Callbacks – включение данного параметра определяет, должен ли сборщик мусора повторно использовать только один экземпляр типа Collision для всех обратных вызовов collision. Включение данного параметра повышает производительности, если вы используете в коде методы обнаружения коллизий.
- Cloth Gravity – установите силу тяжести для всех компонентов ткани.
- Contact Pairs Mode - выберите тип используемой генерации контактных пар.
- Default Contact Pairs - прием столкновений и триггерных событий от всех контактных пар, кроме кинематико-кинематических (kinematic с kinematic) и кинематико-статических (kinematic с static) пар.
- Enable Kinematic Kinematic Pairs - прием столкновений и триггерных событий от кинематических-кинематических (kinematic с kinematic) контактных пар.
- Enable Kinematic Static Pairs - прием столкновений и триггерных событий от кинематико-статических (kinematic с static) контактных пар.
- Enable All Contact Pairs - получайте события столкновения и триггера от всех пар контактов.
- Broadphase Type - выберите, какой широкофазный алгоритм использовать в физическом моделировании. Смотрите документацию NVIDIA по PhysX SDK и столкновению жестких тел.
- Sweep and Prune Broadphase - используйте метод развертки и обрезки broadphasecollision (то есть сортировку объектов вдоль одной оси, чтобы исключить необходимость проверки пар, которые находятся далеко друг от друга).
- Multibox Pruning Broadphase – много квадратная обрезка использует сетку, и каждая ячейка сетки выполняет развертку и обрезку. Это обычно помогает улучшить производительность, если, например, есть много игровых объектов в плоском мире.
- Automatic Box Pruning – этот алгоритм доступен с Unity 2019.3 и выше. Он похож на алгоритм Много квадратной обрезки, который я описал выше, но он может вычислять мировые границы и количество подразделений автоматически.
- World Bounds - определите двумерную сетку, которая окружает мир, чтобы предотвратить влияние удаленных объектов друг на друга при использовании алгоритма Много квадратной обрезки широкой фазы (точного перевода этого алгоритма я так найти и не смог, поэтому прошу прощения за столь вольный и корявый перевод, на родном языке этот алгоритм называется Multibox Pruning Broadphase algorithm). Этот параметр используется только при установке параметра BroadphaseType в значение Multibox Pruning Broadphase.
- World Subdivisions - количество ячеек вдоль осей X и Z в алгоритме 2D-сетки. Этот параметр используется только при установке параметра BroadphaseType в значение Multibox Pruning Broadphase.
- Friction Type - выберите алгоритм трения, используемый для моделирования физики.
- Patch Friction Type - базовый алгоритм сильного трения, который обычно приводит к наиболее стабильным результатам при низком количестве итераций решателя. Этот метод использует только до четырех скалярных ограничений решателя на пару соприкасающихся объектов.
- One Directional Friction Type - упрощение модели Кулоновского трения, в которой трение для данной точки контакта применяется в чередующихся касательных направлениях нормали контакта. Уменьшает число итераций, необходимых для сходимости, но не является столь точным, как двухнаправленная (Two Directional) модель.
- Two Directional Friction Type - как и однонаправленная (One Directional) модель, но трение применяется одновременно в обоих касательных направлениях. Это требует больше итераций решателя, но является более точным. Более дорогой, чем базовый алгоритм трения (Patch Friction) для скриптов с большим количеством точек соприкосновения, потому что он применяется в каждой точке соприкосновения.
- Enable Enhanced Determinism - имитация на сцене является последовательной независимо от присутствующих актеров (actors), при условии, что игра вставляет актеров в детерминированном порядке. Этот режим жертвует некоторой производительностью, чтобы обеспечить этот дополнительный детерминизм.
- Enable Unified Heightmaps - включите эту опцию для обработки рельефа местности (на Terrain) коллизии точно так же, как и MeshColissions.
- Solver Type – выберите тип физического решателя.
- Projected Gauss Seidel – стандартный решатель в Unity который подходит под большинство задач. Он выбран по умолчанию.
- Temporal Gauss Seidel – с этим видом решателей суставы (joints) более устойчивы к перенапряжению и различным сбоям.
- Default Max Angular Speed – этот параметр задает максимальную угловую скорость по умолчанию.
- Layer Collision Matrix - определите, как ведет себя система обнаружения столкновений на основе слоев. Выберите, какие слои матрицы столкновений взаимодействуют с другими слоями, проверив их.
- Cloth Inter-Collision – включает взаимное столкновение тканей.
- Distance - определите диаметр сферы вокруг каждой встречной частицы ткани. Unity гарантирует, что эти сферы не пересекаются во время моделирования. Расстояние должно быть меньше, чем наименьшее расстояние между двумя частицами в конфигурации. Если расстояние больше, столкновение ткани может нарушить некоторые ограничения расстояния и привести к дрожанию.
- Stiffness - насколько сильным должен быть разделительный импульс между взаимодействующими частицами ткани. Решатель ткани вычисляет это, и этого импульса должно быть достаточно, чтобы держать частицы разделенными
На сегодня это все. Следующая статья будет посвящена вкладке Physics 2D в окне настроек проекта в Unity. Спасибо всем, кто дочитал эту статью до конца, подписывайтесь на канал, ставьте лайки, а для тех, у кого появились вопросы - спрашивайте в комментариях! А если вы хотите помочь данному каналу в развитии – делитесь этой статьей с друзьями в социальных сетях!