calculation for the transformation in world space
Matrix is very powerful. Especially "World matrix" is very useful to "bake animation" for exporting to the other softwares. There is pretty nice tutorial "Enter the Matrix Knob" in this nukepedia.com. Well, "Camera" node, "Light" node and "Axis" node have this "World matrix" knob. And "TransfromGeo" node doesn't have it in its property.
Sometimes I want to get the values in this "World matrix" after "TransformGeo" and as they mean the final transformation, I mean it is some kinds of "the transformation in world space".
Simple example
First of all, I will show you "link" or "parent" with "matrix".
Here are two "Axis" nodes with simple connection.
| |
"Axis" node has both "World" and "Local" matrix knob. "World matrix" means the final transformation at that node. "Local matrix" means just how much "translate","rotate" and "scale" at that node.
Let's see their "matrix"
"Local matrix" and "World matrix" have same values in "Axis_parent". And ones of "Axis_child" are two different. In this case,"Axis_parent" is a kind of "root" or "top" node, so they must be same, and "Axis_child" is affected by "Axis_world". This is why the values in "Axis_child" are different.
And Let's calculate for this "World matrix" of "Axis_child" with python. We can get it the multiple with matrix.
The multiple oreder has to be "the matrix of child * the matrix of parent". This is very important.
So it can be written.....
World matrix of Axis_child = Local matrix of Axis_child * World matrix of Axis_parent
In python like this
1 |
import math |
Let's compare this with "World matrix" in "Axis_local".
{1.63506, -0.761793, 0.863863, 52.2646, -1.07639, -0.47688, 1.61678, 167.706, -0.409846, -1.78669, -0.799856, 175.59, 0, 0, 0, 1}
They are same!!
Working with "TransformGeo"
"TransformGeo" node desn't have "World matrix" knob. So we cannot get final transformation in world space so easily.
And we can make some kind of complicated combination.
| |
The relationship of child and parent is like this
Well, the order of the multiple is....
The transformation of "Sphere" = matrix of "TranformGeoA" * matrix of "AxisA" * matrix of "TranformGeoB" * matrix of "AxisB"
in python like this
1 |
import math |
This code make "Axis" node named "Axis_result" which has the answer of this multiplication.
Once excute this code, eventually we can get "Axis_result" which has same transformation of "Sphere1"
For good measure
We can get not only matrix but just simple "translate", "rotate" and "scale" as well.
translationOnly(), rotationOnly() and scaleOnly() can provide us those values.
in python like this
1 2 |
import math |
Thanks,