3D Physics (Jolt/Native)
High-performance 3D simulation: body choice, CCD, stairs, vehicles, ragdolls, SoftBody — routed through scripts.
NEVER Do
- NEVER move
PhysicsBody3D nodes in _process() — Use _physics_process(). Moving bodies outside the physics step causes visual jitter and unreliable collision detection [12, 13].
- NEVER scale collision shapes directly — Scaling physics shapes causes instability, inaccurate normals, and jitter. Use the
shape properties (height, radius, size) instead.
- NEVER modify
RigidBody3D transforms directly — This ignores the physics solver. Use apply_impulse(), apply_torque(), or the _integrate_forces() callback for safe manipulation [17].
- NEVER use
RigidBody3D for platformer player controllers — RigidBody is for objects driven by physics. For refined movement, use CharacterBody3D with move_and_slide() [move_and_slide].
- NEVER leave Continuous CD (CCD) enabled for static meshes — It adds heavy CPU cost. Reserve it for high-speed small objects (bullets) to prevent them from passing through walls.
- NEVER use
PhysicsServer3D RIDs without manual cleanup — RIDs are not garbage collected. If you create bodies via the server, you MUST call free_rid() when done to avoid memory leaks.
- NEVER use
RayCast3D for precise ground detection on stairs — A single ray is too thin. Use ShapeCast3D with a cylinder or sphere shape to detect walkable steps reliably [Stair Logic].
- NEVER rely on
VehicleBody3D for non-racing arcade vehicles — It's a complex sim. For arcade hovercraft or simple cars, a custom CharacterBody3D with Raycasts is often easier to tune.
- NEVER forget to set
collision_layer and collision_mask properly — If everything is on layer 1, performance will tank from redundant checks. Categorize your world.
- NEVER use
Area3D for high-frequency blocking — Areas are for detection. For walls/barriers, use StaticBody3D to ensure immediate, robust containment.
Body / Symptom Decision Tree
MANDATORY — load the script for the chosen row before writing movement or sim code.
Do NOT Load every physics script for one controller.
| Need / symptom |
Body / API |
Script |
| Player locomotion, stairs, slopes |
CharacterBody3D |
MANDATORY kinematic_3d_stairs_logic.gd + shapecast_3d_ground_check.gd |
| Debris, props, impulse-driven objects |
RigidBody3D |
NEVER + impulses; layers via physics_layers_3d_config.gd |
| Racing / wheeled sim |
VehicleBody3D |
MANDATORY vehicle_simulation_tuning.gd |
| Arcade hover / simple cars |
Custom CharacterBody3D + rays |
Prefer stairs/ray scripts; avoid full VehicleBody |
| Death / blend to physics pose |
PhysicalBone3D / Skeleton |
MANDATORY ragdoll_manager.gd |
| Cloaks, soft cloth, foliage soft |
SoftBody3D |
MANDATORY soft_body_3d_interaction.gd |
| Tunneling bullets |
CCD / server bullets |
MANDATORY physics_ccd_3d_projectile.gd or physics_server_3d_bullets.gd |
| Joint snap / destructibles |
Joint3D stress |
joint_3d_breakage_logic.gd |
| Gravity wells / zero-G |
Area priority |
custom_gravity_well_3d.gd |
| LOS / AI vision |
Direct space state |
ray_query_3d_vision.gd |
| Debug hit normals |
visualizer |
raycast_visualizer.gd |
3D Layer Pitfalls (not a 2D primer)
- Layer = what the object is; mask = what it hits. Name bits in physics_layers_3d_config.gd.
- Do not dump a same-as-2D layers tutorial here; Official Docs cover the shared mental model.
Available Scripts
kinematic_3d_stairs_logic.gd
Procedural stair-step + snap for CharacterBody3D.
shapecast_3d_ground_check.gd
Volume ground/stair detection (rays tunnel).
ragdoll_manager.gd
Animation → PhysicalBone simulation transition, impulses, cleanup.
vehicle_simulation_tuning.gd
VehicleBody3D / VehicleWheel3D arcade vs sim knobs.
soft_body_3d_interaction.gd
SoftBody3D flags, pinning, and Jolt mass/stiffness tuning.
physics_ccd_3d_projectile.gd
CCD / sub-step anti-tunneling for small fast bodies.
physics_server_3d_bullets.gd
RID bullets at scale with mandatory free_rid().
physics_layers_3d_config.gd
Named 3D collision matrix architecture.
custom_gravity_well_3d.gd
Planet / zero-G Area3D gravity priority.
joint_3d_breakage_logic.gd
Joint stress monitoring and procedural snaps.
ray_query_3d_vision.gd
Low-level LOS / AI vision queries.
raycast_visualizer.gd
In-game ray hit/normal debug draw.
Expert Pointers (Jolt)
- Prefer
Generic6DOFJoint3D over stacking specialized joints unless you need a specific node UX.
- Ragdoll/vehicle/soft samples live in scripts above — do not expand Create Physical Skeleton editor tutorials in this body.
- Version-specific Jolt/soft-body upgrade steps: migration-notes.md.
Deep dives (on demand)
- Hover ray constraints, Jolt suspension tuning, ragdoll influence blend → expert-3d-constraints.md
- Scripts: hover_constraint_3d.gd, ragdoll_blender.gd
Reference
Progressive disclosure: open Official Documentation links only when researching a specific API;
load Related Skills when routing work to a peer domain — do not preload the whole lattice.
Official Documentation
- Physics introduction — Layers vs masks, body types, and the shared 2D/3D collision mental model every 3D setup depends on.
- Collision shapes (3D) — Primitive vs convex/concave shapes and why scaling
CollisionShape3D breaks normals and contacts.
- Using Jolt Physics — Engine switch, joint-property gaps vs Godot Physics, and project-setting caveats for stable 3D sims.
- Using RigidBody — Safe control via forces, impulses, and
_integrate_forces instead of fighting the solver with per-frame transforms.
- Ragdoll system —
PhysicalBoneSimulator3D / PhysicalBone3D setup for death sims and animation↔physics handoff.
- Using SoftBody3D — Cloth/flag deformation, pinning, and why Jolt is preferred for soft-body robustness.
- Ray-casting —
RayCast3D vs PhysicsDirectSpaceState3D queries, exclusions, and space access during the physics tick.
- Troubleshooting physics issues — Tunneling, jitter, CCD misuse, and common layer/mask misconfigurations.
- Physics interpolation introduction — Why fixed physics ticks stutter on high-refresh displays and when interpolation smooths 3D motion.
- PhysicsServer3D — RID-based body/shape APIs for swarm-scale projectiles with mandatory
free_rid cleanup.
- PhysicsDirectSpaceState3D — Ray/shape/point queries for LOS, hover constraints, and custom suspensions without permanent query nodes.
- ShapeCast3D — Volume casts for stair/ground detection when a thin
RayCast3D misses ledges or uneven floors.
Related Skills
Prerequisites
- godot-project-foundations — 3D physics engine choice, tick rate, gravity, and named layer bits must be set before matrices and Jolt tuning stay sane.
- godot-gdscript-mastery — Typed RIDs, bitmask enums, and
_physics_process discipline underpin server-side and CharacterBody3D patterns here.
- godot-signal-architecture —
body_entered / contact-monitor wiring needs clean ownership so Area3D gravity wells and CCD hits do not spam.
Complements
- godot-2d-physics — Parallel layer/mask and body-type contracts when sharing policy across dimensions or porting mechanics.
- godot-raycasting-queries — Deeper query-parameter recipes (masks, exclusions, shape casts) when vision/hitscan systems outgrow the basics.
- godot-3d-world-building — Static collision from GridMap/CSG/meshes must match the same 3D layer matrix used by characters and projectiles.
- godot-animation-tree-mastery — AnimationTree poses and state machines feed ragdoll start/stop and influence blending on
PhysicalBoneSimulator3D.
- godot-performance-optimization — Profiling and pooling guidance when
PhysicsServer3D swarms, soft bodies, or CCD counts become bottlenecks.
- godot-debugging-profiling — Visible collision shapes, contact normals, and profiler traps when diagnosing jitter, tunneling, or missed stairs.
Downstream / consumers
- godot-combat-system — 3D hitboxes/hurtboxes and projectile CCD inherit layer/mask and space-query choices from this domain.
- godot-genre-racing —
VehicleBody3D suspension/friction tuning and drift feel consume the vehicle and Jolt guidance here.
- godot-genre-shooter-fps — Hitscan rays, CharacterBody3D movement, and high-speed projectile CCD are direct consumers of these contracts.
- godot-navigation-pathfinding — Agents still need physics layers for blockers and LOS; keep nav meshes and the collision world consistent.
- godot-monte-carlo-balancer — Gravity, CCD, joint break thresholds, and hitbox size change win-rates; simulate those physics knobs instead of guessing.
Master
- godot-master — Library router and mirrored entry point for discovering 3D physics alongside sibling domains.
1---2name: godot-physics-3d3description: Expert patterns for Godot 3D physics (Jolt/PhysX), including Ragdolls, PhysicalBones, Joint3D constraints, RayCasting optimizations, and collision layers. Use for rigid body simulations, character physics, or complex interactions. Trigger keywords: RigidBody3D, PhysicalBone3D, Jolt, Ragdoll, Skeleton3D, Joint3D, PinJoint3D, HingeJoint3D, Generic6DOFJoint3D, RayCast3D, PhysicsDirectSpaceState3D.4---5# 3D Physics (Jolt/Native)
6
7High-performance 3D simulation: body choice, CCD, stairs, vehicles, ragdolls, SoftBody — routed through scripts.
8
9## NEVER Do
10
11- **NEVER move `PhysicsBody3D` nodes in `_process()`** — Use `_physics_process()`. Moving bodies outside the physics step causes visual jitter and unreliable collision detection [12, 13].
12- **NEVER scale collision shapes directly** — Scaling physics shapes causes instability, inaccurate normals, and jitter. Use the `shape` properties (height, radius, size) instead.
13- **NEVER modify `RigidBody3D` transforms directly** — This ignores the physics solver. Use `apply_impulse()`, `apply_torque()`, or the `_integrate_forces()` callback for safe manipulation [17].
14- **NEVER use `RigidBody3D` for platformer player controllers** — RigidBody is for objects driven by physics. For refined movement, use `CharacterBody3D` with `move_and_slide()` [move_and_slide].
15- **NEVER leave Continuous CD (CCD) enabled for static meshes** — It adds heavy CPU cost. Reserve it for high-speed small objects (bullets) to prevent them from passing through walls.
16- **NEVER use `PhysicsServer3D` RIDs without manual cleanup** — RIDs are not garbage collected. If you create bodies via the server, you MUST call `free_rid()` when done to avoid memory leaks.
17- **NEVER use `RayCast3D` for precise ground detection on stairs** — A single ray is too thin. Use `ShapeCast3D` with a cylinder or sphere shape to detect walkable steps reliably [Stair Logic].
18- **NEVER rely on `VehicleBody3D` for non-racing arcade vehicles** — It's a complex sim. For arcade hovercraft or simple cars, a custom `CharacterBody3D` with Raycasts is often easier to tune.
19- **NEVER forget to set `collision_layer` and `collision_mask` properly** — If everything is on layer 1, performance will tank from redundant checks. Categorize your world.
20- **NEVER use `Area3D` for high-frequency blocking** — Areas are for detection. For walls/barriers, use `StaticBody3D` to ensure immediate, robust containment.
21
22---
23
24## Body / Symptom Decision Tree
25
26> **MANDATORY** — load the script for the chosen row before writing movement or sim code.
27>
28> **Do NOT Load** every physics script for one controller.
29
30| Need / symptom | Body / API | Script |
31|----------------|------------|--------|
32| Player locomotion, stairs, slopes | `CharacterBody3D` | **MANDATORY** [kinematic_3d_stairs_logic.gd](scripts/kinematic_3d_stairs_logic.gd) + [shapecast_3d_ground_check.gd](scripts/shapecast_3d_ground_check.gd) |
33| Debris, props, impulse-driven objects | `RigidBody3D` | NEVER + impulses; layers via [physics_layers_3d_config.gd](scripts/physics_layers_3d_config.gd) |
34| Racing / wheeled sim | `VehicleBody3D` | **MANDATORY** [vehicle_simulation_tuning.gd](scripts/vehicle_simulation_tuning.gd) |
35| Arcade hover / simple cars | Custom `CharacterBody3D` + rays | Prefer stairs/ray scripts; avoid full VehicleBody |
36| Death / blend to physics pose | `PhysicalBone3D` / Skeleton | **MANDATORY** [ragdoll_manager.gd](scripts/ragdoll_manager.gd) |
37| Cloaks, soft cloth, foliage soft | `SoftBody3D` | **MANDATORY** [soft_body_3d_interaction.gd](scripts/soft_body_3d_interaction.gd) |
38| Tunneling bullets | CCD / server bullets | **MANDATORY** [physics_ccd_3d_projectile.gd](scripts/physics_ccd_3d_projectile.gd) or [physics_server_3d_bullets.gd](scripts/physics_server_3d_bullets.gd) |
39| Joint snap / destructibles | `Joint3D` stress | [joint_3d_breakage_logic.gd](scripts/joint_3d_breakage_logic.gd) |
40| Gravity wells / zero-G | Area priority | [custom_gravity_well_3d.gd](scripts/custom_gravity_well_3d.gd) |
41| LOS / AI vision | Direct space state | [ray_query_3d_vision.gd](scripts/ray_query_3d_vision.gd) |
42| Debug hit normals | visualizer | [raycast_visualizer.gd](scripts/raycast_visualizer.gd) |
43
44## 3D Layer Pitfalls (not a 2D primer)
45
46- **Layer** = what the object *is*; **mask** = what it *hits*. Name bits in [physics_layers_3d_config.gd](scripts/physics_layers_3d_config.gd).
47- Do not dump a same-as-2D layers tutorial here; Official Docs cover the shared mental model.
48
49## Available Scripts
50
51### [kinematic_3d_stairs_logic.gd](scripts/kinematic_3d_stairs_logic.gd)
52Procedural stair-step + snap for CharacterBody3D.
53
54### [shapecast_3d_ground_check.gd](scripts/shapecast_3d_ground_check.gd)
55Volume ground/stair detection (rays tunnel).
56
57### [ragdoll_manager.gd](scripts/ragdoll_manager.gd)
58Animation → PhysicalBone simulation transition, impulses, cleanup.
59
60### [vehicle_simulation_tuning.gd](scripts/vehicle_simulation_tuning.gd)
61VehicleBody3D / VehicleWheel3D arcade vs sim knobs.
62
63### [soft_body_3d_interaction.gd](scripts/soft_body_3d_interaction.gd)
64SoftBody3D flags, pinning, and Jolt mass/stiffness tuning.
65
66### [physics_ccd_3d_projectile.gd](scripts/physics_ccd_3d_projectile.gd)
67CCD / sub-step anti-tunneling for small fast bodies.
68
69### [physics_server_3d_bullets.gd](scripts/physics_server_3d_bullets.gd)
70RID bullets at scale with mandatory `free_rid()`.
71
72### [physics_layers_3d_config.gd](scripts/physics_layers_3d_config.gd)
73Named 3D collision matrix architecture.
74
75### [custom_gravity_well_3d.gd](scripts/custom_gravity_well_3d.gd)
76Planet / zero-G Area3D gravity priority.
77
78### [joint_3d_breakage_logic.gd](scripts/joint_3d_breakage_logic.gd)
79Joint stress monitoring and procedural snaps.
80
81### [ray_query_3d_vision.gd](scripts/ray_query_3d_vision.gd)
82Low-level LOS / AI vision queries.
83
84### [raycast_visualizer.gd](scripts/raycast_visualizer.gd)
85In-game ray hit/normal debug draw.
86
87## Expert Pointers (Jolt)
88
89- Prefer `Generic6DOFJoint3D` over stacking specialized joints unless you need a specific node UX.
90- Ragdoll/vehicle/soft samples live in scripts above — do not expand Create Physical Skeleton editor tutorials in this body.
91- Version-specific Jolt/soft-body upgrade steps: [migration-notes.md](references/migration-notes.md).
92
93## Deep dives (on demand)
94
95- Hover ray constraints, Jolt suspension tuning, ragdoll influence blend → [expert-3d-constraints.md](references/expert-3d-constraints.md)
96- Scripts: [hover_constraint_3d.gd](scripts/hover_constraint_3d.gd), [ragdoll_blender.gd](scripts/ragdoll_blender.gd)
97
98## Reference
99
100> Progressive disclosure: open Official Documentation links only when researching a specific API;
101> load Related Skills when routing work to a peer domain — do not preload the whole lattice.
102
103### Official Documentation
104- [Physics introduction](https://docs.godotengine.org/en/stable/tutorials/physics/physics_introduction.html) — Layers vs masks, body types, and the shared 2D/3D collision mental model every 3D setup depends on.
105- [Collision shapes (3D)](https://docs.godotengine.org/en/stable/tutorials/physics/collision_shapes_3d.html) — Primitive vs convex/concave shapes and why scaling `CollisionShape3D` breaks normals and contacts.
106- [Using Jolt Physics](https://docs.godotengine.org/en/stable/tutorials/physics/using_jolt_physics.html) — Engine switch, joint-property gaps vs Godot Physics, and project-setting caveats for stable 3D sims.
107- [Using RigidBody](https://docs.godotengine.org/en/stable/tutorials/physics/rigid_body.html) — Safe control via forces, impulses, and `_integrate_forces` instead of fighting the solver with per-frame transforms.
108- [Ragdoll system](https://docs.godotengine.org/en/stable/tutorials/physics/ragdoll_system.html) — `PhysicalBoneSimulator3D` / `PhysicalBone3D` setup for death sims and animation↔physics handoff.
109- [Using SoftBody3D](https://docs.godotengine.org/en/stable/tutorials/physics/soft_body.html) — Cloth/flag deformation, pinning, and why Jolt is preferred for soft-body robustness.
110- [Ray-casting](https://docs.godotengine.org/en/stable/tutorials/physics/ray-casting.html) — `RayCast3D` vs `PhysicsDirectSpaceState3D` queries, exclusions, and space access during the physics tick.
111- [Troubleshooting physics issues](https://docs.godotengine.org/en/stable/tutorials/physics/troubleshooting_physics_issues.html) — Tunneling, jitter, CCD misuse, and common layer/mask misconfigurations.
112- [Physics interpolation introduction](https://docs.godotengine.org/en/stable/tutorials/physics/interpolation/physics_interpolation_introduction.html) — Why fixed physics ticks stutter on high-refresh displays and when interpolation smooths 3D motion.
113- [PhysicsServer3D](https://docs.godotengine.org/en/stable/classes/class_physicsserver3d.html) — RID-based body/shape APIs for swarm-scale projectiles with mandatory `free_rid` cleanup.
114- [PhysicsDirectSpaceState3D](https://docs.godotengine.org/en/stable/classes/class_physicsdirectspacestate3d.html) — Ray/shape/point queries for LOS, hover constraints, and custom suspensions without permanent query nodes.
115- [ShapeCast3D](https://docs.godotengine.org/en/stable/classes/class_shapecast3d.html) — Volume casts for stair/ground detection when a thin `RayCast3D` misses ledges or uneven floors.
116
117### Related Skills
118
119#### Prerequisites
120- [godot-project-foundations](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-project-foundations/SKILL.md) — 3D physics engine choice, tick rate, gravity, and named layer bits must be set before matrices and Jolt tuning stay sane.
121- [godot-gdscript-mastery](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-gdscript-mastery/SKILL.md) — Typed RIDs, bitmask enums, and `_physics_process` discipline underpin server-side and CharacterBody3D patterns here.
122- [godot-signal-architecture](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-signal-architecture/SKILL.md) — `body_entered` / contact-monitor wiring needs clean ownership so Area3D gravity wells and CCD hits do not spam.
123
124#### Complements
125- [godot-2d-physics](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-2d-physics/SKILL.md) — Parallel layer/mask and body-type contracts when sharing policy across dimensions or porting mechanics.
126- [godot-raycasting-queries](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-raycasting-queries/SKILL.md) — Deeper query-parameter recipes (masks, exclusions, shape casts) when vision/hitscan systems outgrow the basics.
127- [godot-3d-world-building](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-3d-world-building/SKILL.md) — Static collision from GridMap/CSG/meshes must match the same 3D layer matrix used by characters and projectiles.
128- [godot-animation-tree-mastery](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-animation-tree-mastery/SKILL.md) — AnimationTree poses and state machines feed ragdoll start/stop and influence blending on `PhysicalBoneSimulator3D`.
129- [godot-performance-optimization](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-performance-optimization/SKILL.md) — Profiling and pooling guidance when `PhysicsServer3D` swarms, soft bodies, or CCD counts become bottlenecks.
130- [godot-debugging-profiling](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-debugging-profiling/SKILL.md) — Visible collision shapes, contact normals, and profiler traps when diagnosing jitter, tunneling, or missed stairs.
131
132#### Downstream / consumers
133- [godot-combat-system](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-combat-system/SKILL.md) — 3D hitboxes/hurtboxes and projectile CCD inherit layer/mask and space-query choices from this domain.
134- [godot-genre-racing](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-genre-racing/SKILL.md) — `VehicleBody3D` suspension/friction tuning and drift feel consume the vehicle and Jolt guidance here.
135- [godot-genre-shooter-fps](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-genre-shooter-fps/SKILL.md) — Hitscan rays, CharacterBody3D movement, and high-speed projectile CCD are direct consumers of these contracts.
136- [godot-navigation-pathfinding](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-navigation-pathfinding/SKILL.md) — Agents still need physics layers for blockers and LOS; keep nav meshes and the collision world consistent.
137- [godot-monte-carlo-balancer](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-monte-carlo-balancer/SKILL.md) — Gravity, CCD, joint break thresholds, and hitbox size change win-rates; simulate those physics knobs instead of guessing.
138
139#### Master
140- [godot-master](https://github.com/thedivergentai/gd-agentic-skills/blob/main/skills/godot-master/SKILL.md) — Library router and mirrored entry point for discovering 3D physics alongside sibling domains.