1.Houdini中的group(组)介绍:

1.1:Houdini group是点或者面的集合,如下图所示:

说明:图中有两个点group,一个是红色点组成的集合,另一个是黑色点组成的集合


(相关资料图)

说明:图中有两个面group,一个是紫色面组成的集合,另一个是黄色面组成的集合

1.2:Houdini中哪些存储单元可以划分group:

1.2.1:Points:本质是几何点(可以参考上一篇),可以划分group

1.2.2:Vertices:本质也是几何点(可以参考上一篇),可以划分group

1.2.3:Edges:两个点组成线,可以划分group(edge在数据面板中不可查看,为了简单起见。本文不介绍这个类型,以后介绍,但是这个仍然很重要)

1.2.4:Primitives:可以是线也可以是面(可以参考上一篇),可以划分group

1.2.5:上述内容可以参考Houdini中group create节点中的group type,如下图:         

1.3:认识函数(方法)

1.3.1:Houdini中对组的所有操作都是基于函数(方法)的,这里简单介绍下Houdini中的函数,如下图:

说明:

1.上图int为函数(方法)的返回值,可以是各种类型,int只是其中一种,我们可以用一个变量接收这个返回值,也可以直接当做另一个函数的入参(见说明第3点)

2.setpointgroup为函数名,表示这个函数的功能,比如示例中的的函数功能为:设置点的group

3.括号里的为入参,表示这个函数正常运行所需要的一些数据,不同函数的参数可长可短,也可以没有。

4.更多关于函数的介绍大家可以自行百度编程里的函数(方法),推荐简单入门一个编程语言如c/c++(详细可私信up,帮推荐),这里只是降低这篇专栏难度的简单介绍。

2.Houdini中对group的操作演示

2.1:在数据面板中查看group(组):

2.1.1:如图,给一个球体创建一个group:

说明:默认情况下会把一个几何体按照group划分的单位放到一个组里,也就是说默认情况下一个几何体只有一个group

2.1.2:如图Points下创建组:

说明:列名:group:组名,列值:1代表在group内,0则反之,在其他单位下划分group基本一样,改变group type 在相应面板查看即可,这里不再赘述

2.2:Houdini中将划分单元移除或者加入到group

2.2.1:group将单元加入和移除如下图:

1.以上演示都是在Points单元下的操作,切换上图run over在对应数据面板查看效果,函数要切换为setprimgroup和setvertexgroup,setprimgroup和setpointgroup是差不多的,setvertexgroup在参数和效果上是有些不同的

2.setpointgroup参数介绍:第一个参数是输入的端点编号,从左到右从0开始递增;第二个参数是group的名称;第三个参数是point编号,可以是固定编号,也可以使用属性对每个point遍历;第四个参数是0或者1,表示是否在group内,最后一个参数是模式目前只有一个取值"set"。更详细介绍可以去文末api链接里了解

3.setvertexgroup参数介绍:第一个参数是输入的端点编号,从左到右从0开始递增;第二个参数是group的名称;第三个参数是primitive编号,可以是固定编号,也可以使用属性对每个primitive遍历;第四个参数是偏移量,表示每隔几个vertex设置一次;第五个参数是0或者1,表示是否在group内,最后一个参数是模式目前只有一个取值"set"。更详细介绍可以去文末api链接里了解

2.3:group的基本函数

2.3.1:如图,演示节点结构:

说明:为了便于理解三个几何体分别以point,vertex, prinum为单位划分group,演示group的三个基本函数,判断单元在group内,统计group内单元数量,以数组形式返回group内所有单元编号

2.3.2:如图,判断单元在group内:

说明:

1.上面只展示了point单元下的数据,看其他单元下的效果只需要放开相应的函数,改变run over即可

2.inpointgroup函数介绍:这个函数是判断point是否在group内,三个参数从左到右分别为输入的端点编号,从左到右从0开始递增;第二个参数是group名称,第三个参数是要判断的point编号,可以是固定编号,也可以使用属性进行遍历;返回值表示是否存在,0表示不存在,1反之,如上图point_exit列;invertexgroup,inprimgroup函数同理

3.详细内容查阅文末api文档

2.3.3:如图,统计group内单元的数:

说明:

1.统计group内单元数量只需要执行一次就够了,所以在detail单元下查看是最方便的

2. npointsgroup函数介绍:统计group内point的数量,两个参数从左到右分别为输入的端点编号,从左到右从0开始递增;第二个参数为要统计的group的名称;返回值是统计的point的数量;nverticesgroup和nprimitivesgroup同理

3.详细内容查阅文末api文档

2.3.4:如图,以数组形式返回group内所有单元的编号:

说明:

1.以数组形式返回group内所有单元的编号只需要执行一次就够了,所以在detail单元下查看是最方便的

2.expandpointgroup函数介绍:以数组形式返回group内所有point的编号,两个参数从左到右分别为输入的端点编号,从左到右从0开始递增;第二个参数为要统计的group的名称;返回值是group所有point编号的数组;expandvertexgroup和expandvertexgroup同理

3.详细内容查阅文末api文档

2.4:group扩展

2.4.1:如图,演示节点结构:

说明:

1.以上演示都是point单元下的演示

2.扩展是为了给Houdini中使用组的提供一个tip,让大家了解编程操作group的灵活性和强大之处,更多内容在以后的专栏或者读者可以自行研究

2.4.2:寻找group内point的最近point

说明:

1.nearpoint函数介绍:这个函数是point函数,不是group的,函数功能就是寻找group内距离输入point最近的point,一共有三个参数从左到右分别为输入的端点编号,从左到右从0开始递增;第二个参数是组的名称;第三个参数是输入点的坐标,可以是固定点的坐标,也可以用属性遍历;返回值是距离最近point的编号

2.该函数还有很多重载方法,重载是编程术语,意思是函数名相同,但是参数的类型,顺序,长度不同。大家可以自行去文末api链接了解

3.可以看到第二个函数使用了一个"@P.x>0"的group名称,这是一种高阶用法,以表达式匹配生成group,表达式可以很复杂,这里只是限定了坐标x>0的所有point

补充说明:

1.Houdini api 文档链接:https://www.sidefx.com/docs/houdini/vex/functions/

2.示例下载:

链接: https://pan.baidu.com/s/1SFgv8corlJmP-A2pqqVBfg 提取码: abcd 

3.温馨提示:api文档很重要,以后编程自由很大一部分要依赖api文档

ps:如有错误留下评论,up改正,一起进步

上一篇:Houdini vex 语法第一篇(属性)

下一篇:Houdini vex 语法第三篇(参数):待续 

推荐内容