Выбрать физику 3D: Jolt и ReckfellPhysics3D
Как проверить доступность backend, выбрать его до запуска и проверить реальные различия сцены.
Выбрать и проверить
В Project Settings найдите physics/3d/physics_engine, выберите Jolt Physics или ReckfellPhysics3D и перезапустите проект. Настройка помечена как требующая перезапуска; изменение строки через SetSetting не заменяет работающий PhysicsServer3D. DEFAULT выбирает зарегистрированный backend по приоритету сборки. Dummy отключает полноценную физику 3D и не подходит для проверки падающих тел.
В проверенной Windows-сборке доступны DEFAULT, ReckfellPhysics3D, Jolt Physics и Dummy. Другой экспорт/сборка может иметь другой список. Добавьте PhysicsBackendProbe.cs к обычной Entity отдельного уровня, соберите и запустите F6. В Output появятся выбранная строка, зарегистрированные варианты и тип Vector3.X. Неизвестное имя опасно тем, что менеджер может перейти к backend по умолчанию; сначала проверьте список.
PhysicsBackendProbe.cs
using System;
using System.Linq;
using Reckfell;
public partial class PhysicsBackendProbe : Entity
{
public static string[] AvailableNames()
{
foreach (var property in ProjectSettings.Singleton.GetPropertyList())
if (property["name"].AsString() == "physics/3d/physics_engine")
return property["hint_string"].AsString().Split(',', StringSplitOptions.RemoveEmptyEntries);
return Array.Empty<string>();
}
public override void _Ready()
{
string selected = ProjectSettings.GetSetting("physics/3d/physics_engine").AsString();
ReckfellApi.Print("physics/3d/physics_engine = " + selected);
ReckfellApi.Print(string.Join(", ", AvailableNames()));
ReckfellApi.Print("Vector3.X: " + typeof(Vector3).GetField(nameof(Vector3.X))!.FieldType.Name);
if (selected != "DEFAULT" && !AvailableNames().Contains(selected))
ReckfellApi.PrintErr("Selected backend is not in the registered list.");
}
}Запустите готовый уровень коллизий 3D отдельно с каждым вариантом. Сравните контакт с полом, импульс, лучевой запрос и фильтры. Именно эти случаи, а также ткань и физические кости, исполняются в отдельных проверочных процессах. Это не тест скорости всех сцен и не обещание одинаковой траектории двух solver.
Параметры не обязаны совпадать
Одинаковый интерфейс классов не делает одинаковыми алгоритмы контактов, ограничения суставов, margins, сон или стоимость памяти. После смены backend проверяйте игровые исходы: проходит ли персонаж в нужный проём, не растягивается ли сустав, правильно ли ловится событие, укладывается ли сцена в бюджет CPU.
| Область | Что учитывать в текущей реализации Jolt |
|---|---|
| Pin joint | Bias, damping и impulse clamp обычного интерфейса не поддерживаются; неподходящие значения дают предупреждение и игнорируются |
| Hinge / cone twist | Часть обычных bias/softness/relaxation-параметров игнорируется; используйте поддерживаемые ограничения/пружинные настройки после проверки |
| Margins | Фактический внутренний отступ зависит от формы и collision_margin_fraction; не переносите все числовые значения механически |
| Контакты кинематических тел | generate_all_kinematic_contacts влияет на генерацию контактов; включение может увеличить работу |
| Индекс треугольника луча | enable_ray_cast_face_index по умолчанию false и требует перезапуска; не считайте face_index всегда доступным |
| WorldBoundaryShape3D | Используется ограниченный размер через world_boundary_shape_size, а не доказательство бесконечного игрового мира |
| Временная память | temporary_memory_buffer_size задаётся в MiB; нехватку и рост пиков проверяйте на своей сцене |
Полные пути Jolt-настроек начинаются с physics/jolt_physics_3d/: collisions/collision_margin_fraction, simulation/generate_all_kinematic_contacts, queries/enable_ray_cast_face_index, limits/world_boundary_shape_size, limits/temporary_memory_buffer_size. Сохраняйте настройки вместе с проектом и учитывайте требования перезапуска. Не подавляйте предупреждения, пока не выяснили, какой параметр не работает.
Области, мягкие тела и потоковая физика
В текущих исходниках Jolt есть SoftBody и обработка полей Area для него, включая гравитацию/ветер. Конкретные сигналы, контакты и совмещение полей проверяйте отдельно: наличие деформации ткани не доказывает все взаимодействия Area3D. Пример проверяет закрепления, движение и освобождение ткани на обоих backend.
Доступ к DirectSpaceState и изменения физического состояния выполняйте в подходящей фазе. Смена backend не делает произвольный доступ из рабочего потока безопасным. Контактный импульс, число контактных точек и точные позиции могут различаться; игровые пороги проверяйте на реальных столкновениях. Для швов треугольников, быстрых объектов и больших стопок начните с диагностики, затем измеряйте настройки выбранного solver.
Выбирайте по воспроизводимым требованиям проекта. Здесь не измерялась производительность, не собирались другие платформы и не проверялись все типы суставов/форм. Для воспроизводимой проверки запишите явное имя backend и версию runtime.