Commit graph

55 commits

Author SHA1 Message Date
Rémi Verschelde
8c0f175c94
Decouple RenderingServer from as much of the codebase as possible
Notably decouples it from:
- AccessibilityServer
- DisplayServer
- Viewport
- Window
2026-03-03 12:48:07 +01:00
Thaddeus Crews
5a5a806eaf
Merge pull request #116768 from mihe/jolt/tidying-up
Tidy some things up in `modules/jolt_physics`
2026-02-26 08:15:17 -06:00
Rémi Verschelde
f5a290ac46
Move RenderingServer enums to a dedicated RenderingServerEnums (RSE) namespace
A number of headers in the codebase included `rendering_server.h` just for
some enum definitions. This means that any change to `rendering_server.h` or
one of its dependencies would trigger a massive incremental rebuild.

With this change, we decouple a number of classes from `rendering_server.h`,
greatly speeding up incremental rebuilds for that area.

On my machine, this reduces incremental compilation time after an edit of
`rendering_server.h` by 60s (from 2m57s).
2026-02-25 19:43:03 +01:00
Mikael Hermansson
72494ba3bc Tidy some things up in modules/jolt_physics 2026-02-25 17:39:37 +01:00
Mikael Hermansson
1c16c4fdcc Add ability for Area3D to detect/influence SoftBody3D with Jolt Physics
Co-authored-by: Jorrit Rouwe <jrouwe@gmail.com>
2026-02-12 16:30:05 +01:00
Jorrit Rouwe
8a6d125ec2 Jolt Soft Body: Make default mass 1 kg and fix stiffness conversion
Before this change, the default SoftBody3D mass was 0 which would set the mass of every vertex to 1 kg. The SoftBody3D UI in this case shows 0.001 kg, while for a cloth with a reasonable number of subdivisions the actual weight would be in the order of 1000 kg. This weight is likely to be much more than the weight of other RigidBody3D's in the scene (their default weight is 1) causing unrealistic interactions.

* Changed the default mass for a soft body to 1 kg, this mass is distributed uniformly across all soft body vertices. This matches what Godot Physics does.
* Added a missing call to _update_mass() so that calling set_mass after creation actually updates the mass now.
* Added an error check to set_mass() so that it no longer accepts zero mass as input.
* Fixed the conversion from godot stiffness to Jolt's compliance with a formula that was derived from the XPBD vs PBD equations. The previous conversion routine was determined experimentally and did not account for vertex mass. This meant that when the vertex mass became really low, the simulation became unstable.
2026-02-08 10:38:46 +01:00
Jorrit Rouwe
be27d23116 Jolt Physics: Reworked how gravity is applied to dynamic bodies to prevent energy increase on elastic collisions 2026-01-23 20:08:05 +01:00
David Snopek
fc92ce3e7f Use RequiredParam/RequiredResult in some high value places 2025-12-02 10:44:12 -06:00
Jorrit Rouwe
6141e1dcc8 Jolt Physics: Remove sharing shared soft body settings from SoftBody3D
Since the soft body meshes are always copied before simulation, the shared map never actually shared data with anything. This also makes it possible to create the mesh in local space the 2nd time it gets added to a space.

This fixes the following 2 problems:
* Inertia calculation becomes inaccurate when the vertices are far away from the origin. This triggered a harmless assert on 2nd insert.
* The pressure calculations become inaccurate when the vertices are far away from the origin. Since we update the soft body position to the center of mass of all vertices at the end of every physics update, this problem lasted only for a single frame after reinserting and could cause a little jolt.
2025-11-11 21:19:48 +01:00
Jorrit Rouwe
7be272e24a SoftBody3D's position influences its physics in Jolt
The position of a soft body was always kept at identity. This introduced computational errors when moving the soft body away from the origin. Translation is now stored in the soft body's position rather than in its vertices.

Fixes #112348
2025-11-07 21:21:41 +01:00
Mikael Hermansson
cf75064c71 Jolt: Update to 5.4.0 2025-10-07 13:43:40 +02:00
Aaron Franke
3d1c9fd5de
Move server files into their subfolders 2025-09-30 19:39:39 -07:00
Jorrit Rouwe
09fcaa7db4 Fixed crash when rendering a soft body 3d
When a mesh is provided that has vertices that are not referenced by any face, these vertices will be discarded. In the internal 'mesh_to_physics' map, this led to uninitialized data which could result in a crash. Now we initialize the map with -1 and report an error when users try to manipulate these vertices.

Fixes #109883
2025-08-24 15:38:11 +02:00
Mikael Hermansson
6c907c2d37 Fix move_and_slide forcing synchronization with physics thread
Co-authored-by: Ricardo Buring <ricardo.buring@gmail.com>
2025-08-14 18:58:36 +02:00
Thaddeus Crews
8c0900450c
Merge pull request #108495 from simpkins/deadlock_comments
Document some deadlocks in the physics server code
2025-07-18 11:05:12 -05:00
Adam Simpkins
cb25b933e7 Document some deadlocks in the physics server code
Add some comments documenting locations where
PhysicsServer3D::soft_body_set_mesh() can deadlock.

godotengine/godot-proposals#12670 has a proposal for some alternate
thread-safe soft body APIs.  In the meantime it seems worth at least
documenting some of the current pitfalls in the code.
2025-07-13 13:44:48 -07:00
Mikael Hermansson
5a16e2fc78 Fix contacts not being reported properly when using Jolt Physics 2025-07-12 14:20:38 +02:00
Thaddeus Crews
b7dcb1f728
Merge pull request #108094 from simpkins/jolt_soft_body_transform
Jolt physics: wake up a soft body when its transform changes
2025-07-03 12:21:27 -05:00
Mikael Hermansson
63021bb4aa Improve performance for shapeless objects when using Jolt Physics 2025-07-03 14:14:00 +02:00
Adam Simpkins
71e3a229f6 Jolt physics: wake up a soft body when its transform changes
This updates `JoltSoftBody3D::set_transform()` to wake up the
soft body after changing the transform.

Previously, if you had a soft body that was sleeping in a steady state
on a ground plane, and you then translated it upwards by 1 meter it
would just hang in the air.  Now it falls to the ground correctly.

Issue #108090 has some details and an MRP (although that issue is mostly
about other problems in SoftBody3D iteself).
2025-06-28 16:34:51 -07:00
Rémi Verschelde
f97c51132e
Merge pull request #107832 from simpkins/soft_body_normals
Fix Jolt Physics soft body vertex normal calculation
2025-06-28 13:03:01 +02:00
Adam Simpkins
dd80a3aa19 Fix jolt_physics soft body vertex normal calculation
The code previously iterated through each face and set all vertices to
that face's normal.  This resulted in each vertex getting the normal
from just one face that it belonged to (whichever face was last in this
array).  This caused weird shading artifacts.

This fixes the code so that the vertex normal is now the average normal
of all faces that it belongs to.  This results in "smooth shading"
behavior for soft body meshes.  This is still somewhat undesirable if
the input mesh was using flat shading, but it looks less bad than the
previous behavior of picking a normal at random from one attached face.

This matches the behavior of GodotPhysicsServer3D.

Fixes #107831.
2025-06-27 17:04:15 -07:00
Mikael Hermansson
50e24e24ed Fix crash when disabling SoftBody3D while using Jolt Physics 2025-06-27 12:52:47 +02:00
Mikael Hermansson
89f9a23d9e Batch the adding of Jolt Physics bodies
Co-authored-by: Jorrit Rouwe <jrouwe@gmail.com>
2025-06-14 14:11:07 +02:00
Mikael Hermansson
e160040f0c Remove Jolt Physics project setting "Areas Detect Static Bodies" 2025-06-03 09:52:57 +02:00
Mikael Hermansson
b3ddb88035 Fix Area3D signal emissions when using Jolt Physics 2025-05-30 11:53:17 +02:00
Thaddeus Crews
dcde70f409
Merge pull request #106693 from mihe/jolt/area-cleanup
Remove force enter/exit logic from `JoltArea3D`
2025-05-28 09:47:40 -05:00
Thaddeus Crews
05ceab6b7b
Merge pull request #106321 from elzewyr/shrink-factor
SoftBody3D: Add a property for scaling rest lengths of edge constraints
2025-05-27 09:39:29 -05:00
Thaddeus Crews
de2cd663fd
Merge pull request #100463 from PiCode9560/softbody-apply-force-and-impulse
Add ability to apply forces and impulses to `SoftBody3D`
2025-05-26 11:24:45 -05:00
PiCode
fe3aaa2ae3 Add functions to apply impulse and force to SoftBody on GodotPhysics and JoltPhysics 2025-05-23 22:04:52 +03:00
Mikael Hermansson
d153a267b0 Remove error for degenerate soft body faces when using Jolt Physics 2025-05-22 20:17:47 +02:00
Mikael Hermansson
3d98aaf728 Remove force enter/exit logic from JoltArea3D 2025-05-21 21:40:40 +02:00
Thaddeus Crews
c225686e82
Merge pull request #106490 from mihe/jolt/non-monitoring-area-performance
Improve performance with non-monitoring areas when using Jolt Physics
2025-05-21 09:06:26 -05:00
Mikael Hermansson
617a39d5ea Improve performance with non-monitoring areas when using Jolt Physics 2025-05-20 13:20:12 +02:00
Elzewyr
9f67bf96fa SoftBody3D: Add a property for scaling rest lengths of edge constraints 2025-05-16 18:38:00 +03:00
Thaddeus Crews
5e27318b6c
Merge pull request #106366 from jrouwe/fix_106301
Jolt physics: Setting position instead of velocity in `JoltSoftBody3D::set_vertex_position`
2025-05-15 10:22:29 -05:00
Jorrit Rouwe
c529f36532 Jolt physics: Setting position instead of velocity in JoltSoftBody3D::set_vertex_position
This fixes a discrepancy between godot physics and Jolt physics where in Jolt a vertex pinned to a body only gets its velocity updated while in godot it gets its position updated. This causes it to lag one frame behind.

Fixes #106301
2025-05-13 22:45:58 +02:00
Mikael Hermansson
9cea7ebc91 Fix SCU build issues related to Jolt Physics 2025-05-13 12:34:55 +02:00
Mikael Hermansson
f539d0a447 Remove emitting of error in JoltBody3D::_exit_all_areas 2025-05-06 11:36:22 +02:00
Mikael Hermansson
2b88477efc Remove no-op locking in Jolt Physics module 2025-04-29 12:23:24 +02:00
Aaron Franke
a5de242a2f
Place a hard limit on the max_contacts_reported property 2025-03-29 01:17:55 -07:00
Thaddeus Crews
768d75a248
Merge pull request #101254 from mihe/jolt/better-settings
Refactor Jolt-related project settings to only be loaded as needed
2025-03-13 08:57:43 -05:00
Thaddeus Crews
324512e11c
Style: Replace header guards with #pragma once 2025-03-07 17:33:47 -06:00
Mikael Hermansson
62e8b1e5fd Fix broken negative scaling when using Jolt Physics 2025-03-02 01:14:19 +01:00
Mikael Hermansson
1006fa9c42 Skip Object::to_string when Jolt Physics is on separate thread 2025-02-11 22:55:32 +01:00
Thaddeus Crews
b7deb853c9
Merge pull request #102029 from mihe/jolt/area-mass-properties
Override mass properties for `Area3D` when using Jolt Physics
2025-01-28 09:03:40 -06:00
Thaddeus Crews
e5498020b6
Merge pull request #101815 from mihe/jolt/no-post-step
Refactor post-step operations in Jolt module to be done as needed
2025-01-26 11:49:21 -06:00
Mikael Hermansson
f380b00351 Override mass properties for Area3D when using Jolt Physics 2025-01-25 18:15:50 +01:00
Mikael Hermansson
a30410bbf5 Refactor post-step operations in Jolt module to be done as needed 2025-01-25 12:22:30 +01:00
Mikael Hermansson
3b78ff564a Refactor Jolt-related project settings to only be loaded as needed 2025-01-25 12:18:52 +01:00