In the game engine that I amI'm modifying, it is supposeddesigned to blend only two animations (through something likeat a time using frame-by-frame linear interpolation of the position of the bonesbone positions during thea specified blend time). However, after adding a lot ofintroducing numerous animations for the new movement system, I came across the fact thatnoticed an issue: there is not enoughisn't sufficient "blending from blend"blend. By default"
For instance, if you quickly press, for example, W-A-W fast enough (before the blend time has expiredexpires), the character will jerkexhibits a jerky motion. This happens because, since for blendingduring the transition between left and forward movements (A-W to W) it will look as if, the engine treats the left movement was "clean" and notas "clean"—not already mixed with anotherthe prior animation. This creates noticeable artifacts. I have several options for solving the problem,potential solutions in mind but I would like to know how other people solve similar issueswould like to understand how others handle similar challenges.
In favor of greater smoothnessTo prioritize smoother and anatomicitymore anatomically accurate transitions, animations are blended frame-by-frame, and not rather than snapping from the fixed position of the bones, which wasbone positions at the time of the animation change, so I am still acting in. While this approach aligns with my current logic, although I do not knowI’m unsure if there is a great need for thisit’s strictly necessary, since I amas I’m not an expert in animation expert.
Returning to the example with W-A-W movement, it seems to me that you need to first mixingexample: I believe the solution lies in first blending the initial W and A animations in theas usual way, and then blendblending the result in a similar way with the final W animation. If we hadWith even 8eight animations that would be mixedblended in a loop according to this logicway, linear interpolation ensures that the "further" thean animation is from the actualcurrent one, the less its contribution to the position ofinfluence it has on bone positions. After the bones will be, and after blend time elapses, the bones will be determined only by the current animation dictates the bones' positions.
And at the moment of the organization ofThe challenge arises when organizing this blending cycle, the pitfalls come up. This wholeThe entire process of mixing many animations shouldmust fit intowithin the lastfinal blend time, after which itblending stops. If all blend times were the sameare identical, then there would be no problemsthis works seamlessly. However, otherwise differentwith varying blend times, artifacts might come inmay emerge. My current solution so far is this: in the loop,involves scaling all blend times (along with theand their elapsed time counters) should be scaled accordingwithin the loop to match the smallest subsequent blend time (subsequent - that is, from thosetime—subsequent referring to animations that were added tolater in the queue of animation players later), which. This guarantees their expirationall animations complete blending before the subsequent blend timesnewer ones expire. There is also an option not
An alternative approach would forego scaling blend time, butand simply throw allremove previous animations out offrom the player queue as soon as the blend time of the newer ones expiresblend times expire.
So far, I have no idea which of these two options is betterAt this point, and whether I'm talking nonsense trying to keepI’m uncertain which option is better—or if I’m misguided in insisting on frame-by-frame blending instead of a blendrather than blending from a fixed bones positionbone positions. I’d appreciate any insights or advice on this matter.