======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。 \\ \\