4
$\begingroup$

New to Blender and just can't find a way to do this after a few days of googling. Any help much appreciated!

Is it possible to link the value of one object's animation Channel (for example the X-Location keyframe values) to another object (for example its Y location)

I don't want to copy the keyframes from one to the other. I would like the two to be dynamically linked so that moving the first object (adding keyframes) along the X axis automatically moves/adds keyframes to the second object along its Y axis.

Ideally I would also like to be able to alter the keyframe values being linked - so for example, Object1's X Location value when linked to Object2's Y Location value might be offset by 50 and inverted about the y-axis [ Object2_YPos = -(Object1_XPos+50) ]. Or the difference between Object1's X and Y co-ordinates would dictate the size of Object2 [ Object2_Scale = Object2_Scale*(Object1_YPos-Object1_XPos) ] that kind of thing.

For any of you who know Adobe AfterFX, I'm hoping to do something like linking with expressions: https://helpx.adobe.com/after-effects/using/expression-basics.html#edit_an_expression_with_the_pick_whip

The big picture: I have complex data imported from a CSV file that includes a long list of three data points over time:

0,10,5,120
2,20,5,100
3,30,15,120
etc.

I've successfully imported this data and added it to my objects as keyframes. The first value is the frame number, then the different objects use each of the following values along different axis. So Object1 reads the CSV as:

frameNum,xLoc,yLoc,zLoc

and Object2 uses a slightly different import template:

frameNum,yLoc,xLoc,zLoc

The problem is that I end up with the same data in two different Actions which seems inefficient (I have a lot of data points; 1 per frame over 50000+ frames). Is it possible to have an Action that exists once in the Dope Sheet editor but which is used in different ways by different objects?

Update: As I typed this, 'Similar Questions' started to appearing which seem to suggest that the answer might be Drivers and/or animation nodes. All very new to me, so I'll go and investigate and post a reply to myself if I solve it. In the meanwhile, can anyone help point me in the right direction? I'll be very grateful for any help, advice and/or exemplar blender files as I find the docs a little cryptic at times :)

$\endgroup$
4
$\begingroup$

This is a classic case for using drivers.

Drivers are a bit tricky to master BEFORE you know what they're good for, but your case describes a very good example for their use.

Drivers allow you to use one property (or several) to drive another. There are several types of drivers, one of which is an expression where you can use arithmetic operators and mathematical functions. This is really useful when you want to create offset / inverted / factored relationship between the driving and driven properties (which seems to be what you are looking for. For instance advance 2 units in object1.location.y for each unit of object2.location.x).

It will be rather cumbersome to explain how to create and manipulate drivers here in text, but there are quite a few excellent video tutorials (such as this one) that will get you quickly acquainted with drivers.

Once you've grasped how to add and manipulate drivers via the UI, you can automate the process via python.

$\endgroup$
  • $\begingroup$ This is really useful thank you. I particularly recommend that video to any blender noob like me. $\endgroup$ – baroquedub Aug 13 '15 at 14:26
4
$\begingroup$

First off, a big shoutout to TLousky who provided an equally valid answer. It just happens that I didn't go down that route...

I ended up installing Jacques Lucke's Animation Nodes add-on which provides a really nice way to do this visually within the Node editor.

Here are screenshots of my set-up - for the specific scenario I needed with 3 points on a graph (each offset by a set time) which are then projected in three dimensions.

First I offset my 'master' object (Sphere-X) which is animated to follow a 2D plot (graph). Sphere-X moves up and down on the Z-axis as it travels to the right on the X-axis. So in the first node tree below, the two slave objects (Sphere-Y and Sphere-Z) follow the same X and Z transformations but each is offset by a set number of frames:

First Node editor tree for time offset

Then a fourth object (point_inCube) moves in 3 dimensions using the z co-ordinates of Sphere-X for its z location (that's the Copy Transforms node at the top) then Sphere-Y and Sphere-Z are each used to provide the other co-ordinate axis (but note the use of the Separate Vector nodes to swap from one axis to another): second node editor tree for 3D projection

I'll definitely investigate Drivers further (thanks again TLousky) but this solution works well for me as I'm from a music background and it reminds me a lot of setting up a patch on a modular synth!

ps. This is the slightly different but related answer which helped me on my way towards using Animation Nodes instead of Drivers: Change color with object rotation

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.