For benchmarking shapekey performance, i’ve slapped together a basic shapekey based rig with some basic deformations driven by bones for the mouth, lips, mouthcorners, nostrils, cheeks and brows. The face mesh (extracted from the character from the open movie ‘Charge’) contains over 63.000 vertices, which is quite overkill for any facial rigging mesh (the movie base mesh has around 4000 verts). (EDIT: Apparently not for AAA VFX movies, according to dan2) For performance sake, I’ve simly applied 2 subdiv modifiers and build all the shapes with that same resolution. The face mesh has over 100 shapekeys, each of them containing the same amount (63.618) of verts. All of the shapekeys are driven by the position of the control bones. Normally a feature film facial rig would contain twice as many shapekeys, but never this amount of verts. I’m running this test on my laptop with medium specs (2019):
Operating system: Windows-10-10.0.19045-SP0 64 Bits
Graphics card: NVIDIA GeForce GTX 1660 Ti with Max-Q Design/PCIe/SSE2 NVIDIA Corporation 4.6.0 NVIDIA 512.78 Opengl Backend
16GB RAM
Processor: AMD Ryzen 7 4600HS
For the test I’ve been keying all the bones, while setting playback to 60fps (as seen in the HUD of the 3d viewport). I’m linking in the rigfile into an empty scene.
Click here to watch the recording:
Einar_shapekey_benchmark_test
As seen in the video, when any shapekey has been manipulated, the framerate drops down from 60fps to around 40fps.
In my opinion, shapekey performance for facial rigging is not a bottleneck at the moment. As seen in the video, with 1 rig the framerate doesn’t drop below 40fps on a medium laptop. With 4 duplicates it drops to 18fps which is still not bad. Of course we need to take in account that this is not a full character rig, and simply an isolated test solely focussed on testing shapekey performance. If we want to spend time and resources on improving the workflow using shapekeys there’s much more to be gained from improving shapekey management, and the majority of suggestions above. Hope this helps, and let me know if i need to include the blendfile somewhere.
EDIT: you can download the blendfile here
The file itself contains all the external shapekey meshes, so it’s recommended to only link the CH-Einar_face collection into a fresh blendfile in order to do animation tests.