问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Houdini中获取多个物体作为一个输入并分开使用的方法详解

创作时间:
作者:
@小白创作中心

Houdini中获取多个物体作为一个输入并分开使用的方法详解

引用
简书
1.
https://www.jianshu.com/p/6e90fb876c23

在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 节点用来辅助我们获取需要的分组名,还有一个 地面 片,用来做测试用

初步节点样子

  1. 我们将外部的两个 box 引用到 我们 HDA 的外部参数里

创建两个box 用来做测试,box 实在最外层创建的独立的 geo,这里张图只显示引用关系

内部 object_merge 节点可以看到引用值已经传递进来了

  1. 我们把 object_merge 的元素数量值引用到 foreach 的迭代数控制里,这样就能自动根据 object_merge 内部的元素数量自动控制 迭代次数了

迭代次数关联

  1. 我们添加 boolean 节点用传递进来的盒子 去裁切 地面

添加boolean

  1. 调整节点链接方式

让地面做循环的输入, foreach end 节点设置为 feedback Each Iteration 模式,因为我们是用盒子一次一次的去裁切地面,所以我们把每次裁切的结果返回给 foreach, 这样就可以继承之前的裁切结果了,foreachbeigin 记得切换为 fetch feedback

foreachbegin 记得切

调整链接方式

  1. 使用 blast 节点查看我们的 分组获取情况

这个是为了直观看到我们获取到了哪些分组,实际使用中也可以在 boolean 节点 Bset 的 group 里去指定要用的分组。

连接上 blast 节点后,我们可以看到,自动分的两个组已经出现在了 blast 的 group 选择菜单里,我们选择一个分组,可以在视窗中观察到,一个box 已经实体化显示了

成功区分 group

选择一个分组查看

  1. 接下来我们就要让这个分组自动根据 foreach 的迭代进行选择

这里就可以用到我们的 NULL 节点了,用他的目的是为了让我们的属性表达式更剪短一点。

给 null 创建三个 string 属性

  • preFixName 用来获取 object_merge 的前缀
  • iteration 用来获取 当前迭代数
  • gName 用来生成正确的组名

三个字符属性

  1. 添加引用和表达式
  
 `chs("../object_merge1/primgroupprefix")`
 `detail("../foreach_count1/","iteration",0)`
 `chs("preFixName")+chs("iteration")`
  

注意 字符框里的表达式要生效 需要用
包裹起来,例如一般写 group 名字的地方都是字符串类型,就需要用
包裹起来

填写表达式

  1. 将 null 节点上的 gName 关联到 blast 的 group 属性上,记得勾选 Delete Non Selected,勾选后,会只保留我们指定的组,因为这个 blast 节点的意思直观理解就是炸掉选择的组,勾上后就代表着 炸掉没有选择的组

关联组名

  1. 我们可以先断掉 foreachend 的 iteration 关联,手动拖动其观察变化

手动看boolean 结果

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号