本篇要点:
1)锚点属性@condof、@condir(与上一篇略重复,但更直观);
2)@active属性,主动与被动;
3)@animated属性,无点动画;
4)@deforming属性,有点动画;
5)动画和约束同时影响一个物体;
6)@orient 属性,控制旋转;

一、初步熟悉约束/绑定_牛顿摆球

不熟悉约束/绑定的,可以先看看工程文件第2案例:牛顿摆球,

【 tip:s@name = '';    //如果name是空字符,默认约束到世界坐标 】

houdini 连线 houdini绑定_锚点

二、锚点属性@condof、@condir

锚点属性@condof、@condir可用于控制Anchor锚点如何附加到对象。
@condof:控制约束自由度数、点属性、int值-0~3;
@condir:制约束方向、点属性、vector值;

约束类型为position,@condof、@condir不同值含义:
0:自由移动。
1:只允许在垂直于condir值所在平面移动。
2:只允许沿condir值所在直线移动。
3:三个轴向全部被约束,没得移动。

约束类型为rotation,@condof、@condir不同值:
0:自由旋转。
1:只允许围绕垂直于condir值所在平面上旋转。
2:只允许围绕指定的condir值旋转。
3:三个轴向全部被约束,没得旋转。

工程文件第3节案例,

如下图所示,创建模型及基本约束,

houdini 连线 houdini绑定_houdini 连线_02

使用小球撞击box,不同约束类型下,@condof、@condir具体变现为:

houdini 连线 houdini绑定_笔记_03


更多组合效果,可以自行尝试。

三、弹珠案例(锚点属性)

工程文件第4案例,主要利用了上面所说的锚点属性@condof、@condir,

houdini 连线 houdini绑定_笔记_04

四、@active属性,主动与被动

点属性,
active=0,被动物体,它可以影响别人,别人影响不了它,可以简单理解为被固定住了;
active=1,主动物体;

上案例,工程文件第5~6案例。

1、如图,创建基本约束、模型:类似链条的东西,

houdini 连线 houdini绑定_笔记_05


一般情况下,这链条会掉下来,相当于全都是主动物体(第五案例):

houdini 连线 houdini绑定_锚点_06

2、对第一个方块设置为被动i@active = 0,其它方块设置为主动i@active=1,结果为,

houdini 连线 houdini绑定_笔记_07

五、@animated无点动画

(这里的无点动画指,Pack之后,没有其它点属性参与运算/动画)
Pack之后K的动画,使用@animated;@animated解算比@deforming更快,因为Pack之后,把所有的东西当成一个点来运算,所以更快;
正确使用@animated,Houdini才能使用正确的方式去解算(如果K了动画但没设置@animated,Houdini会解算出错)。

1、工程文件第7案例

①先给最后的那个方块K个动画(在Pack之后K的动画),方块动画为,

houdini 连线 houdini绑定_笔记_08


②对第一和最后的方块设置为被动@active=0, @animated=1(其它方块不写@animated,默认为0  ),结果为,

houdini 连线 houdini绑定_houdini 连线_09


③还是这个案例,有动画但不设置@animated属性,Houdini解算出错,

houdini 连线 houdini绑定_笔记_10

2番外、使用SopSolver进行状态切换,

工程文件第8案例,与第7案例差不多,仅在dopnet内添加了sopsolver节点,节点具体在第32帧后,对最后的方块设置 i@active = 1; i@animated = 0,

结果为:在第32帧后,最后的方块掉下来(切换为主动、无动画),

houdini 连线 houdini绑定_工程文件_11

六、@deforming有点动画

Pack之前K的动画,使用@deforming;每个点都会参与运算,所以比@animated慢;实际上使用不是很多,解算也不是很巴适;

工程文件第9案例(使用上面的案例继续进行),

1、不写@defroming属性,结果为:无动画,32帧后状态切换(掉下来),解算失败,

houdini 连线 houdini绑定_houdini_12

32帧之前为啥不动呢,因为解算时,识别不到K了动画的物体,相当于name属性丢失,即name没有传递过来。
解决办法:加个TiemShift节点,把第一帧属性定下来。

2、写上@deforming属性+tiemShift节点,

houdini 连线 houdini绑定_houdini 连线_13

结果为,有动画,但并未与约束constraint一起联动,只是点动了,实际物体并没有动,32帧状态切换后,碰撞状态正常(请继续看下一案例)

七、动画和约束同时影响一个物体

Animation动画和Constraint约束同时影响一个物体。

1、原始动画在X-Z平面滑动,

houdini 连线 houdini绑定_houdini_14

需求:K完的动画后,加个碰撞体/障碍物,碰撞完后又不影响原物体的动画路径。
普遍基本思路:创建两个物体,一个a物体、一个b物体,b与a约束。等于动画给到a,b约束到a,然后用b去碰障碍物,这样动画animation和约束constraint就可以同时影响一个物体。

2、创建两个物体,一个a物体、一个b物体,动画给到a,b与a约束,然后用b去碰障碍物,

houdini 连线 houdini绑定_锚点_15


3、结果为,(想碰撞得更自然,可慢慢调hardconrel参数)

houdini 连线 houdini绑定_工程文件_16


4番外、换成崎岖的地面,不要障碍物(更改一丢丢,工程文件11案例)

houdini 连线 houdini绑定_锚点_17

八、@orient 属性

@orient 在约束网络的点上。

通过这个属性,就可以使用约束网络里面的点来控制刚体的旋转。该属性是一个四元数quaternion,四元数不了解可以看看前面的四元数笔记:

工程文件第12案例_模拟机器狗,半节腿,@orient代码示例,

p@orient = quaternion(radians(chf('radians')), set(0, 0, 1));  //quaternion(角度,轴向)

float scale = chf('scale');     // 幅度
float speed = chf('speed');     // 速度、频率
float offset1 = chf('offset1'); // 前后偏移
float offset2 = chf('offset2'); // 上下偏移

具体还是看文件吧,(对角线腿步伐一致),结果 ,

houdini 连线 houdini绑定_锚点_18


(只是大概动起来了,感兴趣的可以去细调下参数,让其更自然)