神经元案例

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
2
3
4
5
for (int i = 0; i < @numprim; i++)//根据面数循环
{
string group_name = "curve" + itoa(i+1);//生成组的名字
setprimgroup(0, group_name, i, true);//批量生成组
}
  • 给曲线添加噪波,增加混乱度
      大小噪波都是相同的point vop调整参数实现

操作截图操作截图

神经元动态辉光制作

  • 根据上面生成组的来复制点

操作截图
  • 添加point vop让生成的点在神经元上偏移

操作截图操作截图操作截图

操作截图

  • 添加point vop根据动点在线上添加颜色

操作截图

完成神经元制作

  • 添加resample节点为后面VDB采样提高精度
  • 在根部点生成球
  • 通过将球作为bounding Object进行打组并删除掉其他点

操作截图
  • 生成由内而外变小的pscale

操作截图
  • 根据余下的点通过VDB生成模型,借助pscale实现神经元的根部内大外小

操作截图
  • 添加file缓存节点加快加载速度
  • 给神经元添加随机的辉光颜色

操作截图
  • 通过attribute transfer节点将点的颜色详细传到模型上,借助blend width实现颜色渐变效果

操作截图

操作截图

  添加辉光小球

  • 删除根部的点
  • 根据剩余的点复制小球

操作截图

  合并所有的模型和线段

操作截图