这个教程中,作者主要是演示了各个约束的模式。在开始之前,我要纠正下上一个笔记中的一些错误。

上一个笔记中,我有意无意的说vellum constraints的第一个参数Constraint Type只是起到了一个预设的作用,不会直接影响实际的约束类型。

这是因为,如果在Distance Along Edges模式下(不能叫预设了),修改Stretch参数的话,再切换到Cloth模式,Stretch参数的变化还会保留下来。所以看上去似乎vellum constraints节点里面有很多参数,通过修改Constraint Type来排列组合不同的参数,这些个参数决定了约束的类型。

而实际上,Stretch并不是决定约束类型的原因,Stretch本身只是决定了当前约束的权重。

而且在不同Constraint Type下,Stretch起到的实际作用也不一样。所以这里要修正下,Constraint Type还是能起到修改约束类型的作用的,只不过Constraint Type那么多模式,都是为了用户理解的,实际上并不是一种Constraint Type对应一种约束类型。

另外我还发现,如果使用vellum solver,哪怕不播放时间轴进行解算,直接移动碰撞体去接触vellum对象,vellum对象也会与之发生碰撞变形。这个做静态形态的时候挺方便的。

接下来就是关于这节教程的内容了,作者是演示了下各个约束的模式,我就直接整理下官方文档对Constraint Type的解释,再结合一些自己的理解了。

参考的官方文档连接在这里:
https://www.sidefx.com/docs/houdini/nodes/sop/vellumconstraints.html
https://www.sidefx.com/docs/houdini/vellum/vellumattributes.html

Distance Along Edges

将vellum对象的每一个边都转为等长的约束。

它所产生的约束类型为distance,这个类型中,约束的点距离记录在restlength属性里。只用这一种约束,就可以让多边形有布料的形态了。不过我测试一下,发现这个约束不仅仅是对多边形的vellum对象起作用,哪怕是线,也可以被正常解算。如果是线的primtive,那约束其实就是线本身了。

Bend Across Triangles

每对三角面都会创建一个约束来维持初始状态时两个面之间的夹角,如果模型面是四边面或者多边面,会自动按着三角面来切分。

它会创建一个bend约束,官方对这个约束类型的解释是,会在共享一条边的两个三角形上的四个点创建一个约束,来维持共享边的夹角。

不过这个约束本身并不能创建一个正常的vellum形态,需要配合其他的约束来创建。换句话说,一个vellum流程中只有一个bend约束,是没有办法做出正常的解算的。

Cloth

由上面两种约束共同组成。

Hair

创建的约束由线上的距离和弯曲组成的约束,这里的弯曲包括线的扭力效果。

我不知道这句话好不好理解,所谓的距离就是线本身的头尾之间会创建一个约束,然后头尾之间的弯曲力也成一个约束。不过这两个约束可不是distance和bend了,而是stretchshear和bendwist。

stretchshear本身是distance约束和bend约束的组合,bendtwist则只负责扭力效果,可以想象下麻花辫。这两个约束都是由两个点组成的,而且只用于头发。

String

这个约束跟Hair差不多,但是它没有扭力约束,所以线可以自由的旋转。

它创建的约束叫做angle,这是一个三个点组成的约束,作用是维持住利用中间点作成的角度。可以看这个图就明白了:

同样,angle也只存在于String约束模式。

以上这些约束模式,都能够自己创建出约束,而下面的约束则是工具性的约束,配合上面的约束做出更多的效果。当然,有时也可以创建出约束。

Pin to Target

将指定的点固定在目标对象上相应的点上,这里的目标对象通常都是Vellum Solver的第一个输入点。

当Pin Type为Soft的时候,会产生pinorient的约束类型。实际上是受这个参数控制的:

默认下Orientation Pin Type是Same as Position,所以会产生pinorient约束,作用是让固定的点的方向与固定前的方向一致。

而当值是None的时候,会产生pin约束。值为Soft的时候,pin和pinorient约束同时存在。因为这个太细枝末节了,先不赘述了。

Attach to Geometry

将点约束到选中的对象上,会在点和距离点最近的对象上的点之间创建一个约束。它会创建一个attach约束类型,与pin类似。

Stitch Points

在同一个多边形内用distance约束“缝纫”住点,这些点不一定非得在多边形上是相连的。想象下把一块布料的两个地方缝起来就很好理解了。

Pressure

储存原始的体积并且创建多个点的约束来维持住这个体积。

添加这个约束后,一个封闭的多边形就变为了软体,可以类比气球。有意思的是,这个pressure的约束只有一个,或者说整个pressure约束都是一个primtive,样子是这样的:

Tetrahedral Volume

可以理解为是一种特殊的软体模式,之后再研究吧。

接下来的几种,就说一下Glue好了,剩下的都有点生僻,用到的时候再说。天儿也晚了,我也困了。

Glue

每个点都会寻找自己附近不属于一个piece的点,这个怎样不属于是要自己定义的,类似做破碎一样。它也是创建一个distance约束来黏贴两者。可以做靠近时粘黏的效果,也可以断开。

如果看houdini18.0 new feature那个视频,就有一个toy模型扔到网上被粘住的效果,就可以用这个做。

睡觉!

(完)

Leave a Reply