1.assemble打包,保持内存高效。
2.在blast节点中随机抽选表达式:@id=`floor(rand(detail("../iter/", "iteration", 0)) * npoints(0))`
{floor把小括号里的浮点表达式取整。
id是先用enumerrate设置好。}
3.attribrandomize属性随机化
4.centroid(0,0)
5.matchsize匹配(非常好用)
1.assemble打包,保持内存高效。
2.在blast节点中随机抽选表达式:@id=`floor(rand(detail("../iter/", "iteration", 0)) * npoints(0))`
{floor把小括号里的浮点表达式取整。
id是先用enumerrate设置好。}
3.attribrandomize属性随机化
4.centroid(0,0)
5.matchsize匹配(非常好用)
vex
Hscript expression
npoint(0);
获取0号接口进来的几何体点的总数。
detail("../..", "aa", 1);
获取某个路径下,第1个个detail编号的aa属性。
floor(10.5);
取整数,10.5的话就是10。
assemble 封装 SOP 一个智能的数字资产
copy to points
右边接口:使用循环中的每个点作为模板点
左边接口:使用“封装的石头”作为拷贝的对象
detail表达式
detail(“导航到哪个节点”,“查看哪个参数”,整数index)
本例中:
detail("../iter", "iteration", 0)
npoints VEX function:
返回输入进来的点的编号,是个int
npoints(0) :第一个输入接口进来的点的编号
group是个string函数,@id表达式中,需要··两个反引号,houdini才知道这里面的表达式需要计算
floor函数:浮点数取整
本例中blast节点group:@id= `floor(rand(detail("../iter/", "iteration", 0)) * npoints(0))`
attribrandomize节点:属性随机化,这里插入到进入循环之前,min value改成-1,使得随机程度更大
修复每块进入循环的石头的偏移:transform节点,点开+pivot transform;
centroid(哪个输入接口,这个矢量的第几个构成元素)
三个构成元素分别是0,1,2
所以本例中centroid(0, 0)centroid(0, 1)centroid(0, 2) ,可以获取到石头的center数值,然后transform移动*-1数值的移动,就可以使所有石头的轴心在世界原点
打包的物体无法使用细分节点,移动assemble节点后破坏了整体的结构,修复方法:for each end节点勾选piece attribute,输入name,name是voronoifracture节点为我们创建的一个面属性
matchsaize节点:输入接口1的几何体,和输入接口2的几何体的boundingbox做匹配
获取到物体轴心的位置 减去物体的位置 得到的结果就是0
位置矢量 减去 轴心矢量 是应该等于0