reckfellENGINE

Choose 3D physics: Jolt and ReckfellPhysics3D

Check available backends, select one before launch and test actual scene differences.

On this page

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
C#
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.

AreaCurrent Jolt behavior to consider
Pin jointOrdinary-interface bias, damping and impulse clamp are unsupported; unsuitable values warn and are ignored
Hinge / cone twistSome ordinary bias/softness/relaxation parameters are ignored; test supported limits/spring settings
MarginsEffective internal margins depend on shape and collision_margin_fraction; do not transfer every numeric value mechanically
Kinematic contactsgenerate_all_kinematic_contacts affects contact generation and can add work
Ray triangle indexenable_ray_cast_face_index defaults false and requires restart; face_index is not always available
WorldBoundaryShape3DUses a finite world_boundary_shape_size, not proof of an infinite game world
Temporary memorytemporary_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.

Reckfell Engine documentationBack to top ↑
QUICK LINKSGetting startedEntity hierarchyC# & .NET 10Scenes and prefabs
Reckfell guides and full API K
reckfellENGINE
RECKFELL ACCOUNT

Sign in

Sign in to your Reckfell account.

One account for the entire Reckfell platform.