神经元案例
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 来解决
c
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 实现颜色渐变效果
添加辉光小球
- 删除根部的点
- 根据剩余的点复制小球
合并所有的模型和线段