CG・コンテンツ制作
  1. CG・コンテンツ制作トップ
  2. DAIKIN CG Channel
  3. UsersNotes
  4. ICE
  5. はじめての ICE Kinematics その1;My First ICE Kinematics No1 
SUITE USERS NOTES
は・じ・め・て・の ICE Kinematics その1
(My First ICE Kinematics)
ICE_kine_01fmt_ritaro_ml

プロローグ

今回は、Softimage 2011 から正式サポートしましたICEの Kinematics 機能についてにしようと思います。
<インストールした状態で、何も設定もぜずに動作するようになっています。>
ICE はすげーもんらしい、マルチコア対応で速いらしい、便利?らいし、とは聞くのですが、
グラフィックの人が扱うの?すぐ使えるのは用意してないの?、初心者向けの解説はないの?・・・とたくさんの???があるような気がします。

そこで、ここでは、すぐに使えるサンプルを用意しつつ、その解説もあって1から習うこともできるようなページにしてみたいと思います。
さー、ICE で作るキネマティクスをはじめよう!!

0)Workgroupの設定
 >用意されているICE_Kinematicsを使えるように設定しよう
1)オフセット付きポジション・コンストレイント
 >ICE Tree の設定
 >シーン内のデータを取得して利用する
 >データタイプ
 >コンパウンドの作成
 >コンパウンドの作成2 とバージョン管理
パソコンのスペック WindowsXP SP3、 Intel Core2Duo 3G、 RAM; 3G、NVIDIA Quadro FX1700



Workgroupの設定
用意されているICE_Kinematicsを使えるように設定しよう
2011にはインストールした時点で、大量のICEノードがサンプルとして用意されています。
まずは、これらを使用できるようにしておきましょう。
ファイル > プラグインマネージャーを起動し、ワークグループタブで
[接続] C:\Program Files\Autodesk\Softimage 2011\Application\Workgroups\ICE_Kinematics
を設定します。
ICE_workgroup
すると、タスクタブに ICE Kinematics などが追加され、その中には IKのサンプルがあったりします。
どんどん理解を深めるのに利用し、実際に活用していきましょう!!
ICE_workgroup2



ICE Tree の設定
ICE Tree の表示、シーン内の任意のオブジェクトに設定
まずは ICE Tree のオブジェクトへの設定からです。 >  > そんなん知ってるよ!! という方はどんどん吹っ飛ばして行ってください。

プリミティブの立方体を取り出し、ALT+9 キーで表示されたICETree設定画面で
作成 > ICEツリーを実行するとICETree というノード が出現します!!以上です。すべてはここから始まります・・・。
ICE_kine_02
ここでは解り易い例として、ポリゴンの立方体に設定することからお話しますが、
シーン内の大きな構造体、例えば人体構造体などを制御するようなICEを作ったとしても、
シーン内の特定のオブジェクト、例えばセンターに置いてある Null に ICETree をくっ付けておけば良いようです。
ただし、そのシーンを受け取った側からすると、どこに ICEが設定したのか解らないので、
名前を付けた特徴的なオブジェクトに設定するなど、何かルールを作っておいた方が良いように思います。
(たとえば、正四面体に付けるとか・・・、ICEというカーブに付けるとか・・、中心にあるNullに付けてあるよとか・・)

さて、話を戻して、この立方体を動かしてみましょう。いきなりちょっと進むよ。こんなん作るからついて来て・・・!!)

この左の SRTtoMatrix というノードをダブルクリックするとPPGが表示され↓、そこに値を入れると立方体がその値に変化するというものです。
作り方は・・・
ICE_kine_03



1)SetData
値を設定するノードです。[ set ]までを検索する空欄に記入すると、Set で始まる名前のノードにしぼって表示します。
その中から、 SetData を探し出し、ドラッグ&ドロップして画面上に持ってきます。
真赤っかになっています。これはデータが正しく設定されてない時の表示です。
SetData ノードをダブルクリックするとPPGが表示されるので、[ Explorer ] ボタンを押して、Cubeの GlobalTransform のノードをクリックします。
ICE_kine_04
するってーと、青に変化し、データが正常に設定されたことを示します。
この青くなった SetData の出力を ICETreeノードのPort1に接続しやがれーです。
ICE_kine_05
2) SRTtoMatrix
検索から文字を無くしたことを確認して、Conversion > SRTtoMatrix を探し出し、
D&Dしてその出力を SetData の同じ色の入力に接続します。はい出来上がりです。
ICE_kine_06
たったここまでの結果で解ることは、
「この SRTtoMatrix ノードに入って来る値をシーンの何かから得られればこの立方体をSRT変化させられる」
というもっとも基本的なキネマティクスが手に入れられたということです。
3)Scalar to 3D Vector
Conversion > Scalar to 3D Vector を探し出し、その黄色の出力を SRT to Matrix の Translation に接続すると、
これで X,Y,Z軸への値を入力すると、その値で立方体が動くのか確認できます。
ICE_kine_07
4) Scalar、Pi
何か数値を設定したい場合は、Constant 項目内のScalarや、例えば Pi なんてのがあります。
設定した値が代入されます。
ICE_kine_08
はい、ここまでのサンプルをModelで用意しました。 > vICE_Kinematics-Sample01.zip<<<(用意するまでも無いくらいです、自分でつくってみでください)



シーン内のデータを取得して利用する
シーン内の情報に応じた取得
最初のは、実はSetDataから始まりました。今度はGetDataなんです。
前の状態のまま、話を続けましょう。前述の立方体はデータを受け取れる状態になっています。
そこで、シーン内のべつのもの例として球体の動きを捉えて、その動きの2倍で動くという風にしてみましょう。
取得する球体のGlobalTransformノードを Explorer からドラッグ&ドロップします。以上です。GetDataからも当然できますが・・・。
ICE_kine_09

すると水色の出力になっているので、そのままSetDataにつなげば、(イコール)の値になることが想像できます。
でも、そんなつなぎ方しちゃうと、いったい球体の何の値をどう立方体に伝えたのか詳細を把握出来ません。
ICE_kine_10
なので、また逆の接続方法を取ると例えば球体のY軸の移動値を2倍して立方体のY軸の移動値とするという風に設定可能となります。
掛け算のところは Math>Multiplyを使います。" "という実数はあ、Constant>Scalar だと気が付きますよね。



データタイプ (ヘルプより)
接続部の色でデータの種類をあらわしている
ICEノードの接続部分は、その色で、ブール・整数・スカラ・ベクトルなど、値の種類が解るようになっています。
ノードの種類によっていは入力したタイプによって色が変わるものもあります。(例えば Multiply など計算用のもの)

タイプ 内容
ICE_DataColor01 多様型 多様型ポート。 複数の異なるデータタイプを受け取ることができる。
ICE_DataColor02 ブール ブール値:TrueまたはFalse
ICE_DataColor03 整数 小数部分のないまたは負の数値。例えば、7、-2、0など。
ICE_DataColor04 スカラ 小数値として表される実数。例えば、3.14など。内部的には、単精度浮動小数点値です。
ICE_DataColor18 RGBAチャンネルの色の値。
ICE_DataColor05 2Dベクトル エントリがスカラである 2次元ベクトル[x, y]。例えば、UV座標など。
ICE_DataColor06 3Dベクトル エントリがスカラである 3次元ベクトル[x, y, z]。例えば、位置、速度、フォースなど。
ICE_DataColor07 4Dベクトル エントリがスカラである 4次元ベクトル[w, x, y, z]
ICE_DataColor08 クォータニオン クォータニオン[x, y, z, w]。クォータニオンは通常、向きを表すために使用される。
クォータニオンは簡単にブレンドおよび補間でき、アニメートされた回転を処理する際のジンバルロック問題の回避に役立つ。
ICE_DataColor09 回転 軸ベクトル[x, y, z]および角度(単位:度)によって表される回転。
ICE_DataColor10 3x3マトリクス エントリが実数である3x3マトリクス。3x3マトリクスは多くの場合、回転およびスケーリングを表すために使用されます。
ICE_DataColor11 4x4マトリクス エントリが実数である4x4マトリクス。4x4マトリクスは多くの場合、変換を表すために使用されます(スケーリング、回転、移動)。
ICE_DataColor12 Shape(シェイプ) プリミティブジオメトリシェイプ。または、シーン内のオブジェクトのシェイプへのリファレンス。
このデータタイプは、パーティクルのシェイプを決定するために使用されます。
ICE_DataColor13 ジオメトリ シーン内のジオメトリオブジェクトへのリファレンス
例えば、ポリゴンメッシュ、NURBSカーブ、NURBSサーフェイス、ポイントクラウドなど。
ジオメトリのサーフェイスをサンプリングして、パーティクル放出のためのサーフェイスロケーションを生成できます。
ICE_DataColor14 サーフェイスの場所 ジオメトリオブジェクトのサーフェイス上の場所。ロケータがオブジェクトのサーフェイスに固定され、
オブジェクトが変形またはデフォームした場合も、ロケータはオブジェクトと共に移動し、同じ相対的な位置にあり続けます。
ICE_DataColor17 ストリング 文字列例えば、ファイルのパス
ICE_DataColor15 実行 従来の意味でのデータタイプとは異なります。
[Set Data]の出力などの[Execution]ポートを[Execute]またはルートノードに接続し、ツリーでの実行の流れを制御します。
ICE_DataColor16 リファレンス このタイプも、従来の意味でのデータタイプとは異なります。
シーン内のオブジェクト、パラメータ、属性へのリファレンスであり、文字列として表現されます。
リファレンスは連結することができます。

GetDataで全体をとっておいて、そこから更にGetDataで細かいデータを取得するというつなぎ方のようです。
この場合、オオモトのオブジェクトさえ入れ替えれば、他への利用が簡単、ということらしいです。
ICE_kine_15

覚える必要は無いのですよ。色が違うと接続できないとか知っているだけで良いです。
そのうち、色で判断出来るようになるのでしょう。



コンパウンドの作成
ノード群を1つにまとめるて扱いやすくする。
上記のように、色々な設定を仕込むとどんどんとノードが増えていってしまいます。
そこで、1つにコンパウンドし、合わせてバージョン管理や、配信にも便利に出来ます。
既存の便利機能も、実はコンパウンド化されていて、中身を見ることが出来ます。
その中を更に編集すれば、既存機能に追加した機能を持たせることができ、再度コンパウンドしておけば配布も楽になります。

では、今までの記述と合わせて、ICEのPositionConstraintにオフセット値を付けるというものを作成してみましょう。
情報提供、FMTさん、サンキューです。

まず最初に Null と Cube を取り出します。Null によって Cube が動かされるという関係にします。
Cube に ICETreeを設定します。
左項目から Kinematics > AddConstraintを取り出します。データを設定してないので真っ赤です。
ICE_kine_11
おもむろに AddConstraintを ICETreeノードに接続します。
AddConstraintをダブルクリックしてPPGを見ると、 Self となっています。
左項目から Kinematics > Constraint Positionを取り出します。データを設定してないので真っ赤です。
ICE_kine_12
ConstraintPosition をダブルクリックしてPPGから、下段の影響するオブジェクトとして[ピック]ボタンから Null を選択します。
これで Nullを動かすと立方体が動きます。
ICE_kine_13
で、実は、この2つ共、複数のノードで組み合わせて作られたコンパウンドなのです。
AddConstraintのノード上で右マウスボタン > コンパウンドの編集を選択すると中身が見れます。
なにやら設定しています。嫌がらずに見ると、グローバルの値を己の位置として設定していると解ります。
ICE_kine_14
さー、ここでコンストレイントにオフセット値を設定できるように編集したいと思います。
見るところは、そのグローバルの値が入力されている所に、追加の値も入るようにすれば良い、ということです.
その方法は、実はもうやっているのです。Scalarto_3DVector を接続した記述なんです。

Math> Multiply と Conversion > SRTtoMatrixと Conversion >  SRTtoMatrix を探し出し、順につなぎ合わせます。
コンパウンドは箱と考えて、左の●からデータが入力され、右の●で結果を出力しています。
では、左の●に今作った X・Y・Z軸の値が入るように接続部を作ってあげます。
左上の●から引っ張って来た白い矢印を X、Y、Z とつないであげます。
ICE_kine_16
左上の[×]部分でコンパウンドを閉じます。
すると、あたらしく X・Y・Z軸の入力が出来ています。
AddConstraints の名前の所に*が付いています。これは内容を編集していていることを示しています。
ICE_kine_17
どうせなら、あたらしいノードとして保存しておきましょう。右マウスボタン > コンパウンドのプロパティーを選択し、名前を変更します。
ICE_kine_18
この新しく作成したものを保存すると共に ICETree の左項目一覧に登録できます。
右マウスボタン > コンパウンドの書き出しを選択し、ユーザーのディレクトリーに保存したとします。
<C:\users\ユーザー名\Autodesk\Softimage_2011\Data\Compounds>
ICE_kine_19
すると、Kinematicsの項目に作成した新しいコンパウンドが登録され U (ユーザー)と表示がついています。
ICE_kine_20
ここにAdd Constraints with Offset.xsicompoundを用意してみました。利用してみてください。



コンパウンドの作成 2 とバージョン管理
MatrixのOffsetを作成しておこう
よく利用するであろう機能はコンパウンドとして作成しておいて Workgroup に設定した場所に保存しておくと、とてっても便利です。
そこで、オフセット値を追加できるMatrix Offset useというものを作成してみましょう。

Matrix to SRT SRT to Matrix の間にAddを差し込んで追加代入されるものと合わせれば良いと構想します。
<なんとなくなんですが、このICEの作成って、構想を練ってから作り出すと良い感じです。>
4つのノードを選択した状態で、右のノードから右マウスクリック > コンバウンドの作成を選択します。
CompoundNode という名前で1になるので、右マウスクリック > コンバウンドの編集を選択します。
ICE_kine_22
すると箱の中に選択したノードがしまい込まれたって感じになります。
左側の●からびゅーーーっと白色の矢印を引っ張って来て、各値の Value2 に接続します。これが外部接続の入力●になります。
右側の●も設定して、これが外部接続の出力●になります。
名前や上下の場所が右クリックから表示されるPPGで設定出来ます。
ICE_kine_24
もう少し探求しましょう。この追加された値を使うのか/使わないのかのチェックボタンを追加してみましょう。(動作確認用としても便利)
最初見るとビビってしまいそうですが、なんて事ないんです。

Execution>If を使います。IF文みたいでチェックが入っている(有効=True)ならば、そのTrueの値(結果=Result)を通すてな感じです。
Execution>Pass Through は、文字通りデータを伝えるもので、
自動的に作成されたり、外部入力から値を複数の場所に利用する時に便利なものです。
コンパウンドを閉じると右下図のようなノードが完成します。
ICE_kine_25
出来たコンパウンドに名前とカテゴリ、バージョンを設定しておきます。
実は、このノード達はバージョン管理できます。同じ名前で保存しながらバージョン番号だけ変えて保存すると
ノードを持って来た時にバージョンが選べるようになります。ので、バージョン番号は意識して使うと便利です。
ICE_kine_26
さて、次は、作成したノードを書き出し=保存する訳なんですが、下記のように自分用のWorkgroupとか設定しておくと便利です。
この中にはこのようなICEコンパウンド、RTシェーダー、自動認識型プラグインとか入れておけば、ツールの管理がしやすいです。
ICE_workgroup3
保存したいノード上を右マウスクリック > コンパウンドの書き出しで保存先を選択して[OK]を押します。
すると、設定したカテゴリ、この場合、Matrix に保存したノード名 Matrix Offset use が表示されます。次からはここから使用できます。
ICE_kine_27
最初に説明に利用したシーンですが、作成した Matrix Offset use を使うと、こんな見やすく、簡単に設定出来ました。
ICE_kine_28
ここにMatrix Offset use.xsicompoundを用意してみました。利用してみてください。

これを利用すれば、Add Constraints with Offset もバージョンアップできることに気が付きます。
バージョンを V2.0 として保存してみてみましょう。Matrix Offset use を間に挟み込むだけです。
ICE_kine_21
*が右上に付いているはずです。
右マウスクリック > コンパウンドのプロパティーからバージョンを 2.0にしてOKを押します。
右マウスクリック > コンパウンドの書き出しから名前に 2.0と付いた名前で保存します。
ICE_kine_29
同じ名前の付いているノード上で右マウスクリック > バージョン > 2.0を選択すると、バージョンの異なるPPGになるのが確認出来ます。
ICE_kine_30
ここにAdd Constraints with Offset.2.0.xsicompoundを用意してみました。利用してみてください。

という訳で、次回は ICE IK です。
乞う、ご期待!!
戻る 次へ

お気軽にお問い合わせください

Daikin CG News お申し込み

CGクリエイター向けのセミナー・イベントやキャンペーン、製品情報をメールマガジンでお届けします。(登録無料)

Twitter

ページの先頭へ