Porting Code/Packages from 3.8 to 3.10

3.10 has a very different naming convention for its internal IP nodes compared to 3.8. In addition the underlying graph structure can be much more complex in 3.10. In some cases you will need to port code to 3.10 in order for it to work properly.

Turn on debugging

First of all: use "-debug mu" as the last argument on the command line when trying to debug extensions to RV. This will produce backtrace information with source line information if an exception occurs so you can track down the exact location. The process will be slightly larger when you do this

Node Names

The biggest difference between 3.8 and 3.10 is the naming of nodes in the IP graph and the ability of the user (or session file writer) to create new nodes. In addition 3.10 has "group" nodes which are like group nodes in nuke or macro nodes in shake.  You can see the basic structure by creating a session and examining its .rv file.

To make a long story short:

If you have something that looks like:

setIntProperty("display.color.sRGB", int[] {1})

then the new way to do this is to use the '#' syntax like so:

setIntProperty("#RVDisplayColor.color.sRGB", int[] {1})

The difference between these two is how the node name is treated. In the first example, the property is being looked up by exact node name ("display" in this case). In the second example, its being looked up by type ("#RVDisplayColor"). You can see the type of a node in the .rv file next to its name. So in this case, looking at the 3.10 file you'll see:

displayGroup_display : RVDisplayColor (1)
displayGroup_display : RVDisplayColor (1) { ...

The portion after the ":" is the node type.  When looking up nodes by type like this, RV will search in the current evaluation path starting at the root (the output of the graph) and working its way towards the leaves in the same way that it does evaluation. So the result can vary with the current frame.



Please sign in to leave a comment.