[Houdini] Static Object

Static Object适用于大部分解算器,由此带来的坏处就是参数很多。另一个让它很不直观的原因是houdini的obj级别有一个transform(下图1),很多节点要引用sop里的几何体时,都有一个选项问要不要应用这个transform,这让很多节点的面板变得很复杂,Static Object可以说达到了极致。尽管点一下工具栏就可以引入碰撞体,但是有时候还是需要手动设置一下的,如今大部分操作都在sop里进行, 我觉得sidefx是时候做一些改进了。这篇文章主要在说里面错综复杂的关系。(下图2)


碰撞体是分3部分数据引入的,volume,geometry,obj pos。下图是Static Object节点内部。

SOP PATH参数对应里面的sopgeo节点,用来引入geometry。如果碰撞体会动,这个geometry需要包含速度v属性。
OBJ PATH参数对应里面的objpos节点,用来引入OBJ级别上的位置变化信息,不包含缩放。这个参数可以空着。
Proxy Volume参数对应里面的sdf_geo节点(Volume Sample模式),用来引入外部的volume而不使用这个节点用SOP PATH几何体生成的volume。(下图)

当勾选Use Deforming Geometry时,Static Object节点内部用来引入volume和geometry的sop geometry节点都把Default Operation设置成了Set Always,意思是每一帧都重新读取,这样就能引入会动的碰撞体了。

Use Object Transform,这个选项就有意思了,OBJ PATH不是已经引入transform信息了吗,这个选项用来干什么?这个选项专门用来应用SOP PATH几何体上级OBJ的缩放(下图)。它对应的是内部Sop Geometry节点上的Use Object Transform。也就是说,这里应用了一个transform,而内部的obj pos节点又引入了另一个位移信息。

后话1
为什么两个地方都能引入位置信息?
大概是如果碰撞体只是动一动,没有缩放,用sop geometry节点直接引入的话,需要把Operation设置成Set Always,然后再勾选Use Object Transform,这样的话每帧都重新读取(下图),可能会损失性能,不如把Operation设置成Set initail,只读一次,然后位置信息用obj pos节点引入。

后话2。
所有的这些,包括其他节点上的各种Transform选项(下图),都是因为OBJ级别上有一个Transform。
建议改成只有路径指向OBJ而不指向OBJ内部的节点时,才应用这个transform,去掉相关的选项。再或者,直接把OBJ上的Transform删掉?


