Houdini中获取多个物体作为一个输入并分开使用的方法详解
Houdini中获取多个物体作为一个输入并分开使用的方法详解
在Houdini软件中,如何将多个物体作为一个输入,并在引擎内分开使用?本文将详细介绍ObjectMerge节点的使用方法,包括参数设置、输入组和元素设置的说明,并通过实操步骤展示如何支持多个物体的引入、开启分组以及使用foreach节点逐个处理输入源。
实操步骤
objectMerge 节点小说明
整个参数分两部分,一个是输入组,一个是元素设置
输入组
输入组就是指定能输入几物体,以Object1 为例 ,其中
- EnabelMerge 1:可以控制是否使用这个输入
- Object 1:就是要输入的物体的路径
- Group 1:要用到输入中的哪些组
元素设置
- Transform:控制输入元素的变换关系,例如在外部有一个 geo 的 uniformscale 放大了 500 倍,选择Into This Object会自动继承它本身的放大。
- 可以为引入的每个物体创建顶点和面片的元素分组
- PathAttribute:可以创建一个属性,记录当前物体的引用路径
第一步,支持多个物体的引入
我们需要让 ObjectMerger 节点引入多个物体而不是多个slot 引入后合并为一个,所以我们需要向外暴漏的是就是 NumberOfObjects 这给目录,而不是 Object 1 这个属性。
暴露整租属性
点击添加物体,进行测试
在 hda 面板出现参数,可以点击 Number of Obejcts 后面的加减,增减引入对象数量
内部自动关联
可以看到,内部的 Object_merge 节点已经自动关联了
开启分组
在 object_merge 节点下方元素设置部分,勾选Create Primitive Groups,
开启面片分组
- 这里的PrimitiveGroupPrefix填写的就是分组的前缀
- 下面的Add Suffix to First Group勾选后就是给第一个分组添加后缀,默认就是勾着的,官方文档说了为了避免分组重名
用 foreach 来逐个处理输入源
节点图如下 我们的 Object_Merge 节点,一个foreachNum 节点,一个 null 节点用来辅助我们获取需要的分组名,还有一个 地面 片,用来做测试用
初步节点样子
- 我们将外部的两个 box 引用到 我们 HDA 的外部参数里
创建两个box 用来做测试,box 实在最外层创建的独立的 geo,这里张图只显示引用关系
内部 object_merge 节点可以看到引用值已经传递进来了
- 我们把 object_merge 的元素数量值引用到 foreach 的迭代数控制里,这样就能自动根据 object_merge 内部的元素数量自动控制 迭代次数了
迭代次数关联
- 我们添加 boolean 节点用传递进来的盒子 去裁切 地面
添加boolean
- 调整节点链接方式
让地面做循环的输入, foreach end 节点设置为 feedback Each Iteration 模式,因为我们是用盒子一次一次的去裁切地面,所以我们把每次裁切的结果返回给 foreach, 这样就可以继承之前的裁切结果了,foreachbeigin 记得切换为 fetch feedback
foreachbegin 记得切
调整链接方式
- 使用 blast 节点查看我们的 分组获取情况
这个是为了直观看到我们获取到了哪些分组,实际使用中也可以在 boolean 节点 Bset 的 group 里去指定要用的分组。
连接上 blast 节点后,我们可以看到,自动分的两个组已经出现在了 blast 的 group 选择菜单里,我们选择一个分组,可以在视窗中观察到,一个box 已经实体化显示了
成功区分 group
选择一个分组查看
- 接下来我们就要让这个分组自动根据 foreach 的迭代进行选择
这里就可以用到我们的 NULL 节点了,用他的目的是为了让我们的属性表达式更剪短一点。
给 null 创建三个 string 属性
- preFixName 用来获取 object_merge 的前缀
- iteration 用来获取 当前迭代数
- gName 用来生成正确的组名
三个字符属性
- 添加引用和表达式
`chs("../object_merge1/primgroupprefix")`
`detail("../foreach_count1/","iteration",0)`
`chs("preFixName")+chs("iteration")`
注意 字符框里的表达式要生效 需要用
包裹起来,例如一般写 group 名字的地方都是字符串类型,就需要用
包裹起来
填写表达式
- 将 null 节点上的 gName 关联到 blast 的 group 属性上,记得勾选 Delete Non Selected,勾选后,会只保留我们指定的组,因为这个 blast 节点的意思直观理解就是炸掉选择的组,勾上后就代表着 炸掉没有选择的组
关联组名
- 我们可以先断掉 foreachend 的 iteration 关联,手动拖动其观察变化
手动看boolean 结果