Dual quaternion skinning for Unity
- GPU skinning with compute shaders (only)
- blend shape support (calculations performed in compute shader)
- works with any platform that supports compute shaders
- preserves volume with deformation (look comparison)
- zero GC allocations per frame
- original bulging compensation method (alpha-testing, not ready for real-world applications yet)
You will not see any effect in edit mode.
The scipt only works in play mode.
If you see no effect in play mode verify that you are using the right shader.
The script was tested with following Unity versions:
During my testing the amount of time spent on actual skinning was negligible compared to the amount of time extracting
localToWorldMatrix from every bone in the hierarchy.
As long as you are not creating hundreds of characters with complex rigs (no matter the polycount) there should be no significant performance hit.
How to set up:
- Create a skinned character with
DualQuaternionSkinner.cscomponent (it will require a
- Enable mesh Read/Write in import settings
The script is programmed to automatically detect common setup problems. Check out the editor:
Why do i need SkinnedMeshRenderer?
My scripts uses
SkinnedMeshRenderer to extract an array of bones from it. Yep, that's it.
The order of bones is unpredictable and does not depent on their hierarchy.
Only SkinnedMeshRenderer knows it ¯\_(ツ)_/¯
After extracting the bone array in
Start() my script disables
SkinnedMeshRenderer component as it is no longer needed. All the animations are performed by the script. You can verify it in the editor after hitting play button.
How do I use custom shaders?
Alas it's complicated.
I added comments to "Standard hacked for DQ skinning" marking the alterations i made to the Standard shader.
You can try to do the same with your own shader to make it work with the script.
Feel free to contact me in this thread at unity forum if you need help.
I would also like to hear about your projects that use my script and your experience with it.
- Test/fix/improve bulging compensation
- It might make sense to group the data from all instances of the script into one batch and run the compute shaders only once per frame regardless of how many animated characters you have
Known bugs / problems
- Bulging compensation appears to make facial animation look a bit more stiff and robotic
If you have any questions, ideas, bug reports, or just want to discuss the script, you can contact me on unity forum