I whipped up a quick proof of concept script for my idea of using bones as animatable morph dials.
I've uploaded a video of it in action on YouTube at AnimeStudioPro - Morph Dial Script Demo and I'll try and post the lua and anme files when I get the chance.
Like I said in the puppeteer thread, it operates on actions (both single and multi-frame) and it's differential, so it's good for combining expressions and lip-sync with head turns. At the moment, it only operates on point and bone channels, but the bake button tool, which creates keyframes for the morphs instead of doing it real time using layer scripts, could theoretically operate on every channel.
What I really like about this technique is that you could do all your facial animation using a dummy head like this one and then create your actions on your final head later and substitute it in. I guess you could do the same thing with a bone rig, but it would have to be very complex meaning a much longer setup time.
I've also created separate functions for generating the morph weights and applying them. This means that it would be easy to plug in other scripts for generating the weights which use different types of bone control structures, like the puppeteer one for example. What I'd like to be able to do is use both kinds of control seamlessly together on the same bone layer.
OK, here are the "MorphDial" scripts as they currently stand:
http://users.on.net/~alexical/Anime%20S ... s_v0.3.zip (Updated 26 July 2011)
- Made bake automatically update current frame.
- Made current frame even if all dials are set to 0.
- Removed need for rt_gen_morph_dials.lua embedded script and now supports multi-threaded rendering with Anime Studio Pro 8.
- Original release.
1. The bone layer containing the morph dials has to be called "MorphDials" (by default).
2. The layers you want to control should be at the same level as the "MorphDials" layer. If any of them are group type layers then it's children will also be controlled. In theory, it's possible to control one "MorphDials" layer with another one, but it hurts my head to think about it.
3. The MorphDials layer needs to be embedded with "rt_gen_morph_weights.lua" and the layers you want it to control with "rt_apply_morph_weights.lua". Because you want the weights to be calculated before you apply them, you have to put the "MorphDials" layer below the controlled layers.
Other than that, hopefully the demos and the sample anime file will be enough to get you started. I have't done nearly as much testing as I would like, so any feedback would greatly appreciated.
By the way, I only tested these scripts for version 6.0, but it should work with version 5.6 without changing too much (probably just the collect_garbage() call in rt_apply_morph_weights.lua)