Currently this project is postponed until we have a working Python-Widget API which will use face-maps in a generic way.
After this face-maps can be used as just one of the possible inputs for manipulators.
This means we don't need to depend on each face-map referencing a bone.
There is now a working proof of concept addon in contrib:
This design task is to outline the design for face-map usage in Blender2.8.
Note that there are lots of possible uses of face-maps, where they could be used as programmable widgets but that's out of scope for this document which focuses on getting initial planning, so it can be merged into 2.8 branch for continued development.
The aim in having face-maps is to allow people to manipulate the rig quickly without having to select objects & switch modes, select the correct bone layers... etc.
Instead, users can make immediate adjustments.
Who Would Use This?
Face-maps have a similar purpose control bones.
Where a rigger exposes only a subset of bones for animators.
These would typically be used by animators and layout artists.
Someone who isn't experienced with Blender should be able to open a character file and manipulate it easily.
Face-maps can be accessed from Object Mode, so users don't need to first select armatures before posing them and can make adjustments.
- Face-maps will be accessible in object mode for active or selected objects *.
- Adjusting a face-map will edit the associated control bone.
- Face-maps may also control shape-keys (or other values in future).
* Edit: we may end up changing the method used to detect which face-maps to display, the main goal is to allow tweaking face-maps from multiple objects at once - exactly how these are chosen may change.
- Mode Switching
While we want to avoid users mode-switching, its not useful to expose face-maps if users can *only* perform basic adjustments.
Further, creating a new mode just for face-maps (with its own key-map and operators) is creating yet-another mode users have to learn.
So face-maps that control bones will use pose-mode with face-maps bone set to active. This means its possible to insert key-frame, adjust a property - or any other typical pose operation.
Edit: to be clear, this means that while you can click on a face-map in object mode, doing so will enter pose-mode for the associated bone.
- Mixing Face-Maps With Pose Mode
The rigger will control which bones are controlled as face-maps,
A bone can be set to be shown only as a face-map, so a rigger may configure a rig to only use face-maps if they like.
However this isn't a requirement, there may be mixed bones/face-maps in use.
- Face-Map Associations
Face-maps behave in much the same way as vertex-groups, where names will be matched for automatic association.
- Face-Map Assignment
Currently assigning face-maps is similar to assigning materials.
Most likely we will want tools to create & assign face-maps from selected control-bones.
- Displaying Face-Maps
While it might be nice to have all face-maps as editable, there is some overhead in calculating which face maps to show and finding relationships between all objects which might potentially display face-maps.
For this reason, the initial version will only use the active object.
We should be able to cache the result, however there are many operations that would invalidate the cache *(renaming a bone, toggling a modifier, changing layers... etc)*.
So we might need a way to limit which face-maps are displayed, or make this an option (which I rather avoid).
There is no need to make a decision now, just noting that this adds some overhead if we want to use it by default in object-mode.
Currently an open topic - at which step would we consider merging into 2.8 acceptable.
- Initial Working Version (done, only some glitches left)
Only in Pose-Mode, face-maps are simply an alternative to accessing bones directly.
- Implement Mode Switching
Selecting face-maps without being in pose-mode or having the armature selected.
- Feature Complete
- Shape key support.
- Basic tools (things I wanted when creating test files)
- Re-Assign from selection.
- Remove (from all face maps)
- Select all un-assigned.
- Face Map option for Select Grouped Faces.
- Tool for automatic assignment.
- Improve drawing?, currently drawing is xray only.
- (Maybe) level of detail.
These are issues that can be addressed as we reach them, I don't think we need to make a decision now.
Noting the issues since it seems likely we will need to handle them before 2.8x release.
- Armature Visibility
There is a logical problems wanting only to edit face-maps where the armature may not be on a visible layer for example.
Do we disable those face-maps in this case? Allow tweaking but not enter pose mode?
- Face-Map Names
There is some name-space conflict since face maps may be used by shape-keys or bones.
We may want to have a type-selector for each face-map, or some other way to avoid ambiguous associations.
- Face-Maps as General Controls
We want to keep the option open for custom widgets with face-maps.
- Level of Detail
When zoomed out we might not want a characters eyelid to be editable, instead the head should be adjusted, wrist instead of bending finger ... etc.
We would likely need a way to choose when a face-map is too small and a fallback face-map to use in its place. (perhaps fallback can be nearest face-map thats big enough, needs some testing)
There are a few ways we could solve this, just noting it as something we may want to look into once face-maps are working.
Test File: for use with custom-manipulators branch.