Guilherme Casagrandi

guilhermecasagrandi

About Me

EXPERTISE
Technical Director
INDUSTRY
Advertising / Motion Graphics  | Education  | Film/TV

Connect

LOCATION
São Paulo, Brazil
WEBSITE

Houdini Skills

Availability

Not Specified

My Talks

obj-image HUG
Rigging a Tree
obj-image HUG
CHOPS for Music and Constraints

Recent Forum Posts

Apex Script:Component: How to use subnets Dec. 19, 2025, 4:23 a.m.

sanostol
Thank You for the detailed explanation.


I still wonder how to create nodes in a subnet. The example code creates nodes in a subnet.
def test(a: vector3, b: float) -> tuple(vector3, float):
a = a * b
b = b + 1.0
return a, b

my_subnet = graph.addSubnet(test, 'my_test')
Result in the subnet:
Image Not Found



But how do I create a TransformObject for example or any apex node in a subnet?

Martin

you should save a bookmark for this page: Apex Nodes [www.sidefx.com]. It has all apex functions, and there are several to work with subnets.
You can either use addNodeToSubnet to add a node to an existing subnet, create the node and then add it to the subnet, by getting the contents array, appending the new node, then setting the new content with setSubnetContents; or you can add all nodes and then pack them as a subnet.
But all of these functions will make your code more difficult to write. In my experience, the best approach is to define the function with everything you'll need upfront.

Converting textures for ACES Dec. 19, 2025, 4:09 a.m.

pdg = tops. There's a node that uses the OIIO tool from the Academy. That's the fastest way, but you could either run a copnet to do the same thing.
Nevertheless, you will need to sort the files to set the incoming space for conversion. Here I'm using regex to scan the file names for hints. Things like "normal", "Normal", "N" are treated like raw. The same for "Displacement", "disp", "height" (I coded to use height = displacement). That's the idea.

Converting textures for ACES Dec. 18, 2025, 12:33 p.m.

I believe Houdini still looks for some hints in the filename, like "Raw", "ACEScg", so on and so forth. But take a further look at the docs for that, please.

Here I've developed a pipeline with pdg to always pre-convert everything to the aces colorspace. Normal and similar types of passes are converted to ACES, but numerically they stay the same, but they are in the ACES colorspace, that's why Houdini needs to know the incoming space to decide how to do the conversion.