Choose 3D physics: Jolt and ReckfellPhysics3D
Check available backends, select one before launch and test actual scene differences.
Select and verify
Find physics/3d/physics_engine in Project Settings, choose Jolt Physics or ReckfellPhysics3D and restart the project. This setting requires restart; changing its string through SetSetting does not replace the running PhysicsServer3D. DEFAULT selects the registered backend by build priority. Dummy disables full 3D physics and is unsuitable for falling-body checks.
The checked Windows build offers DEFAULT, ReckfellPhysics3D, Jolt Physics and Dummy. Other builds/exports can offer a different list. Attach PhysicsBackendProbe.cs to an ordinary Entity in a separate level, build and press F6. Output shows the configured name, registered choices and Vector3.X type. An unknown name can fall back to the default backend; check registration first.
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.");
}
}Run the complete 3D collision level separately with each choice. Compare floor contact, impulse, ray query and filters. Those cases, plus cloth and physical bones, execute in separate verification processes. This does not benchmark every scene or promise identical trajectories from both solvers.
Parameters can differ
A shared class interface does not imply identical contacts, joint constraints, margins, sleep or memory costs. After switching, verify gameplay outcomes: required character clearance, joint stretching, correct events and CPU budget.
| Area | Current Jolt behavior to consider |
|---|---|
| Pin joint | Ordinary-interface bias, damping and impulse clamp are unsupported; unsuitable values warn and are ignored |
| Hinge / cone twist | Some ordinary bias/softness/relaxation parameters are ignored; test supported limits/spring settings |
| Margins | Effective internal margins depend on shape and collision_margin_fraction; do not transfer every numeric value mechanically |
| Kinematic contacts | generate_all_kinematic_contacts affects contact generation and can add work |
| Ray triangle index | enable_ray_cast_face_index defaults false and requires restart; face_index is not always available |
| WorldBoundaryShape3D | Uses a finite world_boundary_shape_size, not proof of an infinite game world |
| Temporary memory | temporary_memory_buffer_size uses MiB; test exhaustion and peak allocation in your scene |
Full Jolt setting paths start with 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. Retain settings with the project and respect restart requirements. Resolve unsupported-parameter warnings before suppressing them.
Areas, soft bodies and threading
Current Jolt source implements SoftBody and Area fields affecting it, including gravity/wind. Verify particular signals, contacts and field combinations separately: deforming cloth does not prove every Area3D interaction. The example checks pinning, motion and release on both backends.
Access DirectSpaceState and modify physics state in an appropriate phase. Switching backend does not make arbitrary worker-thread access safe. Contact impulses, point counts and exact positions can differ; test gameplay thresholds on real contacts. For triangle seams, fast objects and tall stacks, begin with diagnostics, then measure solver settings.
Choose against reproducible project requirements. This work does not benchmark performance, build other platforms or test every joint/shape type. For reproducible checks, record an explicit backend name and runtime version.