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.

// =====================================================================