神经元案例
ZPLUS_Houdini_SOP_1、2、3、4笔记
观看笔记
- 通过for循环生成神经元连接线
- 重点在for循环的运用上
- 加入vop point给神经元增加混乱度
- 通过点云来寻找神经元的根从而不会产生位置偏移
- 解决曲线重叠的问题
- 通过partion可以生成对各组
- 通过点云获取曲线位置
- 通过Primitive attribute节点实现UV方向上的位置偏移
- get attribute 可以获取相应的属性值进行比较
- 通过VDB生成模型
- attribute transfer 有blend融合过渡功能
神经元多重线段制作
操作逻辑
- 生成方块 并通过volume在方块上面撒点
- 通过for each循环点来生成线
- 通过delete当前循环的点获取当前循环中的其他点
- 加入point vop 获取循环点与其他周围点的距离
- 通过fit range 将获取范围区分得更加黑白分明
- 根据颜色删除其他的点从而获取到当前循环点以及其周围的点
- 将获取的点与循环点连线
为此需要循环遍历获取的点,从而只获取两个点来连线
- 最后循环遍历生成最终的线段效果
这样生成会线段会产生重叠的问题,通过打开primnum可以看到每条线段都有两条
解决方案有两种,一种是教程提到的根据点序号跳过的方案,还有一种是我自己研究的使用connect adjacent pieces节点
线段不重叠方案
点序号方案
- 在最上面加入attribute wrangle 添加一个新的变量来记录ptnum
ptnum在后面的循环中会发生变化,需要提前获取
- 再循环中加入switch节点来跳过部分线段的生成,判断条件是当循环点的pointnum大于周围点时跳过
因为pointnum是固定的,小于的时候执行从而实现只执行一次
connect adjacent pieces节点方案
- 添加connect adjacent pieces节点
- 将connection type 改为adjacent points
- 调节搜索范围和最大点
这个方案不需要循环遍历、也不需要处理线段重叠,一个节点解决问题
神经元噪波添加
注:教程最后并没有采用不重叠的方案,而是充分利用多出来的线段
- 添加connectivity节点添加class属性(通过class属性可以区分不同的线段)
- 使用partition节点根据class属性批量添加组
教程的方案在最新版的houdini中不起作用,这里采用VEX来解决
1 | for (int i = 0; i < @numprim; i++)//根据面数循环 |
- 给曲线添加噪波,增加混乱度
大小噪波都是相同的point vop调整参数实现
神经元动态辉光制作
- 根据上面生成组的来复制点
- 添加point vop让生成的点在神经元上偏移
- 添加point vop根据动点在线上添加颜色
完成神经元制作
- 添加resample节点为后面VDB采样提高精度
- 在根部点生成球
- 通过将球作为bounding Object进行打组并删除掉其他点
- 生成由内而外变小的pscale
- 根据余下的点通过VDB生成模型,借助pscale实现神经元的根部内大外小
- 添加file缓存节点加快加载速度
- 给神经元添加随机的辉光颜色
- 通过attribute transfer节点将点的颜色详细传到模型上,借助blend width实现颜色渐变效果
添加辉光小球
- 删除根部的点
- 根据剩余的点复制小球
合并所有的模型和线段