Multiple Mesh Blendshapes Driven by a Single Control in APEX

   815   2   2
User Avatar
Member
2 posts
Joined: Oct. 2024
Offline
I am currently learning APEX and have recently been exploring ways to drive multiple mesh blendshapes via a single abstract control.

So far, I have been able to make this work using the APEX auto-rig "blendshape" component to generate the blendshapes, then editing the graph, remapping the driven values, and plugging these into the blendshape drivers' inputs.

Currently, I have only been able to achieve this by manually editing the graph, and I’m trying to proceduralize the process. The issue at the moment is that I can’t seem to use graph::FindNode to "find" the blendshape subnet (which appears to be called __subnet__) created by the auto-rig component.

I’ve attached my current test scene. In this scene, I’ve created a custom subnet for remapping these values using a very similar approach to the one taken in the Luchador and Chicken Houdini example files (thanks to William Harley for these amazing free resources). I’ve added a section where this can be saved out, hopefully preventing the subnet from collapsing. If it does collapse, I’ve attached an image showing which connections will need to be reconnected.

I’m still getting the hang of APEX, so apologies if I haven’t explained this in the clearest way. If there’s any confusion, feel free to ask, and I can clarify further.

If anyone has any insight or can shed some light on this, it would be much appreciated! Hopefully, this might help others out too.

I’m blown away by APEX so far and am enjoying slowly but surely achieving a deeper understanding!

Attachments:
multiple_blendshape_control.hip (398.9 KB)
blendshape__subnet__.JPG (15.2 KB)
xy_remapper.JPG (20.3 KB)
Scene.JPG (176.2 KB)

User Avatar
Staff
78 posts
Joined: Oct. 2023
Offline
Hi,
If you want to find nodes by a pattern like %tag() or %callback() you will have to use either the:

FindNodes(): this will find an array of nodes matching your pattern
FindFirstNode(): this will find the first node in the nodes array matching your pattern

FindNode(): will only work on names.
If you know the exact name of the node you want to find, you
can use this one.

Finding a node based on the callback is very useful, but assuming that you will only have one subnet in your graph
is probably not the best idea. To be on the safe side always include a name as well, " %callback(__subnet__) & blendshape "

I have included a hip file with examples
hope this helps

Attachments:
multiple_blendshape_control_update.hip (522.4 KB)

User Avatar
Member
2 posts
Joined: Oct. 2024
Offline
william_harley
Hi,
If you want to find nodes by a pattern like %tag() or %callback() you will have to use either the:

FindNodes(): this will find an array of nodes matching your pattern
FindFirstNode(): this will find the first node in the nodes array matching your pattern

FindNode(): will only work on names.
If you know the exact name of the node you want to find, you
can use this one.

Finding a node based on the callback is very useful, but assuming that you will only have one subnet in your graph
is probably not the best idea. To be on the safe side always include a name as well, " %callback(__subnet__) & blendshape "

I have included a hip file with examples
hope this helps

Thanks, William! That was exactly what I was unsure about, and the scene really helped explain it further, so I appreciate that. Your continued communication on the forums is super helpful for learning new processes like Apex. Thanks again.
Edited by Abe_Coyne - Oct. 23, 2024 05:35:17
  • Quick Links