2020年11月26日木曜日

parentConstraintの特徴

  Translate を拘束する pointConstraint、Rotate を拘束する orientConstraint。
  そして、Translate と Rotate を拘束する parentConstraint。

  移動と回転の両方を拘束するからと parentConstraintで拘束している人も多かったりするのかなと思ったりします。1回のコマンドで移動も回転も拘束できるので、なんか、お得な感じですが、違いを理解して使用しないと罠に嵌まってしまう事にもなりかねません。


  移動を拘束する場合、pointConstraint も parentConstraint も、挙動はそれほど変わりがありません。が、ノードの接続を見てみると、parentConstraint には、拘束元の移動・回転・スケールからもアトリビュートが接続されています。
  回転を拘束させないために回転拘束をスキップをしたとしても接続されます。

  同じ動作なのに余計な計算をしてそうで、もったいない感じがします。

  そして回転の拘束。
  普通に orientConstraint と parentConstraint を比較してみると移動と同様に、どちらも同じように回転してくれます。
  ノードの接続具合もpointConstraintと同じような差異が見られます。

  こちらも、ちょっと余計な計算をしている回転コンストレイントなのかなと思ってしまいますが、ここには重要な違いが出てきます。

  分かり易くするため、拘束を掛けるときにオフセットを付けてコンストレインを掛けてみます。
  当然、拘束元と拘束先にはオフセットが掛かった状態で動作しますが、回転とスケールのときに挙動に差異がでてきます。

  ここで parentConstreintの移動・回転・スケールのアトリビュートが接続されているという意味が理解できると思います。
  このことを理解しておかないと、思っていた動きと違う挙動になってしまう事になりかねません。


  これともう一つ。

  各 Constraintコマンドは、同一ノードに、複数のノードを複数回に分けてコンストレイントを掛けたとしても、コンストレイントノードへ拘束元が追加されていくだけになっています。


  けれども、orientConstraint の掛かっているノードに parentConstraint を掛けると、pairBlend ノードがあいだに入り、weightでの制御が出来るようになります。


  ただし、orientConstraint -> parentConstraintの順でないと、

// Error: line 0: Object is already connected.

  みたいなエラーが出てしまうので、拘束する順番には注意が必要です。


0 件のコメント:

コメントを投稿