2009年08月27日
チャンネルリンクとコンストレイントの制限 modo 401
キャタピラをお題にチャンネルリンクとコンストレイントをちょっとずつ弄っていているわけだけど、やってみてこんな制限があることがわかって来た。
まず下の画像のように6つのアイテムを作って、Y軸の位置を各アイテムの左隣のアイテムのY軸位置にそれぞれチャンネルリンクしてみた。そして一番左側のアイテムをY軸方向に移動してみたところ、全てのアイテムがそれに従って動いた。
このように単純なチャンネルリンクは孫、ひ孫と何重にもネストされて使われても、値が引き継がれて行くようだった。
同様の実験を直接リンクの代りにリレーションシップで設定しても同じ結果が得られた。
次に位置コンストレイントを使って4つの立方体を上の例と同じように左隣のアイテムと位置あわせをして、X方向にオフセットさせてみた。これも一番左のアイテムを動かすと、全てのアイテムがそれに追従した。
今度はこの設定のまま一番左のアイテムとその右隣のアイテムの位置コンストレイントを解除して、2つのY座標値をチャンネルリンクで繋ぎ直してみた。
これも一番左のアイテムを動かすと、右のアイテムが追従した。
今度は一番右側のアイテムを位置コンストレイントからチャンネルリンクに切り替えてみた。今度は一番右側のアイテムだけ一番左のアイテムの動きに追従しなくなった。
以上の事から言える事は、チャンネルリンクによって配置されたアイテムに対してコンストレイントを追従させる事は出来るが、コンストレイントによって配置されたアイテムからチャンネルリンクで配置情報を取り出すことは出来ないようだ。
次に下のように3つの球と3つのベジェ曲線をそれぞれパスコンストレイントで結び付けて、一番右のパスパーセンテージを真ん中の球のパスパーセンテージにチャンネルリンクして、真ん中の球のパスパーセンテージを一番左の球のパスパーセンテージにチャンネルリンクしてみた。そして一番左の球のパスパーセンテージを上げてみたら追従したのは隣の球だけだった。
このことから、チャンネルリンクのみで数珠繋ぎに接続したとしても、位置の時のように値を次々に渡していく事は出来ない事もあるようだ。
もちろんこのように数珠繋ぎに接続しなくても、一番左のパスパーセンテージに全てのパスパーセンテージを直接チャンネルリンクしてやれば、全てのパスパーセンテージを同期させることは可能だ。
しかし例えば1つのリグのまとまりとしてパスパーセンテージの値を1つのチャンネルにまとめておいて、そのチャンネルと他のリグのチャンネルとリンクさせたいって場合もあるはずだ。
そういう方式にしないと、リグ内にある無数のチャンネルを個別にそのチャンネルとリンクしなくちゃならなくなるからだ。
直接リンクを1度だけ設定するだけなら作業量は変わらないかも知れないけど、例えばリレーションを設定する場合なんかは同じ調整を何度もしなくちゃならなくなる。
でも、そのままでは一旦まとめてから他とリンクさせようとすると、パスコンストレイントのパーセントパラメータを数珠繋ぎにリンクする事になり、それは出来ない事が判明したわけだ。
そこで試してみたのがユーザーチャンネルを追加する方法だ。
球の1つを選択して「ユーザーチャンネル追加」を選択。ダイアログに対してタイプをパーセンテージ、モードをスカラー、名前を「percent」にして追加した。
これで球にチャンネルが1つ追加されるので、そのチャンネルと全ての球のパスコンストレイントのパスパーセンテージをチャンネルリンクで接続する。
これでこのチャンネル(percent)の値を変化させると球のパスコンストレイントが連動して3つの球が曲線上を移動するようになった。
同様に円錐アイテムを選択してこれにユーザーチャンネルを追加して、円錐のパスコンストレイントのパスパーセンテージパラメータを新しく追加したユーザーチャンネルにリンクする。これでユーザーチャンネルの値を変化させると円錐のパスコンストレイントが連動して位置が変化するようになる。
そして先に作った球の方のユーザーチャンネルと円錐のユーザーチャンネルをリンクで接続する。
そして円錐に付けたユーザーチャンネルを操作してみたら全てのパスコンストレイントがユーザーチャンネルの値に反応して動いた。
このことからユーザーチャンネルはコンストレイントのパラメータチャンネルと違って数珠繋ぎでリンクしても値が引き渡されていく事がわかった。
ここで2つのユーザーチャンネルを繋ぐリンクをリレーションシップに置き換えて、下のようなグラフにしてみた。入力が0%→100%で変化した時に出力側は0%→100%→0%に変化する。
これがその結果。円錐がパスを端から端まで動く間に球はパスを往復している。
この2つの連動する動作は1つのリレーションを変化させることで簡単に修正する事が出来る。もし1つずつリレーションさせていたのではこうは行かないよね。
それではまた次回。