这两天模仿DNEG的pipeline里印象最深的houdini中做Cache的方法,开始了探索houdini python的第一步。具体是什么代码什么效果就不多说了,此篇只是整理一下,对于houdini python入门新手(我)来说本来很简单但却花了很久的时间查到的东西,以便日后查阅。
1. importhou
没啥多说的,引入Houdini的API
2. nodes =hou.selectedNodes()或
sel = hou.selectedNodes()[0]
will return a tuple of all nodes selected. Tuple is a sequence of entries – nodes in this particular case.
取得当前选择节点
引出一个检测是否有无节点没选择的方法
def checkSelected():#check if node selected
count = 0
nodes = hou.selectedNodes()
for n in nodes:
count += 1
if not count:
return True
else:
sel = nodes[0]
return sel
感觉这种检测方式很笨,希望以后能发现更好的或者小伙伴们给我私信啊。后面可以用if checkSelected() != True:来分条件处理
3. geo = hou.node('out').createNode('geometry')
在out中创建geometry节点
4. sel.parent()为上层级节点
sel.outputs()[0]为downstream节点
sel.path()为节点全路径
5. name = ('{}'.format(sel).split("_", 1))
用“_”分割字符1次,name[1]就是“_”后面部分
6. sel.setColor(hou.Color((0.99,0.42,0))) 设置颜色
geo.moveToGoodPosition() 把geo节点放到合适的位置
7. nodeD.setInput(0, nodeU, 0) 连接nodeU 和 nodeD
8. cacheNode.parm('loadfromdisk').set(1)
设置cacheNode节点的parameter值
cacheNode.parm('file').set(geo.parm('sopoutput'))
设置cacheNode节点的file 和 geo的sopoutput 关联
9.hou_parm_template3=hou.StringParmTemplate("ROP_geometry", "ROP_GEOMETRY", 1, default_value=('',), naming_scheme=hou.parmNamingScheme.Base1,string_type=hou.stringParmType.NodeReference)
cacheNode.addSpareParmTuple(hou_parm_template3)
在cacheNode的root上添加了一个operator path的parameter
10.hou.node("somenode").parm("foo").parmTemplate()
would return the template used for that parm
最后贴一下搜到的一些代码参考吧,以便之后不同地方用到:
node = hou.node('/obj/geo1/null1')
StringParms = hou.StringParmTemplate(“JK_Name” , “JK_Label” , 2 , (“Sadjad”,“Rabiee”))
ButtonParms = hou.ButtonParmTemplate(“JKButton”,“JKButton”)
node.addSpareParmTuple(StringParms)
node.addSpareParmTuple(ButtonParms)
************************************
node = hou.node("/out/ropname")
ptg = node.parmTemplateGroup()
hou_parm_template2 = hou.ToggleParmTemplate("passOn", "Pass On", default_value=True, disable_when="")
hou_parm_template2.setJoinWithNext(True)
hou_parm_template3 = hou.StringParmTemplate("name", "Name", 1, default_value=(["temp1"]), naming_scheme=hou.parmNamingScheme.Base1,string_type=hou.stringParmType.Regular, menu_items=([]), menu_labels=([]), icon_names=([]), item_generator_script="", item_generator_script_language=hou.scriptLanguage.Python, menu_type=hou.menuType.Normal)
hou_parm_template3.setJoinWithNext(True)
target_folder = ("Passes",) // or whatever your folder is.
ptg.appendToFolder(target_folder, hou_parm_template2)
ptg.appendToFolder(target_folder, hou_parm_template3)
node.setParmTemplateGroup(ptg)
************************************
#MAKE A GEOMETRY NODE
curNode = hou.node('/obj').createNode('geo', 'character1')
#CREATE INT SLIDER IN PARAMETER INTERFACE
timeTemplate = hou.IntParmTemplate( "timeOffset", "Time Offset", 1, default_value=([0]), min=-100, max=100, min_is_strict=False, max_is_strict=False, naming_scheme=hou.parmNamingScheme.Base1, disable_when="", tags={})
curNode.addSpareParmTuple( timeTemplate, in_folder=([spareFolder]), create_missing_folders=True)
#CREATE FILE REFERENCE IN PARAMETER INTERFACE
fileTemplate = hou.StringParmTemplate( "fileIN", "File Input", 1, default_value=(["0"]), naming_scheme=hou.parmNamingScheme.Base1, string_type=hou.stringParmType.FileReference, disable_when="", tags={})
curNode.addSpareParmTuple( fileTemplate, in_folder=([spareFolder]), create_missing_folders=True)
************************************
另外感觉这是一个很好的Houdini python pipeline的入门https://github.com/kiryha/Houdini/wiki/python-for-artists
好的这次就到这里,不知道还会不会有更新,哈哈哈:P
领取专属 10元无门槛券
私享最新 技术干货