2009年08月

2009年08月31日

パスコンストレイントでキャタピラやってみた その4 modo 401

パスコンストレイントと曲線のポイント間隔やベジェハンドルとか関係を調べるために、下のようなポイント間隔が異なる(実はハンドルの長さも極端に変えてある)ベジェ曲線をまっすぐ引いて、それにロケーターをパスコンストレイントで載せてみた。

fig01

そしてパスパーセンテージを変化させてみた結果が下の画像だ。これを見るとどうやらパスパーセンテージはパスの長さにのみ依存しているようだ。

fig02

これでポイントの間隔やカーブなどでキャタピラがスリップする心配は無さそうなので、キャタピラ本体のパスとキャタピラの1つのピースをグループロケータ(名前はcatapillerにした)にまとめた(アイテムリストで2つを選択して右クリックでグループロケータにペアレントを選択すればOK)。そして、キャタピラ本体が走る経路を新規にメッシュレイヤ(名前はpath)を作ってそこにベジェ曲線で描いた。

キャタピラをこの経路に沿わせて動かし、それに連れてキャタピラを動かすための仕組みを考えてみたんだけど、前回試してみた結果、パスコンストレイントのパラメータをチャンネルリンクで拾い上げることは出来ないので、キャタピラ全体を単純に経路に沿ってパスコンストレイントで動かして、そのパスパーセンテージをキャタピラの1片のパスパラメータに持っていけそうにない。

そこでちょっとややこしいけど、キャタピラの部品をまとめたグループロケータにprogressという名前のユーザーチャンネルを追加し、その値をチャンネルリンクでそれぞれのパスコンストレイントに持って行く事にした。前回の実験でユーザーチャンネルからコンストレイントのパラメータへのチャンネルリンクは可能だったからね。これでprogressの値を変化させると、キャタピラは経路に沿って走り出すし、同時にキャタピラ自体も回る事になる。

ただ、キャタピラが経路を端から端まで移動すると、パスコンストレイントの値は0%から100%まで変化するけど、キャタピラを回転させる方のパスコンストレイントも同じように0%から100%に変化させたのでは経路の長さに関係なく常にキャタピラ1周で全行程を移動してしまい、地面とのズレが生じるので、それを調整するために、チャンネルモディファイヤ(乗算)を挟んで、ユーザーチャンネルprogressの値にキャタピラ1周分の長さと経路の全長の比の値をかけた値をキャタピラを回転させるパスコンストレイントのパスパーセンテージに入力する事にした。

fig03

これをキャタピラのピース全てについて繋いで、各ピースのキャタピラ上での位置はパスコンストレイントのオフセット値で調整する。

方針は定まったので一つずつやっていくと、下の画像のようにまずはpieceとloopをグループロケータを作って入れて、それにcatapillerという名前を付け、別に作ったメッシュレイヤーにPathという名前を付けてベジェ曲線でキャタピラの移動経路を描く。

fig04

次にcatapillerグループロケーター→pathの順で選択してパスコンストレイントを追加する。

fig05

次にアニメーションレイアウトに切り替えてcatapillerを選択してprogressユーザーチャンネルを追加する。

fig06

同様にチャンネルモディファイヤの作成でBasic Math:multiplyを追加する。

fig07

次にチャンネルリンクで各チャンネルを繋いでいく。

fig08

繋ぐチャンネルは以下の通り

ドライバ ドリブン
オブジェクト チャンネル オブジェクト チャンネル
catapiller progress catapiller:
パスコンスト
パーセント
catapiller catapiller BasicMath 値A
BasicMath 結果 piece:
パスコンスト
パーセント

次にキャタピラの動く速度を調整するためにprogressにキーを打つ。catapillerを選択して、チャンネルリストを出して、そこからprogressを見つけてタイムスライダを0まで動かしてprogressの値をダブルクリックして0%にし、その横の丸印をクリックして赤くしてキーを打つ。同じようにタイムスライダを右に動かしてからprogressの値をダブルクリックして100%をセットする。

fig09

これでタイムスライダをスクラブするとキャタピラがpathに沿って動くようになるが、キャタピラ自体はまだ回転していない。

次にBasicMathの値Bに0以外の数値を入力してからタイムスライダを左右にスクラブすると、今度はキャタピラ本体の移動と共にキャタピラ自身も回転し始めるので、様子を見ながら値Bを調整して地面とキャタピラの回転のズレが少ない数値を探り出す。

fig10

これで1ピース分のキャタピラが出来たので、アイテムリストからpieceを右クリックして「インスタンス」を選択してコマのインスタンスを作る。インスタンスで作成した場合パスコンストレイントとそのチャンネルリンクも作られるので、そのパスコンストレイントのパスオフセットを調整して、キャタピラの各ピースが重ならないように調整する。これを繰り返して1周分のピースを作成する。

fig11

1つインスタンスを作ったら、システムメニューからマクロ記録を選んでインスタンスを「階層を複製」で複製し、マクロ記録を終了し、続いてシステムメニューから「再実行の繰り返し」を選んで必要な個数のインスタンスが出来る回数だけマクロを繰り返させる。あとは1つずつパスコンストレイントのオフセットを調整すればキャタピラが完成する。

シーンファイルをアップしておいたので詳しくはそっちを見てみてね。

これで下のGIFアニメのようにキャタピラが地面に沿って回転しながら移動するようになる。

catapiller

なんとかここまでは出来たけどキャタピラが2列の時はこのままでは、ずれて行っちゃいかねないね。カーブに合わせて左右の回転数を変えるような工夫がさらに必要なのかな?ちなみに車輪の方はBasicMathをもう一つ作ってそこから車輪の回転角度に入力するようなことで解決できそうだな。

それではまた次回。

modoカテゴリー別ページ 



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)modo | CG

2009年08月30日

フィギュア制作 その9

塗装する前の下地作りにサーフェーサーを買ってきた。

fig01

塗装の時に下の色が影響しない白がいいかなぁと思って使ってみたら、塗れてるのかどうかが全然わからない。グレーの奴でよかったなぁ。

今はサーフェーサーを乾かしてはペーパーをかけて表面を綺麗にしているところ。手の届かない細かい部分とかはヘラの先に千切った紙やすりを巻き付けて磨いている。

fig02

fig03



2009年08月28日

サンプルシーンでフェイシャルリグのお勉強 その3 3ds max 2010

さて、前回に引き続きデフォルメされたキャラクターのフェイシャルアニメーションについて見ていこう。

今回はモーファーの構成から調べてみた。

fig01

モーファーは0〜100%でオリジナルとターゲットの間で変化させるものだけど、maxのモーファーはその範囲外の部分でもモーフィングが可能で、例のスライダーには−100%〜+100%の範囲で割り当てている。下のGIFアニメは左上の記号が+の時+100%、0の時0%、−の時−100%の形状になっている。

まずは目の周りから

眉間の上下。表情としては上に上げると困った感じで下げると怒った感じになるな。

fig02

上目蓋の上下。上に上げると驚いた感じになるし、下げると睨む感じになる。

fig03

左右目蓋の互い違い上下。互い違いにすると、疑ったり、困ったりした感じになる。

fig04

下目蓋の上下。上に上げるとちょっと企む感じで下げるとゲッソリ疲れた感じになる。

fig05

このモデルの目の回りのモーファーは内側と上下はあっても外側の上下が無い。その代わり顔全体のベンドによって目の外側が縮まったり広がったりすることでそれが補われているようだ。

fig10

ただし両方の目尻を下げるモーファーが無いので目だけで笑顔を作る事が出来ない。モデルが兵士と言うことで、笑顔と言ってもはにかむかシニカルな感じ程度なのでこれで充分なのかもしれない。

次に口だ。口は本来顎の動きと唇の動きと頬の動きが組み合わさるんだろうけど、顎の動きはストレッチとベンドのモディファイヤが代用しているので基本的には口を開く事と

fig06

下唇を引っ込めること、

fig09

左右の口角を引っ張って、笑顔の口を作ることだけが用意されている。

fig07fig08

表情を形作るパーツはこれだけだ。これらを組み合わせれば表情らしきものが作成出来るわけだけど、見てきた通り、かなりシンプルな構成なので、普通に表情を作ってみても、イマイチな感じになってしまう。

ところが、実際にこのサンプルシーンに設定されているアニメーションを見るととても表情豊かで意外と繊細なニュアンスが表現されている。これはどこから来るのかと言えば、強調されたその動きだ。

その最大の功労者は目の動きだ。下のGIFアニメではわかり辛いんだけど、目の玉は全ての動作に先行して動いている。そしてその動きが強調されるように動きの緩急がハッキリしていて、瞬間的に素早く動いている。

fig11

下のグラフは目のターゲットになっているDum eye Globalの位置のグラフだ。見てわかる通りグラフはほぼ直線だ。この動きが目玉の緩急を付けたキョロキョロとした動きをより強調している。これが徐々に動くような動作だと、動きに機敏さがなくなって、なんかぼやけたものになるだろう。

fig12

目は口ほどにモノを言うって言うけど、人間は顔を見るときに目に一番注意が行くそうなので、そこが全体の動きのきっかけとしてスパッと動作方向に動き出すことで、動きがわかりやすくなっている。

それから、目の動きを強調するのに目蓋の左右のバランスが効果的に使われている。向こうを向いていたキャラクターがこっちを振り向く時に最初は向こう側の目蓋が大きく見開かれ、手前のまぶたがすがめられている。そして振り向いた地点では逆に手前の目蓋が大きく見開かれ、反対側の目蓋がすがめられている。

さらに動作を大きく見せるために振り向く際に、単に等速で垂直軸で回転するのではなくて、途中でちょっと手前に頭をかしげながら頭をちょっと沈ませてそこから頭を上げながら一気に振り向いている。さらに頭を下げるときに両目蓋も閉じ加減にすることで、沈む動作が強調され、振り向いた時の目蓋を開く動作も大きくなる。

fig14

さらによく見ると、こっちを向いた時にベンドで右側を伸ばして左側を縮める事で、めいっぱいこっちを向いている感も出ている。

アニメーションはこういう細かいことの積み重ねでイキイキして来るんだろうね。

それではまた来週。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2009年08月27日

チャンネルリンクとコンストレイントの制限 modo 401

キャタピラをお題にチャンネルリンクとコンストレイントをちょっとずつ弄っていているわけだけど、やってみてこんな制限があることがわかって来た。

まず下の画像のように6つのアイテムを作って、Y軸の位置を各アイテムの左隣のアイテムのY軸位置にそれぞれチャンネルリンクしてみた。そして一番左側のアイテムをY軸方向に移動してみたところ、全てのアイテムがそれに従って動いた。

fig01

このように単純なチャンネルリンクは孫、ひ孫と何重にもネストされて使われても、値が引き継がれて行くようだった。

同様の実験を直接リンクの代りにリレーションシップで設定しても同じ結果が得られた。

次に位置コンストレイントを使って4つの立方体を上の例と同じように左隣のアイテムと位置あわせをして、X方向にオフセットさせてみた。これも一番左のアイテムを動かすと、全てのアイテムがそれに追従した。

fig02

今度はこの設定のまま一番左のアイテムとその右隣のアイテムの位置コンストレイントを解除して、2つのY座標値をチャンネルリンクで繋ぎ直してみた。
これも一番左のアイテムを動かすと、右のアイテムが追従した。

fig03

今度は一番右側のアイテムを位置コンストレイントからチャンネルリンクに切り替えてみた。今度は一番右側のアイテムだけ一番左のアイテムの動きに追従しなくなった。

fig04

以上の事から言える事は、チャンネルリンクによって配置されたアイテムに対してコンストレイントを追従させる事は出来るが、コンストレイントによって配置されたアイテムからチャンネルリンクで配置情報を取り出すことは出来ないようだ。

次に下のように3つの球と3つのベジェ曲線をそれぞれパスコンストレイントで結び付けて、一番右のパスパーセンテージを真ん中の球のパスパーセンテージにチャンネルリンクして、真ん中の球のパスパーセンテージを一番左の球のパスパーセンテージにチャンネルリンクしてみた。そして一番左の球のパスパーセンテージを上げてみたら追従したのは隣の球だけだった。

fig05

このことから、チャンネルリンクのみで数珠繋ぎに接続したとしても、位置の時のように値を次々に渡していく事は出来ない事もあるようだ。

もちろんこのように数珠繋ぎに接続しなくても、一番左のパスパーセンテージに全てのパスパーセンテージを直接チャンネルリンクしてやれば、全てのパスパーセンテージを同期させることは可能だ。

しかし例えば1つのリグのまとまりとしてパスパーセンテージの値を1つのチャンネルにまとめておいて、そのチャンネルと他のリグのチャンネルとリンクさせたいって場合もあるはずだ。

fig06

そういう方式にしないと、リグ内にある無数のチャンネルを個別にそのチャンネルとリンクしなくちゃならなくなるからだ。

fig07

直接リンクを1度だけ設定するだけなら作業量は変わらないかも知れないけど、例えばリレーションを設定する場合なんかは同じ調整を何度もしなくちゃならなくなる。

でも、そのままでは一旦まとめてから他とリンクさせようとすると、パスコンストレイントのパーセントパラメータを数珠繋ぎにリンクする事になり、それは出来ない事が判明したわけだ。

そこで試してみたのがユーザーチャンネルを追加する方法だ。

球の1つを選択して「ユーザーチャンネル追加」を選択。ダイアログに対してタイプをパーセンテージ、モードをスカラー、名前を「percent」にして追加した。

fig08

これで球にチャンネルが1つ追加されるので、そのチャンネルと全ての球のパスコンストレイントのパスパーセンテージをチャンネルリンクで接続する。

fig10

これでこのチャンネル(percent)の値を変化させると球のパスコンストレイントが連動して3つの球が曲線上を移動するようになった。

fig09

同様に円錐アイテムを選択してこれにユーザーチャンネルを追加して、円錐のパスコンストレイントのパスパーセンテージパラメータを新しく追加したユーザーチャンネルにリンクする。これでユーザーチャンネルの値を変化させると円錐のパスコンストレイントが連動して位置が変化するようになる。

そして先に作った球の方のユーザーチャンネルと円錐のユーザーチャンネルをリンクで接続する。

fig11

そして円錐に付けたユーザーチャンネルを操作してみたら全てのパスコンストレイントがユーザーチャンネルの値に反応して動いた。

このことからユーザーチャンネルはコンストレイントのパラメータチャンネルと違って数珠繋ぎでリンクしても値が引き渡されていく事がわかった。

ここで2つのユーザーチャンネルを繋ぐリンクをリレーションシップに置き換えて、下のようなグラフにしてみた。入力が0%→100%で変化した時に出力側は0%→100%→0%に変化する。

fig11

これがその結果。円錐がパスを端から端まで動く間に球はパスを往復している。

fig12

この2つの連動する動作は1つのリレーションを変化させることで簡単に修正する事が出来る。もし1つずつリレーションさせていたのではこうは行かないよね。

それではまた次回。

modoカテゴリー別ページ 



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)modo | CG

2009年08月26日

サンプルシーンでフェイシャルリグのお勉強 その2 3ds max 2010

前回から新しいサンプルファイルを調べているんだけど、 いくつか良くわからないところがある。

まず第一に重力が設定されているけど、ヘルメットは単なるキーフレームアニメーションになってるし、ストラップの動きはベンドとツイストモディファイヤにキーが打たれているだけで、重力を使っているところが見つからない。

次に視線をコントロールするためにダミーを配置してあるんだけど、これがどういう設定になっているのか表示の優先順位が低く設定されていて、頭のオブジェクトより手前に持って来ても、重ねて表示すると常に頭の画像が優先して表示され、ダミーは上書きされてしまうようになっている。これはどうやってるんだろう?

横から見るとこういう位置関係なのに、

fig01

正面から見るとこのように後ろに回っちゃう。選択すると手前に出てくるから操作に支障は無いんだけど、どうやってるんだろう。

fig02

とまあ疑問はこれくらいにして、シーンを見ていく事にしよう。

まずは話しに出た目のコントロールからだ。目は何かを眺めるわけだから通常は2つの目が同じ場所を向くし、連動して動くわけだ。でも表情を作るためにわざと左右の目に違う動きをさせる事もある。そこで先に出てきたダミーのターゲットの出番という訳だ。

ダミーは作成パネルのヘルパーのところに作成ボタンがあって、ビューポートをドラッグすると立方体が出るだけで、モディファイヤパネルにも何も出ない。だからサイズを変えたりする時はスケールとかを使う事になるけど、リンクしてからスケールを変えると子のダミーまで変形しちゃうから、リンクする前にスケールで形を整えなきゃならないみたいだ。

fig03

そしてリンク関係はこんな感じ。外側の大きいダミーが親で、中の小さいダミーが子になっている。目の視点を動かす時は外側のGlobalを移動させて、左右の目玉を個別に動かす時は中の小さいダミーを動かす方式だ。

fig04

そして操作される側の目の玉に変換コントローラの「ルックアット」が設定されて、ターゲットがそれぞれの小さいダミーになっている。この変換コントローラのルックアットだけど、マニュアルには、

このコントローラは、ユーザが自分で割り当てることはできません。ルックアット コントローラと同じものをオブジェクトに割り当てるには、ルックアット コンストレイントを使用します。

とある。もしかしたらこのシーンファイルが作成されたのは結構昔なのかも。今はおなじみのルックアットコンストレイントを使うそうだ。

下の画像はダミーを動かして目玉をアニメーションさせてみたところ。

fig05

次に顔面オブジェクトであるAnibalのモディファイヤスタックを見ていこう。

fig06見ての通りベースになっている形状は編集可能パッチで、そこに表情を作るためのモーファー、ダイナミックな顔面の形状変形をくわえるためのストレッチとベンド、最後にパッチ編集がのっている。
この一番上のパッチ編集には「(for render)」と書かれている通り、レンダリングの時にONにして使うものらしい。

役割としてはワイヤーフレーム表示にしてこのモディファイヤをON/OFF切り替えてみるとわかりやすい。下のGIFアニメのようにONにするとメッシュが滑らかで細かくなるのがわかる。要するにレンダリングのクオリティをあげるためにはパッチの分割レベルを上げなくちゃならないけど、作業するには重たいので、ローメッシュで作業をし、レンダリングの時だけ細かく分割して綺麗にレンダリングしようという発想なわけだ。

fig07

それからモーファー→ストレッチ→ベンドにも意味があるようだ。

ストレッチモディファイヤはオブジェクトを引き伸ばしたり潰したりするモディファイヤでベンドは曲げるモディファイヤだ。このシーンでは顔を引き伸ばしたり曲げたりして顔面にダイナミックでマンガチックな動きをつけるのに使われている。

そしてこの順番が異なると、結果がかなり異なってくる。モーファーの座標空間はベンドやストレッチで変換出来ないので、ベンドやストレッチで変形されたメッシュに対してそのままモーファーで変形されたら、元の形状からの変形が前提のモーファーはとんでもない破綻をしてしまう。

例えばこのようにモーファーで表情が作られていて、

fig08

これにベンド50%で変形をかけるとこうなる。顔面の向かって左側が伸びて右側が縮む感じになる。

fig09

このモーファーをモディファイヤスタックでベンドより上に持ってくると、下のような破綻が起こる。理由は上で書いたとおり、モーファーの前提となる原型がベンドで変形されてしまって、そこからモーファーの変形が加わるためだ。

fig10

さらに、ストレッチとベンドの順番も異なれば、結果が異なってくる。

下の画像が今回さいようされているストレッチ→ベンドの順に処理された顔面。

fig11

それに対して、ベンド→ストレッチにすると、曲げてから伸ばすから変な変形になってしまう。

fig12

だからこれにさらにボーン変形を入れるとするなら、

モーファー→スキン→ストレッチ→ベンド

の順でモディファイアスタックを形成しないとダメなんじゃないかな。

それではまた次回

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG
Archives