What & How & Why

Working with objects

Objects 处于 Houdini 中最顶级,使用世界坐标系。



一些常识:

  • Objects 的变换会影响其内部所有 surface 元素的变换。
  • Surface 中的变换更加精确,但速度也更慢。

Parenting

  • Parenting 指将 child object 的变换信息与 parent object “关联” 起来,换句话说,child 继承了 parent 的变换信息。
  • 除了变换信息之外,某些信息也会被继承,比如 motion blur 等渲染的属性。
  • 一个 child 只能有一个 parent,但可以对混合(blend)的 parent 进行继承。

Parenting 的两个重要选项

Geometry 节点中的很多操作都有先后顺序的。比如在 Parenting 之前要先使用 Keep position when parenting 保存位置。

  • Keep position when parenting:这个选项可以在 parenting 的时候保存 child 当前的位置,要在连接前使用。
  • Child compensation:这个选项可以让 child 不受 parent 变换的影响。需要在 parent 里面先点上再对 parent 进行变换。

Pre-Transform

Pre-Transform 用于存储 child 在 local space 中的变换,包括位置、缩放、旋转的信息。在 Houdini 中,一个 Object 会包含两个变换信息(world space / local space)来描述自己在指定空间中的变换。如果牵涉到 Parenting,Houdini 会利用 Pre-Transform 对 local / object space 中的变换信息进行读写,方便在不同情境下使用。

Pre-Transform 有几个比较重要的操作:

  • Clean transforms:将当前 local space 的坐标置零,同时将变换信息写入 pre-transform 中
  • Extract pre-transform:读取当前 pre-transform 中的信息,写入到 local space 中
  • Reset pre-transform:清空 pre-transform 中的信息。

需要注意有两点:

  • 上述的操作都可重复进行,并且后一次操作会覆盖前一次操作,因此需要谨慎对待。
  • 同时需要注意的是,在 Parenting 的过程中,若 Parent 中包含 non-uniform scale,会导致 child 的变换空间 shearing。(原理待查证FIXME