在上一篇曲线力场中,是将曲线转成体积并设置与切线方向的速度。

而这篇的思路是通过点云去搜索曲线上最近点,读取点的切线方向,设置到动力学对象的速度上。可以理解为让动力学粒子读取曲线上的方向进行运动。

资产准备

这里准备的资产是一条曲线,一块平面上生成的粒子

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_点云


houdini heightfield 怎么计算 slope 和 curvature houdini曲线_点云_02

我们要让粒子跟随曲线方向运动

求曲线方向

这里通过polyframe求切线方向

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_搜索_03


这里把切线方向设为法线(N)

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_叉乘_04

动力学准备

创建了一个动力学网络dopnetwork

加载粒子,使用popobject 读取平面粒子作为初始对象(Initial Geometry)

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_叉乘_05

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_搜索_06


创建popvop作基础连接

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_点云_07

测试,给了一个向上速度,观察下运行是否正确

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_叉乘_08

开始读取曲线切线方向

通过pointCloudOpen读取曲线上最近点

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_叉乘_09


这里点云对象连接到的是Opinput2,所以我们需要在popvop上设置下Opinput2对象为曲线

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_叉乘_10


houdini heightfield 怎么计算 slope 和 curvature houdini曲线_搜索_11

现在我们应该捕获到了曲线上最近的点,接下来过滤出法线N(在前面我们将切线方向设为N)

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_搜索_12


houdini heightfield 怎么计算 slope 和 curvature houdini曲线_叉乘_13


将得到的法线方向给到速度

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_叉乘_14


houdini heightfield 怎么计算 slope 和 curvature houdini曲线_点云_15


受影响的粒子范围可以通过设置点云搜索半径

到这里,已经实现了主要的需求效果,根据曲线方向运动

补充效果 ,往曲线靠近

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_点云_16


这需要获取最近曲线的位置,减去粒子当前位置

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_点云_17


这里会有一个问题,远离曲线的粒子根据搜索半径设置获取不到最近曲线,所以获取的最近点位置结果为0。这会导致减去粒子当前位置后是一个朝向世界中心的方向

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_叉乘_18


这里如果不想扩大搜索半径改变影响范围,可以通过判断是否在搜索半径影响范围内。

这个判断我的方法是在曲线对象上添加一个属性,值为1.

通过点云搜索这个属性,如果值为1就是在影响范围内

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_搜索_19


houdini heightfield 怎么计算 slope 和 curvature houdini曲线_点云_20


两股力相加,得到既向曲线切线方向运动又向曲线靠近的力

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_搜索_21

补充效果 ,绕曲线旋转

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_点云_22


通过上面两步,我们求得了曲线切线方向和指向曲线方向。

通过这两个向量进行叉乘,得到的会是绕曲线运动方向

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_叉乘_23

整合

最后,我们对三个力进行功能整合

除了基础的力的相加外,可以把力的方向和大小拆分控制,比如通过两位置向减得到的朝向曲线的力,距离越远得到的力越大,往曲线运动的越快。

通过Normalized可以将求出来的力标准化为长度为1的方向向量

通过lenge可以得出力的大小。

两者再次相乘,得到的结果同样是之前大小不一的力,但是这样拆分开,可以方便我们对力的大小自定义控制。

houdini heightfield 怎么计算 slope 和 curvature houdini曲线_搜索_24

链接:https://pan.baidu.com/s/1vFTcs6G4Ek6TW85iqx7F0w 提取码:wway