The animated human model would stretch in strange ways while being interpolated in between keyframes. This was due to issues with interpolating and blending matrices (interpolated rigid transform matrices are not guaranteed to be rigid transforms).
We needed to switch to Dual Quaternion Blending, which guarantees that blended keyframes are still rigid transforms
What is this PR?
This PR introduces Dual Quaternion Blending to the animated human demo. It uses dual quaternions on the CPU for keyframe interpolation, as well as on the GPU for blending.
Before and After Screenshots
TODO
TODO
[ ] Refactor the code. Kept throwing things in until it started working
[ ] Don't convert keyframes into dual quaternions every single frame. Do it once when loading the model and potentially write another module to do handle this
[x] Add documentation on Dual Quaternion Blending (speak towards how to make use of it. What is this user responsible for? What will the parser handle?)
Thinking that the parser should only know about matrices, but make it easy for a consumer to transform matrices into Dual Quaternions
Why this PR?
The animated human model would stretch in strange ways while being interpolated in between keyframes. This was due to issues with interpolating and blending matrices (interpolated rigid transform matrices are not guaranteed to be rigid transforms).
We needed to switch to Dual Quaternion Blending, which guarantees that blended keyframes are still rigid transforms
What is this PR?
This PR introduces Dual Quaternion Blending to the animated human demo. It uses dual quaternions on the CPU for keyframe interpolation, as well as on the GPU for blending.
Before and After Screenshots
TODO
TODO
References
Skinning with Dual Quaternions
A Beginner's Guide to Dual Quaternions
Applications of Dual Quaternions in Three Dimensional Transformation and Interpolation