======Groups======
Houdini SOP/Group 目录下系列节点,版本://ver 16.0//\\
----
====Group 总览====
Houdini 16 中把以前使用的 //Group// 节点了分成了若干个新节点。这些节点按功能可以分为: **建立 //Group//**、 **对 //Group// 操作**、**Utility** 三个方面。
====建立 Group====
该类节点分为三种:
* ''group create'':基本的 //Group// 节点。
* ''group by range'':按 range 来分组。
* ''group by expression'': 按表达式分组。
===Group===
这个节点主要有几个比较重要的功能集 / 属性集如下:
==Base Group==
该功能集其实就是以前我们常用的 ''group by pattern''。这个功能可以使用 Houdini 自带的 [[http://www.sidefx.com/docs/houdini/model/groups#manual|Group specification syntax]] 来对各种对象进行分组。
\\
一些常见的使用例子如下:
0-10:2 //取 0 到 10, 隔两个取一次
0-10:2,3 //取 0 到10, 隔 3 个取一次 ,每次取两个(前面两个)
!1-10 //取所有不在 [1,10] 之内的对象
0-10 ^1-2 //从[0,10]中去掉 1-2 的对象
@Cd.x >0 //选择所有通道是红色的颜色属性值大于零的对象(@Cd.r不能用)。
\\
''base group'' 还可以通过 ''geometry filter'' 来指定 //Group// 中允许的数据对象类型。
==Keep in Bounding Regins==
该功能集跟老版本中用 Bounding 对象来选择区域的功能一致。\\
''Include Partially Contained Entities'' 表示只要有一部分在 Bounding 范围里的对象,都属于 //Group//。\\
==Keep by Normal==
该功能集使用 Normal 来进行对象分组:\\
\\
''backface from'': 假设我们有两个对象,一个 ''box'' 和 一个 ''sphere''。假设我们需要打组的是 ''primitive'',在 ''box'' 上,那么这个功能就是将 ''box'' 不朝着 ''sphere'' 方向的所有 ''primitive'' 都会被打组。如图,红色区域被打组:
\\
\\
\\
{{ :vfx:houdini:sop:back_face.jpg?400 |}}
==Include by Edges==
这个选项简直就是选边的利器。特别需要注意的功能:
* Unshared Edges: 快速选取几何体边缘
* Edge Angle Uses Angle Between Edges:如果在**挤出**的工程中有 Division,用这个功能可以轻松选取 Division 之间的分界边。
默认的的 Edge 编组是通过 Edge 所在的面的**夹角**(面的 Normal 夹角)作为条件进行打组。但在 //Edge Angle Uses Angle Between Edges// 勾选的情况下会使用**边的夹角**作为条件打组。
^Parameters^Usage^
|Edge Angle Uses Angle Between Edges|使用边的夹角作为打组的条件。(默认的是检测面的法线夹角) |
|Edge Depth|选取几何体上任意一点,以该点为中心寻找半径范围内最近的点打组。数值越大,半径越大。需要 //Group// 设置为点模式。 |
|Unshared Edges|这个选项会将所有非共享的边进行打组,是**获取几何体边缘**的好办法。 |
===Group Range===
//Group Range// 节点通过一系列的方法来指定分组:
* **Start / End** :对 $[Start, End]$ 区间内的点打组。
* **Relative to Start/End**:表示的区间为 $[Start, Total - End]$。
* **Start and Length**:表示的区间为:$[Start, Start + Length)$
* **Equal Partitions**:该方法把整个组元素分为 ''number of partition'' 这么多块, 而 ''partition'' 则代表指定组的 ''index''(''partition'' 的范围从 ''0'' 开始)。
===Group Expression===
该节点同样来自于以前的老 //Group// 节点;这个节点也是基于 //VEX// 的。我们可以用 ''wrangle'' 系列节点来代替这个节点;但不同是我们需要在 ''wrangle'' 里写出整个语句,而在这个节点中**只用写表达式**就可以。如果需要和其他语句写在一起使用,文档推荐使用 ''wrangle'' 系列节点。
\\
\\
注意:**该节点不使用局部变量**(比如 ''$F'')。我们可以用''@Frame''、 ''@Time'' 等代替。
====对 Group 的操作====
本类操作主要对于 Group 做合并、拷贝、删除等操作。
===Group Copy===
这个节点会把存在于右边输入端中的 group 提供给左边的输入使用,如图:
\\
\\
\\
{{ :vfx:houdini:sop:group_copy.jpg?400 |}}
\\
\\
这时 ''grid2'' 实际上套用了 ''grid1'' 中的组。而通过 group copy 在 ''grid1'' 上所做的操作,都会在 ''grid2'' 上生效。**该节点需要左边输入和右边输入匹配**;如果不匹配,拷贝结果会按最少的输入端来计算。
\\
\\
''Copy Empty Groups'' 这个选项需要酌情使用。通常禁止拷贝空组可以方便找出我们希望取出的一个组。但如果一个组是动态的话,它在某一刻的内容很可能是空的;这时如果禁止拷贝空组,就会让该动态组不连续,从而导致问题。
\\
\\
''Perfix'' 选项可以为 group 的名字添加前缀。
===Group Transfer===
这个节点和 ''group copy'' 使用方法类似,也是将右边输入中的 group 提供给左边输入使用。不同的是,左边接收的不是输入的源,而是输入的 ''proximity''。也就是说,左边的输入直接调用了右边 group 中的数据,而跟右边输入的是什么几何体没有关系。因此,**该节点并不需要匹配左边和右边的输入**。
===Group Delete===
该节点用于删除 指定group。
\\
\\
该节点只会删除 group, 不删除group内的元素。
===Group Rename===
该节点用于重命名 group。重命名次数可以有很多次,而我们也可以筛选保存哪种类型的 group。
\\
\\
多个重命名会按顺序排列,因此如下的方式会导致重命名被覆盖:
\\
\\
\\
{{ :vfx:houdini:sop:g_rename.jpg |}}
===Group Combine===
该节点通过 ''Boolean'' 运算来产生一个新节点,如图:
{{ :vfx:houdini:sop:group_combine.jpg |}}
''newgroup'' 代表新建的 group,''group1''、''group2''、代表已存在的 group。运算顺序为:
* 先建立新 group。
* 判断新 group 和 指定 group 的关系,将内容存入新 group。
* 可选的将其他 group 和新 group 组合在一起,通过各种 ''Boolean'' 运算。
====Utility====
Group utility 中主要包括了 ''group promote''。
===Group Promote===
该节点主要用于在不同 group 之间转换类型,转换后可以选择保留 group。
\\
\\