今天做了一個在點級別的smooth工具,因為houdini默認的smooth是基於primitive的。工具能夠根據輸入節點的點組(point groups)或者特定的點屬性(attributes)來smooth特定范圍的點,這里講一講制作過程中一個很值得在意的細節問題,那就是讀取輸入節點的特定屬性列表,這里講的就是point group list和attribute list。
這個問題相當於用自己的方法實現很多節點里面的選擇點組或者面組的功能,這個問題大家也許覺得非常簡單,不就是從子節點上拽一個選組的參數到父節點上就可以了。但是換個角度來思考Houdini它自己是怎樣實現下拉列表選擇組的呢。
其實Python模塊里面已經給我們准備好了非常全面的方法調用想要的數據列表,而且清楚的告訴了我們該方法會返回什么,比如點的屬性列表:
如果善於查詢Houdini幫助文檔的話,不難發現point, vertex, primitive下的屬性都可以查到,組也是類似。這樣調用輸入節點數據列表的方法就找到了,接下來在string參數的menu->menu script寫上能用的python代碼就好了:
比如需要讀取輸入節點的點屬性列表:
list = []
self = hou.pwd()
input = self.inputs()[0]
attributs = input.geometry().pointAttribs()
for attrib in attributs:
attribName = attrib.name()
if attribName != "Pw":
list.append(attribName)
list.append(attribName)
return list
讀取輸入節點的點組列表:
list = []
self = hou.pwd()
input = self.inputs()[0]
ptGroups = input.geometry().pointGroups()
for group in ptGroups:
list.append(group.name())
list.append(group.name())
return list
還有一個細節也在這提一下,怕自己以后也忘記了:
如果需要節點上的A參數的數據和B參數的變化實施更新,比如B參數是點屬性值Cd,A要求反饋B參數中Cd的size,這種情況下,比較靠譜的方法是PythonModule下面寫上更新方法,並在A參數的CallBack Script中用kwargs['node'].hdaModule().調用方法() 者hou.pwd().hdaModule().調用方法()來調用更新函數。