递归函数在所有的编程语言里都用的蛮常见的,在Python中也不例外,比如这里写一段代码来遍历Houdini文件中所有的节点,如果此节点不是官方的节点就以列表的形式返回给我,先演示效果,等下再讲原理以及代码的处理方式。
代码做了一件很简单的事,就是检查当前的hip文件中是否存在自定义的otl资产节点,如果有就返回它们的路径列表给我,当然你可以控制哪些路径是合法的资产路径。笔者试图演示正常工作中是如何在IDE中写代码然后在Houdini调用模块来调试代码的过程。
先来讲下递归函数的定义吧,这里为什么会用到递归函数?主要是因为我需要从节点最顶层来遍历每一个节点,当某一个节点存在子节点的时候,会进入子节点重新遍历子节点中的子节点,直至没有子节点,这就是一种递归的思想。
递归函数定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
最经典的一个案例就是通过递归函数来计算斐波那契数列的值
那在Houdini中是如何通过递归来访问节点并判断它是自定义节点呢?
实际每个节点的Type Properties…中都有自己的路径,官方的节点路径很明确都是在安装包中,如果能获取到这个路径并判断它不属于安装包路径就可以判断它是自定义的节点了。接下来就是写for循环遍历,写的过程中你会发现节点的子节点怎么办?很难判断一个节点有多少个子节点的嵌套,这个时候不得不用递归函数,交给代码来处理,将每个节点都交给递归函数来处理,直至完成,完事之后会将所有的自定义节点路径以列表的形式返回。
领取专属 10元无门槛券
私享最新 技术干货