godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
90.88k stars 21.14k forks source link

Bone editor does not have the ability to set rest directly #97778

Open PikaJade opened 1 month ago

PikaJade commented 1 month ago

Tested versions

Reproducible in v4.3.stable.official

System information

Godot v4.3.stable - Windows 10.0.19045 - Vulkan (Forward+) - integrated Intel(R) UHD Graphics (Intel Corporation; 31.0.101.2125) - Intel(R) Core(TM) i5-10300H CPU @ 2.50GHz (8 Threads)

Issue description

I was using a game template that I think was probably from an older version of Godot, and I noticed that the Errors console was being flooded with an error reading "invert: condition "det == 0" is true". After a little research, I found out I needed to fix the resting positions of some bones that had been incorrectly configured. However, when I tried, I found that the options to do so were grayed out. image

Steps to reproduce

  1. Open the MRP.
  2. In gobot.tscn, click on the Skeleton3D node under Armature.
  3. Click on the FootL or FootR bones.
  4. Attempt to edit the values under Rest. If the issue is with the model like I can only assume it is, they should be uneditable.

Minimal reproduction project (MRP)

Let Me Edit My Bones You Fuck.zip

TokageItLab commented 1 month ago

This is intended, not a bug. The bone editor does not have the ability to set the rest directly, so if you want to change the rest, you needs to use the option "Apply pose to rest" in the SkeletonEditor.

image

Most users do not understand the difference between pose and rest, so it needs to prevent misoperation. Also, editing a rest does not immediately preview the result of the rest change because the pose takes precedence; In Godot3, pose represented the result relative to rest, so changing rest would change the final pose, but in Godot4, rest is simply the initial value of pose, so changes in rest are not known unless pose is reset.

So, if we want to implement direct editing of rest (as a proposal), we need some kind of rest edit mode, such as enabling the Show Rest Only option during editing rest.

image