godotengine / godotengine/godot

PhysicalBone3D gradually shift over time in editor

Open
#112,007 4 comments 4 reactions 0 assignees View on GitHub
bug topic:3d topic:editor topic:physics
Dominant language
C++
Stars
117k
Forks
26.8k
PR merge metrics
PR metrics pending

Description

### Tested versions

v4.5.stable.official [876b29033]
(v4.4 and 4.4.1 too if i remember correctly)

### System information

Windows 11

### Issue description

When leaving a scene containing a Skeleton3D character with generated PhysicalBone3D open in the editor for longer periods (a few hours), some PhysicalBone3D slowly drift from their original positions.

In my case, the drift mainly affects arms and fingers.
The drift direction isn't consistent, but it does consistently happen.

The editor doesn't flag the changes, but if I manually save, the distorted positions are written to the scene.
Closing without saving reverts to the original positions.

### Steps to reproduce

1. In the editor, import the .fbx character (idle.fbx from mixamo)
2. Place it on the scene
3. Make the node local to access the Skeleton3D
4. Create the Physical Skeleton
5. Switch to Display Overdraw in the view port to see the CollisionShape3D easier.
6. Leave the scene open in the editor for a few hours (~5 hours in the attached video).

After a while you may notice some CollisionShape3D have moved. Not the shapes themselves, but rather their parent PhysicalBone3D, as their transform.position will have changed.

### Minimal reproduction project (MRP)

You'll find attached the MRP consisting of two scenes and and the idle.fbx mixamo character :
- test_scene_new : contains freshly generated PhysicalBones3D
- test_scene_old : contains "old" PhysicalBones3D (aged roughly an hour)

[physical-bone-3d-test.zip](https://github.com/user-attachments/files/23131303/physical-bone-3d-test.zip)

(I would recommend starting from scratch as the scene takes 30 seconds to set up)

Started twitching a little after I saw the rig I carefully edited pull a weeping angel on me so I made a time lapse while I took a nap :

https://github.com/user-attachments/assets/4df8d5f6-6054-42ee-94f8-a9275d10fd4c

You can clearly see the CollisionShape3D moving over time. But the actual culprit here is the parent PhyscialBone3D's transform.position which does slightly change over time. (unfortunately i didn't capture the transform in the time-lapse, sorry about that)

Contributor guide

Open the contributing guide

Research direction

Start with the attached minimal reproduction project, comparing test_scene_new and test_scene_old while observing the Skeleton3D and generated PhysicalBone3D nodes in the editor. Trace the PhysicalBone3D transform changes during an extended open-scene session; done means the bones and CollisionShape3D remain stable and manual saving does not write unintended position changes.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
game-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.