Skip to content

Conversation

@fire
Copy link
Member

@fire fire commented May 16, 2025

For review

@TokageItLab TokageItLab force-pushed the ik-modifier-3d branch 19 times, most recently from 9590571 to 331143d Compare May 31, 2025 11:00
@TokageItLab TokageItLab force-pushed the ik-modifier-3d branch 2 times, most recently from 442385e to 19b07e2 Compare June 5, 2025 02:09
@fire
Copy link
Member Author

fire commented Jun 5, 2025

Yay the ik is passing cicd.

@TokageItLab TokageItLab force-pushed the ik-modifier-3d branch 2 times, most recently from bc0b91c to 3018b3d Compare July 27, 2025 16:49
@fire
Copy link
Member Author

fire commented Aug 5, 2025

@TokageItLab How does chainik3d work?

@TokageItLab
Copy link
Member

TokageItLab commented Aug 5, 2025

I plan that ChainIK3D works to process no-branched chains but uses ManyBoneIK solver info struct, and I think we can define BranchIK3D with extending ManyBoneIK for multi-effector to organize intersection set of the joints. I am currently implementing TwoBoneIK, and once that is complete, I will attempt to implement BranchIK3D.

@fire
Copy link
Member Author

fire commented Aug 6, 2025

The basic idea behind Eron's decomposition algorithm is:

From each effector, traverse down to the skeleton root to find other effectors. As you do this maintain a list of bones_encountered, and current_weight

1a. Check if the bone is an effector other than this one. If it is, multiply current_weight by 1-effector_opacity of that effector.

1b. If current_weight is 0, stop descending for that effector.

1c. Otherwise. Add the bone to the list of bones_encountered and continue to its ancestor bone.

You now have a list of effectors, each containing a list of the bones that solve for them.

2b. Find any subsets of identical runs of bone sequences among the lists. Consolidate these into effector-groups, which contain the sequence of bones common to the origin bones_encountered lists, as well as the effectors those origin bones_encountered lists were for.

You now have effector-groups. Which are sequences of bones that all solve for the same effectors, and those bones all know how much to prefer each of the effectors they solve for.

Create an array of effector-groups, reverse sorted by the distance of the rootmost bone of each list from the skeleton root.

Create a solve_order array by traversing through the effectorgroups array, and appending each of its bones to the solve_order array.

You now have a solve_order array containing the bones in the appropriate order in which they should be solved, and with a constant set of effectors per run which you can use to minimize branching when solving, since you'll know that you're always solving for the same number of targets

@TokageItLab TokageItLab force-pushed the ik-modifier-3d branch 3 times, most recently from 0ee4228 to f384755 Compare August 10, 2025 01:43
Repiteo and others added 18 commits September 8, 2025 13:57
…e_smallest_things

Fix "SpriteFrames" editor not fully hidding the bottom panel
Move Skeleton3D init process (for dirty flags) into `POST_ENTER_TREE` from `ENTER_TREE`
Fix Wayland build with OpenGL disabled.
…copy

Fix Resource duplicate calls `ImageTexture::set_image` with an invalid image.
…w-local

Document CanvasItem `draw_*()` methods using local coordinate space
…-fix-xrreferencespacetype-url

Fix MDN link for XRReferenceSpaceType in WebXRInterface class documentation
…regression-fix

Fix status bar visibility issue after keyboard hides on Android
…ks-2

Update links to the contributing section of the docs to the appropriate new sections.
…e-store-libraries

AnimationTree: Fix `libraries` is stored
…d-for-crashlytics

added build id link flag for firebase crashlytics support for android
@TokageItLab
Copy link
Member

Superseded by #54

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.