---
title: "Deterministic, replay-verified physics: Gessa vs Unity vs Unreal"
description: "Gessa runs a fixed-timestep Rapier core with a golden-corpus determinism gate and a recast navmesh, and is honest about a scalar-mass v1 with no cloth, destruction, vehicle, or ragdoll families."
engineVersion: v1.0.234
date: 2026-09-28
license: "(c) Gessa, proprietary. Cite with attribution to https://gessa.ai/docs/. Terms: https://gessa.ai/terms/."
canonical: https://gessa.ai/docs/compare/deterministic-physics/
---

# Deterministic, replay-verified physics: Gessa vs Unity vs Unreal

_Last verified 2026-09-02 against engine v1.0.232. Competitor sources were accessed 2026-09-02; every Gessa cell binds to the generated engine reference and the build fails if a bound surface disappears._

Gessa's physics is a Rapier-backed rigid-body core that runs on a fixed timestep and is held to a golden-corpus determinism gate, so the same inputs reproduce the same simulation and a published replay stays stable. The tradeoff is honest: this is a scalar-mass v1 with a deliberately small set of body and constraint families. Unity and Unreal both ship broader physics-family catalogs; Gessa trades family breadth for a determinism guarantee and a browser runtime.

The canonical component surfaces are in {% generated-reference file="docs/spec/generated/component-types.md" label="Component type definitions" /%}.

## Where Gessa stands

| Capability | Gessa | Unity | Unreal |
| --- | --- | --- | --- |
| Rigid body dynamics | {% gessaCell status="supported" binds="component.rigid_body.contract.v1" /%} | Supported {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Character controller | {% gessaCell status="supported" binds="component.character_movement.contract.v1" /%} | Supported {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Colliders and layers | {% gessaCell status="supported" binds="component.collider.contract.v1" /%} | Supported {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Triggers and overlaps | {% gessaCell status="supported" binds="primitive.runtime.spatial" /%} | Supported {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Raycast and shape queries | {% gessaCell status="supported" binds="runtime_motion" /%} | Supported {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Fixed timestep | {% gessaCell status="supported" binds="check:physics-golden-corpus" /%} | Supported {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Joints and constraints | {% gessaCell status="partial" binds="component.joint.contract.v1" /%} | Supported {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Deterministic replay | {% gessaCell status="partial" binds="check:physics-golden-corpus" /%} | Package {% competitorCell engine="unity" version="com.unity.physics 6.6" url="https://docs.unity3d.com/Packages/com.unity.physics@latest" accessed="2026-09-02" /%} | Partial {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Navmesh and pathfinding | {% gessaCell status="supported" binds="check:navigation-canon" /%} | Package {% competitorCell engine="unity" version="com.unity.ai.navigation 2.0" url="https://docs.unity3d.com/Packages/com.unity.ai.navigation@latest" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/navigation-system-in-unreal-engine" accessed="2026-09-02" /%} |
| Vehicles | {% gessaCell status="not_yet" binds="component.joint.contract.v1" /%} | Supported {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Cloth and soft body | {% gessaCell status="not_yet" binds="component.rigid_body.contract.v1" /%} | Supported {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Destructibles | {% gessaCell status="not_yet" binds="component.rigid_body.contract.v1" /%} | Package {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |
| Ragdoll | {% gessaCell status="not_yet" binds="component.joint.contract.v1" /%} | Supported {% competitorCell engine="unity" version="6000.3" url="https://docs.unity3d.com/6000.3/Documentation/Manual/PhysicsSection.html" accessed="2026-09-02" /%} | Supported {% competitorCell engine="unreal" version="5.8" url="https://dev.epicgames.com/documentation/en-us/unreal-engine/physics-in-unreal-engine" accessed="2026-09-02" /%} |

`RigidBodyComponent`, `ColliderComponent`, `CharacterMovementComponent`, `JointComponent`, and `NavAgentComponent` are the atomic surfaces behind these rows; the determinism and navmesh rows are backed by the `check:physics-golden-corpus` and `check:navigation-canon` gates in the build.

## The gaps, named here

- Joints are partial, not full articulation. Fixed, revolute, prismatic, spherical, spring, and rope joints exist, motors and limits are wired for revolute and prismatic only, and there is no articulation body. That is why vehicles and ragdoll read as not yet on this page: both need articulation the `JointComponent` substrate does not carry today.
- Determinism is partial. Single-machine replay stability and published-replay reproduction are proven by the golden-corpus gate; cross-platform bit-identical determinism is not claimed. Read the determinism scope in the {% generated-reference file="docs/spec/generated/component-types.md" label="component reference" /%} and the physics explanation, not as a blanket guarantee.
- There is no cloth, soft-body, destruction, vehicle, or ragdoll family. Gessa simulates rigid bodies with scalar mass. These families are not in the engine and are not scriptable workarounds.

## Where Unity and Unreal are ahead

- Unreal's Chaos physics ships vehicles, cloth, destruction via geometry collections, ragdoll, and a soft-body solver as first-party systems, and documents networked physics with multiple replication modes. See the Unreal physics documentation cited in the table.
- Unity offers a mature built-in PhysX integration plus a separate deterministic, stateless physics package for data-oriented projects, and vehicle wheels, cloth, and ragdoll as supported components. See the Unity physics documentation and the Unity Physics package cited in the table.
- Both engines run on native desktop and console targets, so their solvers can spend a budget a browser runtime does not have.

Gessa's answer is not to match that catalog row for row. It is to make the rigid-body core deterministic and replay-verified, publish it in the browser, and be explicit about the families it does not simulate.
