Hi all,
Still getting used to the new Kinefx/Apex workflows, probably a simple (dare I say, silly) question: how to I occasionally/intermittently lock a joint in a 3-bone Kinefx IK setup, so that one of the joints doesn’t flex (upon command, not always)? In the old days I’d run two separate IK chains (is that still the answer, alongside a skeleton blend?).
Found 246 posts.
Search results Show results as topic list.
Rigging » Lock IK knees in Kinefx?
-
- stu
- 252 posts
- Offline
Solaris and Karma » Houdini 20.5 Karma MaterialX Normals/displacement
-
- stu
- 252 posts
- Offline
Thanks all, very much appreciated! I’ll give it a try! Apart from the usual growing pains when one undertakes such a drastic workflow adjustment, I can definitely see the advantages!
@Mario: already sub'd, great stuff!
@Mario: already sub'd, great stuff!
Edited by stu - May 31, 2025 12:40:28
Solaris and Karma » Houdini 20.5 Karma MaterialX Normals/displacement
-
- stu
- 252 posts
- Offline
Tried going back to the VEX principled_shader for Karma CPU, get some very broken looking results (despite Karma CPU compatibility with Vex principled shader...?)
Solaris and Karma » Houdini 20.5 Karma MaterialX Normals/displacement
-
- stu
- 252 posts
- Offline
The other thing - my displacement is centered at .5 (typical), but inflates the geo - not seeing a way to "centre" the displacement...?
Solaris and Karma » Houdini 20.5 Karma MaterialX Normals/displacement
-
- stu
- 252 posts
- Offline
Solaris and Karma » Houdini 20.5 Karma MaterialX Normals/displacement
-
- stu
- 252 posts
- Offline
Hey all,
Just getting my head around some of the Solaris/Karma/MaterialX workflows.
Having a devil of a time trying to figure out how I'm meant to wire normal/displacement maps, in the latest mtlxstandard surface implementation - anywhere I can grab a working example? Nothing I see online seems to have what I'm seeing here in terms of the parameters setup...
Just getting my head around some of the Solaris/Karma/MaterialX workflows.
Having a devil of a time trying to figure out how I'm meant to wire normal/displacement maps, in the latest mtlxstandard surface implementation - anywhere I can grab a working example? Nothing I see online seems to have what I'm seeing here in terms of the parameters setup...
Technical Discussion » Mantra Transmission Color, at Distance
-
- stu
- 252 posts
- Offline
dlee
Hi. There's a toggle for "Enable Absorption and Nested Dielectrics" under Rendering->Shading tab in mantra ROP which needs to be enabled for transmission colour to work under PBR.
That was it, thank you

Technical Discussion » Mantra Transmission Color, at Distance
-
- stu
- 252 posts
- Offline
Hi all,
This is driving me crazy, I'm hoping that it's something silly that I've missed.
No matter what I set the "At Distance" value to (very small to very large)in the Principled Shader, I can't get the color to show up in the transparent geo.

I have a polygonal sphere, radius of 1, Transmission Color 1,0,0, and like I said, I've tried very small(.0001)and very large (1000) values in the "At Distance" parm, no change. I get the red in the caustics though, which is baffling to me.

Renderer is vanilla mantra, PBR.
What am I missing?
t
This is driving me crazy, I'm hoping that it's something silly that I've missed.
No matter what I set the "At Distance" value to (very small to very large)in the Principled Shader, I can't get the color to show up in the transparent geo.
I have a polygonal sphere, radius of 1, Transmission Color 1,0,0, and like I said, I've tried very small(.0001)and very large (1000) values in the "At Distance" parm, no change. I get the red in the caustics though, which is baffling to me.
Renderer is vanilla mantra, PBR.
What am I missing?
t
Technical Discussion » H17 Add Fur/Paint Thickness Attribute Shelf tool error
-
- stu
- 252 posts
- Offline
Hey all,
Anyone else run into this with the off-the-shelf “Add Fur” shelf tool?
-create a polygonal sphere
-choose the “Add Fur” shelf tool
-select the sphere
-in the “geo1_hairgen” node, go to the “Thickness” tab and switch “No Override” to “Skin Attribute”:

-hit the “Paint Thickness Attrib” button
-error: “The node ”“ referenced by parameter ”Groom Object“ does not exist.”

Thoughts?
Anyone else run into this with the off-the-shelf “Add Fur” shelf tool?
-create a polygonal sphere
-choose the “Add Fur” shelf tool
-select the sphere
-in the “geo1_hairgen” node, go to the “Thickness” tab and switch “No Override” to “Skin Attribute”:
-hit the “Paint Thickness Attrib” button
-error: “The node ”“ referenced by parameter ”Groom Object“ does not exist.”
Thoughts?
Houdini Lounge » Modeling primarily in Houdini
-
- stu
- 252 posts
- Offline
Agreed, Polydraw is a step in the right direction and while I agree that part of houdini's strength is it's proceduralism, I should be presented with the option to turn it off when I'm modeling if I decide to (essentially expanding the recent Polydraw functionality to all of the geo manipulation SOPs). Proceduralism is great when I want it, but slows me down when I don't; as long as managing the network is a necessary part of the workflow (locking nodes and deleting those upstream, for example), modeling will always be slower (the recent “in-SOP” Polydraw development and it's reception serves as recognition).
My recent RFE was rejected, and I'm not happy about it. Providing the option to work non-procedurally would have been non-destructive and supported the recent promise to make houdini a “world class modeler”. The recent removal of the default FileSOP goes to the recognition that mouse clicks add up over the time, and deleting a single FileSOP is far less time consuming than needlessly (when I decide that it's needless) managing the network every few minutes.
My recent RFE was rejected, and I'm not happy about it. Providing the option to work non-procedurally would have been non-destructive and supported the recent promise to make houdini a “world class modeler”. The recent removal of the default FileSOP goes to the recognition that mouse clicks add up over the time, and deleting a single FileSOP is far less time consuming than needlessly (when I decide that it's needless) managing the network every few minutes.
Technical Discussion » strcmp expression help
-
- stu
- 252 posts
- Offline
Technical Discussion » strcmp expression help
-
- stu
- 252 posts
- Offline
Again, apologies for the simple question - still out of practice. 
I'd like to control a switch VOP based on whether or not a top level HDA parameter has an filename entry (string) or not - what am I doing wrong?
In the “index” parameter field in the switch VOP:
strcmp(`chs(“../../../parameter_entry”)`,“”)
It evaluates properly in the texport when I cd to the op and change the entry from something to nothing in the top level interface, just not in the switchVOP itself. What am I missing?
t

I'd like to control a switch VOP based on whether or not a top level HDA parameter has an filename entry (string) or not - what am I doing wrong?
In the “index” parameter field in the switch VOP:
strcmp(`chs(“../../../parameter_entry”)`,“”)
It evaluates properly in the texport when I cd to the op and change the entry from something to nothing in the top level interface, just not in the switchVOP itself. What am I missing?
t
Technical Discussion » Custom Shelf Tools not wired/appended to selected geo/network node
-
- stu
- 252 posts
- Offline
RMB-click on the output and TAB works, just too bad that I can't do it as easily from the shelf or the radial dial, in the viewport.
Technical Discussion » Custom Shelf Tools not wired/appended to selected geo/network node
-
- stu
- 252 posts
- Offline
Custom from scratch I'd expect to have to handle it myself. But a simple drag-in from the network (which is what I'm doing), I'd expect to work:
1. Select thing upon which I want to perform a function.
2. Do this (dragged-from-network shelf tool functionality) to it.
Otherwise, the “drag to shelf” functionality as a high-level workflow is limited in it's usefulness if I have to backwards-engineer basic functionality after the fact.
1. Select thing upon which I want to perform a function.
2. Do this (dragged-from-network shelf tool functionality) to it.
Otherwise, the “drag to shelf” functionality as a high-level workflow is limited in it's usefulness if I have to backwards-engineer basic functionality after the fact.
Technical Discussion » Custom Shelf Tools not wired/appended to selected geo/network node
-
- stu
- 252 posts
- Offline
That strikes me as odd given that the auto-generated script appears to contain verbage for the connection.Simple colorSOP custom shelf tool script:
import sys
import toolutils
outputitem = None
inputindex = -1
inputitem = None
outputindex = -1
num_args = 1
h_extra_args = ‘'
pane = toolutils.activePane(kwargs)
if not isinstance(pane, hou.NetworkEditor):
pane = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor)
if pane is None:
hou.ui.displayMessage(
’Cannot create node: cannot find any network pane')
sys.exit(0)
else: # We're creating this tool from the TAB menu inside a network editor
pane_node = pane.pwd()
if kwargs.has_key(“outputnodename”) and kwargs.has_key(“inputindex”):
outputitem = pane_node.item(kwargs)
inputindex = kwargs
h_extra_args += ‘set arg4 = "’ + kwargs + ‘“\n’
h_extra_args += ‘set arg5 = ”’ + str(inputindex) + ‘“\n’
num_args = 6
if kwargs.has_key(”inputnodename“) and kwargs.has_key(”outputindex"):
inputitem = pane_node.item(kwargs)
outputindex = kwargs
h_extra_args += ‘set arg6 = "’ + kwargs + ‘“\n’
h_extra_args += ‘set arg9 = ”’ + str(outputindex) + ‘“\n’
num_args = 9
if kwargs.has_key(”autoplace"):
autoplace = kwargs
else:
autoplace = False
# If shift-clicked we want to auto append to the current
# node
if kwargs.has_key(“shiftclick”) and kwargs:
if inputitem is None:
inputitem = pane.currentNode()
outputindex = 0
if kwargs.has_key(“nodepositionx”) and kwargs.has_key(“nodepositiony”):
try:
pos = [ float( kwargs ),
float( kwargs )]
except:
pos = None
else:
pos = None
if not autoplace and not pane.listMode():
if pos is not None:
pass
elif outputitem is None:
pos = pane.selectPosition(inputitem, outputindex, None, -1)
else:
pos = pane.selectPosition(inputitem, outputindex,
outputitem, inputindex)
if pos is not None:
if kwargs.has_key(“node_bbox”):
size = kwargs
pos -= size / 2
pos -= size / 2
else:
pos -= 0.573625
pos -= 0.220625
h_extra_args += ‘set arg2 = "’ + str(pos) + ‘“\n’
h_extra_args += ‘set arg3 = ”’ + str(pos) + ‘“\n’
h_extra_args += ‘set argc = ”’ + str(num_args) + ‘“\n’
pane_node = pane.pwd()
child_type = pane_node.childTypeCategory().nodeTypes()
if not child_type.has_key('color'):
hou.ui.displayMessage(
‘Cannot create node: incompatible pane network type’)
sys.exit(0)
# First clear the node selection
pane_node.setSelected(False, True)
h_path = pane_node.path()
h_preamble = ‘set arg1 = ”’ + h_path + ‘“\n’
h_cmd = r'''
if ($argc < 2 || ”$arg2“ == ”“) then
set arg2 = 0
endif
if ($argc < 3 || ”$arg3“ == ”“) then
set arg3 = 0
endif
# Automatically generated script
# $arg1 - the path to add this node
# $arg2 - x position of the tile
# $arg3 - y position of the tile
# $arg4 - input node to wire to
# $arg5 - which input to wire to
# $arg6 - output node to wire to
# $arg7 - the type of this node
# $arg8 - the node is an indirect input
# $arg9 - index of output from $arg6
\set noalias = 1
set saved_path = `execute(”oppwf“)`
opcf $arg1
# Node $_obj_geo1_color1 (Sop/color)
set _obj_geo1_color1 = `run(”opadd -e -n -v color color1“)`
oplocate -x `$arg2 + 0` -y `$arg3 + 0` $_obj_geo1_color1
opparm $_obj_geo1_color1 ramp ( 2 )
opparm $_obj_geo1_color1 color ( 1 0 0 ) ramp2pos ( 1 ) ramp2c ( 1 1 1 )
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -F on -c on -e on -b off $_obj_geo1_color1
opexprlanguage -s hscript $_obj_geo1_color1
opuserdata -n ‘___Version___’ -v ‘' $_obj_geo1_color1
opuserdata -n ’___toolcount___' -v ‘2’ $_obj_geo1_color1
opuserdata -n ‘___toolid___’ -v ‘sop_color’ $_obj_geo1_color1
opset -p on $_obj_geo1_color1
opcf $arg1
set oidx = 0
if ($argc >= 9 && ”$arg9“ != ”“) then
set oidx = $arg9
endif
if ($argc >= 5 && ”$arg4“ != ”“) then
set output = $_obj_geo1_color1
opwire -n $output -$arg5 $arg4
endif
if ($argc >= 6 && ”$arg6“ != ”") then
set input = $_obj_geo1_color1
if ($arg8) then
opwire -n -i $arg6 -0 $input
else
opwire -n -o $oidx $arg6 -0 $input
endif
endif
opcf $saved_path
'''
hou.hscript(h_preamble + h_extra_args + h_cmd)
import sys
import toolutils
outputitem = None
inputindex = -1
inputitem = None
outputindex = -1
num_args = 1
h_extra_args = ‘'
pane = toolutils.activePane(kwargs)
if not isinstance(pane, hou.NetworkEditor):
pane = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor)
if pane is None:
hou.ui.displayMessage(
’Cannot create node: cannot find any network pane')
sys.exit(0)
else: # We're creating this tool from the TAB menu inside a network editor
pane_node = pane.pwd()
if kwargs.has_key(“outputnodename”) and kwargs.has_key(“inputindex”):
outputitem = pane_node.item(kwargs)
inputindex = kwargs
h_extra_args += ‘set arg4 = "’ + kwargs + ‘“\n’
h_extra_args += ‘set arg5 = ”’ + str(inputindex) + ‘“\n’
num_args = 6
if kwargs.has_key(”inputnodename“) and kwargs.has_key(”outputindex"):
inputitem = pane_node.item(kwargs)
outputindex = kwargs
h_extra_args += ‘set arg6 = "’ + kwargs + ‘“\n’
h_extra_args += ‘set arg9 = ”’ + str(outputindex) + ‘“\n’
num_args = 9
if kwargs.has_key(”autoplace"):
autoplace = kwargs
else:
autoplace = False
# If shift-clicked we want to auto append to the current
# node
if kwargs.has_key(“shiftclick”) and kwargs:
if inputitem is None:
inputitem = pane.currentNode()
outputindex = 0
if kwargs.has_key(“nodepositionx”) and kwargs.has_key(“nodepositiony”):
try:
pos = [ float( kwargs ),
float( kwargs )]
except:
pos = None
else:
pos = None
if not autoplace and not pane.listMode():
if pos is not None:
pass
elif outputitem is None:
pos = pane.selectPosition(inputitem, outputindex, None, -1)
else:
pos = pane.selectPosition(inputitem, outputindex,
outputitem, inputindex)
if pos is not None:
if kwargs.has_key(“node_bbox”):
size = kwargs
pos -= size / 2
pos -= size / 2
else:
pos -= 0.573625
pos -= 0.220625
h_extra_args += ‘set arg2 = "’ + str(pos) + ‘“\n’
h_extra_args += ‘set arg3 = ”’ + str(pos) + ‘“\n’
h_extra_args += ‘set argc = ”’ + str(num_args) + ‘“\n’
pane_node = pane.pwd()
child_type = pane_node.childTypeCategory().nodeTypes()
if not child_type.has_key('color'):
hou.ui.displayMessage(
‘Cannot create node: incompatible pane network type’)
sys.exit(0)
# First clear the node selection
pane_node.setSelected(False, True)
h_path = pane_node.path()
h_preamble = ‘set arg1 = ”’ + h_path + ‘“\n’
h_cmd = r'''
if ($argc < 2 || ”$arg2“ == ”“) then
set arg2 = 0
endif
if ($argc < 3 || ”$arg3“ == ”“) then
set arg3 = 0
endif
# Automatically generated script
# $arg1 - the path to add this node
# $arg2 - x position of the tile
# $arg3 - y position of the tile
# $arg4 - input node to wire to
# $arg5 - which input to wire to
# $arg6 - output node to wire to
# $arg7 - the type of this node
# $arg8 - the node is an indirect input
# $arg9 - index of output from $arg6
\set noalias = 1
set saved_path = `execute(”oppwf“)`
opcf $arg1
# Node $_obj_geo1_color1 (Sop/color)
set _obj_geo1_color1 = `run(”opadd -e -n -v color color1“)`
oplocate -x `$arg2 + 0` -y `$arg3 + 0` $_obj_geo1_color1
opparm $_obj_geo1_color1 ramp ( 2 )
opparm $_obj_geo1_color1 color ( 1 0 0 ) ramp2pos ( 1 ) ramp2c ( 1 1 1 )
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -F on -c on -e on -b off $_obj_geo1_color1
opexprlanguage -s hscript $_obj_geo1_color1
opuserdata -n ‘___Version___’ -v ‘' $_obj_geo1_color1
opuserdata -n ’___toolcount___' -v ‘2’ $_obj_geo1_color1
opuserdata -n ‘___toolid___’ -v ‘sop_color’ $_obj_geo1_color1
opset -p on $_obj_geo1_color1
opcf $arg1
set oidx = 0
if ($argc >= 9 && ”$arg9“ != ”“) then
set oidx = $arg9
endif
if ($argc >= 5 && ”$arg4“ != ”“) then
set output = $_obj_geo1_color1
opwire -n $output -$arg5 $arg4
endif
if ($argc >= 6 && ”$arg6“ != ”") then
set input = $_obj_geo1_color1
if ($arg8) then
opwire -n -i $arg6 -0 $input
else
opwire -n -o $oidx $arg6 -0 $input
endif
endif
opcf $saved_path
'''
hou.hscript(h_preamble + h_extra_args + h_cmd)
Technical Discussion » Custom Shelf Tools not wired/appended to selected geo/network node
-
- stu
- 252 posts
- Offline
This is probably something simple and I'll kick myself for it later - when I make a custom shelf tool and invoke it, the newly created nodes aren't wired/appended to the selected geo/node - what am I doing wrong?
Edited by stu - Jan. 7, 2019 14:57:00
Technical Discussion » Simple popnet vortexforce question
-
- stu
- 252 posts
- Offline
Technical Discussion » Simple popnet vortexforce question
-
- stu
- 252 posts
- Offline
Apologies for what I'm sure is a ridiculously simple question - what's the best way to limit/kill the influence of the vortexforce_pop at it's centre? Eye of the storm-type stuff, where I'm making a tornado-type thing driven by a curve but I want to limit/quiet/kill the vortex influence towards the centre.
Thoughts?
Thoughts?
Houdini Lounge » Modeling primarily in Houdini
-
- stu
- 252 posts
- Offline
@McNistor:
Your points are well taken. I enjoy and use other packages too, my “don’t keep history” context (which I imagine as a simple on/off button only available in SOPs) remark comes out of the recent polydraw conversation where the developers are already starting to provide that same functionality. Like I said in the other thread, I was a fan of the (long since depreciated) model SOP that did essentially the same thing - it was great for making fast progress in a sub-assembly that didn’t require a “history”. For starters I’d settle for a “delete history” or right-click-on-node option that locked the SOP and deleted all of the upstream nodes with one step (as opposed to locking and then manually deleting), like you’d suggested.
I’ll submit an RFE today.
EDIT: RFE submitted.
Your points are well taken. I enjoy and use other packages too, my “don’t keep history” context (which I imagine as a simple on/off button only available in SOPs) remark comes out of the recent polydraw conversation where the developers are already starting to provide that same functionality. Like I said in the other thread, I was a fan of the (long since depreciated) model SOP that did essentially the same thing - it was great for making fast progress in a sub-assembly that didn’t require a “history”. For starters I’d settle for a “delete history” or right-click-on-node option that locked the SOP and deleted all of the upstream nodes with one step (as opposed to locking and then manually deleting), like you’d suggested.
I’ll submit an RFE today.
EDIT: RFE submitted.
Edited by stu - Aug. 26, 2018 12:35:01
Houdini Lounge » Modeling primarily in Houdini
-
- stu
- 252 posts
- Offline
McNistor
But you don't need a “don’t keep history context”, because there's no performance cost to node accumulation.
The performance cost is my time spent managing the network and what can quickly become dozens+ nodes. I usually work in sub-assemblies (as I'm sure that most people do) and there will be times where I want some parts of the network to retain their “history” whereas other times when I find myself continuously locking and deleting upstream nodes where the “history” is unimportant and/or cumbersome. A “don't keep history context” would eliminate the need for that time-consuming network management (“I've been modelling for 10 minutes - time to clean the network again”). I come at this as a long-time houdini user (back to the prisms days) and I find that there are times when proceduralism is essential, and times when it's burdensome - I'd like to make the choice.
-
- Quick Links