今天做了一个在点级别的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().调用方法()来调用更新函数。