Open for Voting
Recursive Swap Sets
At present, Character Animator (v3.4) supports Swap Sets that enable users to select a single layer to be visible within a layer group.
For example, say you want to create multiple pre-drawn facial expressions for your puppet, "Normal" and "Sad". In each expression, you want to be able to change the eyebrows, eyelids and entire mouth swap set.
How would a user achieve this with a simple puppet structure like the following?
+Head
+Eyebrow Left
+Eyebrow Right
Eye Left
Eyelids Left
+Pupil Left
Eyeball Left
Eye Right
Eyelids Right
+Pupil Right
Eyeball Right
Nose
Mouth
Neutral
Smile
Surprised
M
... etc
Face
A user would need to create individual Swap Sets for each facial element that needs to change, as follows:
+Head
+Eyebrow Left
Eyebrow Left Normal
Eyebrow Left Sad
+Eyebrow Right
Eyebrow Right Normal
Eyebrow Right Sad
Eye Left
Eyelids Left
Eyelids Left Normal
Eyelids Left Sad
+Pupil Left
Eyeball Left
Eye Right
Eyelids Right
Eyelids Right Normal
Eyelids Right Sad
+Pupil Right
Eyeball Right
Nose
Mouth
Mouth Swap Set Normal
Neutral Normal
Smile Normal
Surprised Normal
M Normal
... etc
Mouth Swap Set Sad
Neutral Sad
Smile Sad
Surprised Sad
M Sad
... etc
Face
This example shows only 2 facial expressions, but imagine if you wanted a large range of emotional expression. Then add in support for head turns -- the puppet would get overly complex very quickly.
I am currently using this method on a production. For more detailed explanation, you can view my video tutorial here: https://www.youtube.com/watch?v=hEVwz4vpz6o
A better way to do this would be to support the concept of "Recursive" Swap Sets.
These would switch layers throughout an entire layer group tree, not just directly below a single layer group.
This could be used to simplify the above scenario. The user could create a structure as follows:
+Head
Expression Normal
+Eyebrow Left
+Eyebrow Right
Eye Left
Eyelids Left
+Pupil Left
Eyeball Left
Eye Right
Eyelids Right
+Pupil Right
Eyeball Right
Nose
Mouth
Neutral
Smile
Surpised
M
... etc
Face
Expression Sad
+Eyebrow Left
+Eyebrow Right
Eye Left
Eyelids Left
Eye Right
Eyelids Right
Mouth
Neutral
Smile
Surprised
M
... etc
Note that the "Expression Sad" layer group contains several layer group names that exactly match the structure in the "Expression Normal" layer group, but contains only the layers that will alter to create the "Sad" facial expression.
The "+Head" layer group would then be set as a "Recursive Swap Set" and "Expression Normal" set as Default.
When "Expression Sad" is triggered, Character Animator would recursively search through the entire "Expression Sad" layer group tree to replace layers or groups that have matching names with the target layer or group.
After the operation, the end state of the puppet, conceptually, would be:
+Head
Expression Current
+Eyebrow Left Sad
+Eyebrow Right Sad
Eye Left
Eyelids Left Sad
+Pupil Left
Eyeball Left
Eye Right
Eyelids Right Sad
+Pupil Right
Eyeball Right
Nose
Mouth
Neutral Sad
Smile Sad
Surpised Sad
M Sad
... etc
Face
Once the Trigger ends, the puppet would conceptually return to its Default state, which is "Expression Normal".
This would give users a much more convenient way to swap groups of layers for a variety of complex effects.
For example, say you want to create multiple pre-drawn facial expressions for your puppet, "Normal" and "Sad". In each expression, you want to be able to change the eyebrows, eyelids and entire mouth swap set.
How would a user achieve this with a simple puppet structure like the following?
+Head
+Eyebrow Left
+Eyebrow Right
Eye Left
Eyelids Left
+Pupil Left
Eyeball Left
Eye Right
Eyelids Right
+Pupil Right
Eyeball Right
Nose
Mouth
Neutral
Smile
Surprised
M
... etc
Face
A user would need to create individual Swap Sets for each facial element that needs to change, as follows:
+Head
+Eyebrow Left
Eyebrow Left Normal
Eyebrow Left Sad
+Eyebrow Right
Eyebrow Right Normal
Eyebrow Right Sad
Eye Left
Eyelids Left
Eyelids Left Normal
Eyelids Left Sad
+Pupil Left
Eyeball Left
Eye Right
Eyelids Right
Eyelids Right Normal
Eyelids Right Sad
+Pupil Right
Eyeball Right
Nose
Mouth
Mouth Swap Set Normal
Neutral Normal
Smile Normal
Surprised Normal
M Normal
... etc
Mouth Swap Set Sad
Neutral Sad
Smile Sad
Surprised Sad
M Sad
... etc
Face
This example shows only 2 facial expressions, but imagine if you wanted a large range of emotional expression. Then add in support for head turns -- the puppet would get overly complex very quickly.
I am currently using this method on a production. For more detailed explanation, you can view my video tutorial here: https://www.youtube.com/watch?v=hEVwz4vpz6o
A better way to do this would be to support the concept of "Recursive" Swap Sets.
These would switch layers throughout an entire layer group tree, not just directly below a single layer group.
This could be used to simplify the above scenario. The user could create a structure as follows:
+Head
Expression Normal
+Eyebrow Left
+Eyebrow Right
Eye Left
Eyelids Left
+Pupil Left
Eyeball Left
Eye Right
Eyelids Right
+Pupil Right
Eyeball Right
Nose
Mouth
Neutral
Smile
Surpised
M
... etc
Face
Expression Sad
+Eyebrow Left
+Eyebrow Right
Eye Left
Eyelids Left
Eye Right
Eyelids Right
Mouth
Neutral
Smile
Surprised
M
... etc
Note that the "Expression Sad" layer group contains several layer group names that exactly match the structure in the "Expression Normal" layer group, but contains only the layers that will alter to create the "Sad" facial expression.
The "+Head" layer group would then be set as a "Recursive Swap Set" and "Expression Normal" set as Default.
When "Expression Sad" is triggered, Character Animator would recursively search through the entire "Expression Sad" layer group tree to replace layers or groups that have matching names with the target layer or group.
After the operation, the end state of the puppet, conceptually, would be:
+Head
Expression Current
+Eyebrow Left Sad
+Eyebrow Right Sad
Eye Left
Eyelids Left Sad
+Pupil Left
Eyeball Left
Eye Right
Eyelids Right Sad
+Pupil Right
Eyeball Right
Nose
Mouth
Neutral Sad
Smile Sad
Surpised Sad
M Sad
... etc
Face
Once the Trigger ends, the puppet would conceptually return to its Default state, which is "Expression Normal".
This would give users a much more convenient way to swap groups of layers for a variety of complex effects.
