【微笔记】houdini16中Geometry solver 案例制作
—— 微资讯 · 微课程 ——
利用零碎时间,走上超神之路!
houdini sovler探索教程,以一个案例为主为最终效果(如下图)详细讲解了点,线,面vex创建和构建原理,还有各种基础的内容。最后案例不算难,入门级别,不过看最后渲染效果还是不错的。小编把一些关键知识点笔记分享出来,希望对大家有所帮助。
课程目录
01课程介绍
02案例的理论分析
03添加点
04创建和可视化一个随机向量
05添加到sop solver中
06点→顶点→面的生成理论
07houdini中实现PVP理论
08法线
09变量VS属性
010VEX和vops
011解决属性和变量的问题
012解决属性和变量的问题-houdini VEX
013wire线生长原理
014wire 线生长解算器-删除随机点
015创建开始和结束的组
016查找最短路径和矢量算法
017案例-创建和可视化点
018案例-添加拓扑细节
019案例-导入logo
020案例-优化logo
021案例-额外细节
学习笔记
01课程介绍
略
02案例的理论分析
需要掌握的知识点如下
使用solver的作用就是可以基于上一帧的效果进行叠加计算
添加随机矢量方向,然后不断叠加偏移
03添加点
在空间中创建点的方法
add节点,可以设定指定的点位置
wrangle节点,需要把层级切换为 detailed(once),这个意义就是只运行一次,不需要对所有点/元素进行遍历处理一遍。
使用vex函数 addpoint(输入端,点位置P),注意矢量的写法{},下面这个就在原点创建一个点。
04创建和可视化一个随机向量
对刚才创建的点创建一个随机的vector矢量属性,添加多要给wrangle,设置层级为point,因为是对输入的所有点处理(这里当然只有一个点)
vex中创建局部变量和属性的写法不一样
vector direction这个写法是创建局部变量,只能在本wrangle中进行访问。不会创建任何属性,所以在spreadsheet中不会出现direction这个属性,使用visualize节点也不可以查看(因为查看对象是属性才行)
v@direction的写法是创建属性;
至于是要创建属性还是局部变量,要看自己需求;没必要的情况下尽量不要创建属性,因为这会增加内存和电脑运行资源,缓存到硬盘也会增加占据空间。
由于这里需要可视化操作,所以使用了属性;
v@direction = rand({1,0,0}+@Frane);//每一帧都取随机值,不过这里有个问题,因为rand()函数返回的是0-1的空间,所以最终xyz都会在正区域空间中,后面会处理的。
@P =@P+ @direction;把这个随机的矢量叠加给这个点的位置,那每一次点的位置都会发生随机偏移
05添加到sop solver中
当我们播放时间线的时候,上面我们实现了点每一帧的都在变化,但是之前变化的点没有保存,所以这时候我们需要在solver进行叠加计算。
在solver中链接到previous frame
06点→顶点→面的生成理论
关于点,顶点和面(线)的关系,公众号之前有篇文章做过详细讲解
【微课程】houdini 几何体的层级关系,顶点是什么?边在哪里? _CG猎人
07houdini中实现PVP理论
使用3个函数,分别是addpoint()创建点函数 addprim()创建面函数,和addvertex()创建顶点函数
和上面文章分析过
点可以单独存在,但是顶点不能单独存在,而顶点是链接点和面/线的桥梁。也就是说,如果想创建线和面,只有point是不行的,必须创建vertex顶点
所以出现下面感觉重复的代码
addpoint无需依赖任何东西直接创建,只要设置好点的位置就可以创建,视图中也会有点出现;
addprim(端口,prim的类型) 虽然添加了prim面但是视图中不会有任何面,原因就是我们还需要创建顶点;
addvertex(输入端,面需要,点序号)顶点创建需要3个参数,输入端,面序号,点序号,再次证明了只有存在面/线的时候才会存在顶点。单独的point不需要任何顶点。
在链接面的时候注意默认是按点需要号进行链接的
08法线
点顺序的链接方向定义了法线的朝向,也就是定义了面的正反过方向
我们这里只需要两个点链接成线就行,使用prim类型为polyline
09变量VS属性
再次对比变量和属性的区别,局部变量只存在于wrangle节点自身,不会形成属性,同时也不能被wrangle以外的节点调用。
无论是变量还是属性,都讲究数据类型匹配,比如浮点和浮点,整形和整形,矢量和矢量;对于@ptnum这个代表是点需要,肯定是整形,因为不会存在第1.5个点这种小数形式。
如果点特别多,多余的属性会拖慢电脑运行效率
010VEX和vops
vops是vex中的可视化编程,使用节点替代了vex中的函数。
vex会更加简洁,vop可以以vex形式查看,但是会有更加复杂的代码结构,因为要兼顾和各种预设。
011解决属性和变量的问题
如何让生成的点随着时间渐变
基于时间@Time或者@Frame,做一个remap过程,最后控制Alpha或者pscale属性
012解决属性和变量的问题-houdini VEX
创建一个box调整长宽厚度,scatter进行撒点,添加wrangle进行属性控制,放进solver中进行迭代计算。
本质上就是Cd.r随着时间增加递减;
013wire线生长原理
临近点之间相减获得运动矢量
014wire 线生长解算器-删除随机点
基于@ptnum的随机删除点,自定义预制控制,因为rand函数返回的是0-1
rand()函数还有一个第二个参数 seed,可以用来定义随机种子值
使用函数 removepoint(输入端口,点序号)
015创建开始和结束的组
使用sphere作为范围选择点组作为开始组
groupbyrange设置解算组 5选一
016查找最短路径和矢量算法
添加findshortestspath查找最短路径节点,设置之前分好的开始组合结束组
output paths输出链接类型为 from any start to each end模式,从任意开始组开始到每一个结束点组
添加carve节点,对线进行裁切,secondU对点进行裁切,创建wrangle节点,设置属性N
基于点的位置相减获得法线方向。
017案例-创建和可视化点
对N进行normalize ,然后设置orient属性,值为N的倍数,倍数定义
018案例-添加拓扑细节
增加grid的分段数,然后再findshortestpath后面添加smooth,之后再添加carve进行裁切(感觉本教程最酷的地方就在这里。
019案例-导入logo
abc文件导入logo,设置大小和调整位置,y轴旋转动画
链接到solver 的input2中,使用Attributetranfer对对位置P进行属性传递,对范围动画控制设置
020案例-优化logo
对logo进行pointfrom volume获得更多的点
021案例-额外细节
可以调用N对P位置叠加,设置动画设置。
获得教程的方法: