mcjPropagate
Introduction
Using this script you can propagate an existing animation from a given figure/object/surface to a series of similar figures/objects/surfaces
This script is not as polished as i wanted but i have so many other projects backed up, it will have to do !
History
June 24th 2016 8PM - released the Beta version 1
June 25th 2016 9:48AM - Released Beta 2 which works for the propagation of more than 1 morph at a time
June 25th 2016 3:45PM - Released Beta 3 Buttons for property.setCanAnim( true / false )
June 25th 2016 4:23PM - Released Beta 4 material related problem solved
June 25th 2016 7:07PM - Released Version1
Installation
The zip package is found at the bottom of this page
unzip it in your daz content folder, typically
C:\Program Files\DAZ\Studio\content\
or
C:\Program Files (x86)\DAZ\Studio\content\
once installed, it will appear in your content library, under Studio / Scripts / mcasual
or
C:\Users\Public\Documents\My DAZ 3D Library\
once installed, it will appear in your content library, under My DAZ 3D Library / Scripts / mcasual
Use
I will explain this through a set of test cases
Example 1 - Propagating pose-animations across a series of figures - with looping
Amy0 has a dance animation, this is a perfect dance loop and it goes from frame 0 to 30
Amy1, Amy2, Amy3, Amy4 and Amy5 are not animated
I select Amy0, press the CTRL key, and i add Amy1, Amy2, Amy3, Amy4 and Amy5 to the selection
i run mcjPropagate
In the "Property being time-shift-replicated" section, i Select the "Figure Pose" property
In the "Lag" section, i specify i want a lag of 5 frames between each figure
i check-mark the "Loop-Rotate" checkbox, this way, the script will maintain animation looping for the 5 figures
i click on the "Loop-Time-Shift" button
A few seconds later, my 6 Amys are dancing, each one slightly out of sync
We use the term "rotate" because, yes, the animation of Amy1 is a shifted replica of Amy0's animation
but the frames that would end up at frames 31,32,33,34,35 are sent back to the beginning of the
animation playrange at frames 0, 1, 2, 3, 4 ... Amy1's dance loops, just like Amy0's dance.
World-Space Vs Local Space
World-Space rotation is the rotation of something in your scene
For example, a figure head standing straight
Local-Space is the rotation you see in Daz Studio's parameters tab
For example, a head lining up with the neck has a Bend rotation of 0 degrees
If the figure is sleeping on the floor, the head Bend may still be 0 degrees,
but its world Rotation is definitely no longer 'straight up'
Example 2 - Propagating World rotations across a chain of sticks
I have a chain of sticks, stick1 is parented to stick 0, stick 2 is parented to stick 1 , etc etc
i Select stick0, and add stick1, stick2 etc etc
i run mcjPropagate
In the "Property being time-shift-replicated" section, i Select the "World Orientation" property
In the "Lag" section, i specify i want a lag of 5 frames
i check-mark the "Loop-Rotate" checkbox, this way, the script will maintain animation looping for the 5 sticks
i click on the "Loop-Time-Shift" button
A few seconds later, my sticks are snakin!
Example 3 - Propagating Local rotations across a chain of sticks
I have a chain of sticks, stick1 is parented to stick 0, stick 2 is parented to stick 1 , etc etc
i Select stick0, and add stick1, stick2 etc etc
i run mcjPropagate
In the "Property being time-shift-replicated" section, i Select the "Local Orientation" property
In the "Lag" section, i specify i want a lag of 5 frames
i check-mark the "Loop-Rotate" checkbox, this way, the script will maintain animation looping for the 5 sticks
i click on the "Loop-Time-Shift" button
A few seconds later, my sticks are snakin!
The hat and wings (available on this site) were parented to the sticks later
Example 4 - Propagating Morphs and DForms across a collection of nodes
I have 6 identical props, they have 6 morph channels
i animated the 'StretchRight' and 'radiusBExt' of the prop named mcjMonolink
My timeline playrange covers 30 frames
i selected mcjMonolink, followed by mcjMonolink(2), mcjMonolink(3), mcjMonolink(4), mcjMonolink(5) and mcjMonolink(6)
i launched the script
selected "Modifiers from List below" )
i selected the 2 morph channels 'StretchRight' and 'radiusBExt'
specified a 3-frames delay
turned on the Looping option
Clicked the Time-Shift button
and there you have it, the 6 props act the same way with a slight delay
About the animatability of properties
Some properties like the material properties are not-animatable by default.
When you use mcjPropagate to propagate a given property, mcjPropagate will automatically turn on animation capacity on that property.
In mcjPropagate's list of properties, when a property name is followed by a number in parentheses, it means this property is animatable.
The number in parenthesis is the number of keyframes and can be 0.
The 'Prop. can Animate' and the 'Prop. Cannot Animate' buttons
Lets you turn animatability of the selected property on or off.
note that when the animatability of a property is turned off, any keyframe on that property are deleted.
Example 6- Propagating a material property animation across a collection of surfaces of one node
If only one object is selected and if more than one material/surface is selected ( in Daz Studio's Surfaces Tab )
then you can use the 'Time-Shift' button to spread that animation across the list of selected materials
I have a Flower prop with 8 materials, one per petal. That prop is one object and uses morphs to curl the petals.
i select the prop, then in the Surfaces tab i select the 8 materials .
i run mcjPropagate
i select the "Material properties From List Below" option"
in the list of material properties, i select the "Diffuse Color" property
On the left you can see the list of selected materials.
This list is merely informative, selecting a material or another won't have an effect on the result.
The propagation effect will proceed according to the initial order of your selection
i use the Time-Shift button to propagate it across the 8 materials
Example 7- Using the 'Prop. Cannot Animate' button to Freeze-Frame a Light
Whether you used mcjPropagate to turn on animatability of a property or not,
you can use mcjPropagate to turn it off
I select a standard Daz Studio direct-light
i select the "Select property from list below" option
i select the "Luminous Flux" property
i press the 'Prop. Cannot Animate' button, and the light intensity will be safely stable when i render animations
Example 8 - Mirroring and time-shifting an Arm
I had only Minnie's left arm animated
I Selected Minnie's Left Shoulder
i started mcjPropagate
i set the delay to 0 frames
i clicked the Limb-Mirror-Shift button
and the script duplicated/mirror the Left arm animation on the Right arm
Another common use of this will be, selecting one leg to obtain the mirrored animation
also when creating animation loops, for example a 30 frames animation loop
you will want to use a 15 frames delay
Example 9 - Time-Mirror
I animated the first 15 frames of a 30 frames animation
and i want this animation to loop
one way to obtain this is to have Minnie return to her initial position during the last 15 frames of the animation
so, with Minnie's Left Shoulder selected, and the timeline displaying frames 0 to 30
i launched mcjPropagate
i selected the "Select property from list below" option
i selected the shoulder's Twist property
i clicked the "time-mirror' button
and there you have it, from frames 16 to 30, the arm untwists the arm that was twisted from frame 0 to 15
graphically it gives us this
Using mcjCycleFilder i then smoothed this animation
License
// =====================================================================
// by mCasual/Jacques
// You can use this script freely for personal or commercial use.
// You may not sell, resell, sub-license or rent this script in any way.
// you may credit this script to mCasual/Jacques
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
// =====================================================================