伏雨朝寒悉不胜,那能还傍杏花行。去年高摘斗轻盈。漫惹炉烟双袖紫,空将酒晕一衫青。人间何处问多情。 ———— 纳兰容若
VEX
固定参数
@elemnum 代表组件的序号,@numelem 代表组件的总数。除此之外,在Primitives环境下,@primnum代表Primitive的序号,@numprim代表Primitive的总数。在Points环境下,@ptnum代表Point的序号,@numpt代表Point的总数。在Vertices环境下,@vtxnum代表Vertex的线性序号,@numvtx代表Vertex的总数。@代表某种固定参数,bbox选择可以用XSIZE代替相减
常用函数
- relbbox relbbox(0,pos)就是求pos在#0输入端输入的模型中的相对位置,整一个模型会被归一化到111
- prim&point primpoints()得到一个面的所有点,prim是primitive的称呼,@primnum就是面的数量,pointprims()得到一个点对应的面序号,npointsgroup 得到点的数量,nprimitives面的数量,prim(0,“参数”,primnumber)直接读prim里面的参数。setprimattrib()可以定向设定一个的参数
- intersect intersect(输入端口,点,向量,pw相交点位置,uvw相交点的uv位置)射线检测,碰到返回负一
- detail
在VEX中需要用/
/
来包括住
算法系列记录
- 点云找点
- pcopen获取数据输入端的属性,保存在handle里;int handle = pcopen(1,'P',@P,2,2);//1号输入端的位置属性被0号输入端的@P以半径2查找两个点,查找的是1号点的。
pciterate主要是判断handle里是否有内容(0和1),有的话才会运行,一般用于while的条件。 pcimport的主要功能是从handle里提取找到的点的数据,需要定义新的变量来储存,比如用变量color来存储@Cd属性,写成pcimport(handle,'Cd',color)
;
pcnumfound()找pcloudhandle的数量 - 如果用sop则可以直接fuse节点然后输出一个fusegroup就可以,但不方便在vex中处理。同样功能的还有pcfind,nearpoints等等,使用可以查文档。neighbours是计算同一条边上相接的点,相邻顶点,可以用来求断开的边缘等
- pcopen获取数据输入端的属性,保存在handle里;int handle = pcopen(1,'P',@P,2,2);//1号输入端的位置属性被0号输入端的@P以半径2查找两个点,查找的是1号点的。
SOP
备注记录
-
Group group里面的输入可以直接是序号,同时,如果用函数要写
·
来包裹,其他情况比如是string的表达可以直接写,比如@type==roof
。注意!!group里面不能有空格,空格代表的是另外一个元素-
对组对操作方法:@group_name方法,等于1是建组,等于0是移除出去,当然也可以用group相关的几个VEX实现,不过比较麻烦,比如我们对顶点的y值大于0的点打组到了up组,移除出了up组
if (@P.y > 0) {@group_up = 1;}
-
-
Module placement
- 全新的添加模型技巧,称之为,place module,一共只包括了几个节点,主要的难度在于命名。这个subnet里面包含了一个循环分别把点的信息读出来然后复制上去。
- file的路径可以用 ` 装函数表达和普通字符区分开。
$HIP/module/
points("../locate", 0, "folder")
/points("../locate", 0, "type")
points("../locate", 0, "name")
`points("../locate", 0, "variation")-
- 我们只需要在外边添加一个wrangle把需要的路径信息补充填到内容上就ok了。variation甚至可以带来同一个name不同效果的系列体验。代码如下
s@folder = "body"; s@type = "body"; s@name = "door_plane"; if (rand(@ptnum)>0.6) s@variation = "03"; if (rand(@ptnum)<0.3) s@variation = "02"; if (rand(@ptnum)>0.3 && rand(@ptnum)< 0.6 ) s@variation = "01";
常用节点
- copy stamps 见文章Houdini中的旋转
- rest 可以保存参数,normal position之类,后面再用同样extract 提取
- bound 之前撒点划分(内部也撒到的)操作可以用这个代替,当然,直接把一堆东西连到一个box然后选择polygon也可以直接分