简介: houdini 的 foreach 节点把我一个会写代码的都搞晕晕的,当前有了一些简单了解,记录一下
houdini版本: 2020.5
众多的 foreach 节点预设
Houdini 提供了 6 中节点预设,基本就是他的 Method 的不同和迭代方式的不同,有按数量迭代,最像代码里的for循环,比较好理解,其它的有按片,按点,按面,按命名的面等等,
foreach_begin 就是每一次循环迭代指定输入的数据,blockpath 就指定了这个输入属于哪个循环组的,他的类型是 block Begin,参数很少的
foreach_end 其实是 blockEnd 的节点,他的参数比较多,foreach_begin 都是找它组队

获取迭代数
我一直感觉比较麻烦的就是希望在循环中获取当前的迭代数,跟着教程在 For-each Num 这个预设的循环结构内成功的获取了当前迭代数。
For-each Num
For-each Num 有三个节点,foreach_begin 、foreach_end、foreach_count

点击 foreach_count 可以看到 他的method 是 fetchMetaData ,DetailAttributes 里面就有 iteration

使用 detail 方法获取
detail(p1,p2,p3) 三个参数的意义分别是
- p1 要获取属性的节点路径, detail 方法需要通过这个路径找到要获取数据的节点
- p2 要获取属性的名称
- p3 默认值,出现意外的时候返回这个值,让你的流程不那么尴尬
我们创建一个 null 节点来演示如何用它来获取迭代数,并将值赋予 currentNum 属性

currentNum 的公式 ,
注意公式在有的地方不会执行,需要加上 · ,这个符号是主键盘 1 键左边的 ~ 键,加上后便可以运行,这里的 currentNum 属性不加也可执行
detail("../foreach_count2/","iteration",0)

For-Each Connected Piece
这个循环是按切片循环,当时就给我整懵了,只有开始和结束,我想获当前是第几片,可劲想办法获取 那个显示了 Piece ,就是获取不到。

自己加节点
终于迈出了伟大的一步,我尝试放找到 num 循环, 新建一个input节点,然后 blockpath 指定到按片循环的end上,method 调整为 metadata

我们新建一个 null 来获取这个 metadata 的 iteration
再建一个 python 节点来输出结果


