<< TOP



は・じ・め・て・の  ICE Kinematics その1
 (My First ICE Kinematics)
                

 プロローグ
      今回は、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 Kinematics などが追加され、その中には IKのサンプルがあったりします。
    どんどん 理解を深めるのに利用し、実際に活用していきましょう!!





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

    プリミティブの立方体を取り出し、ALT+9 キー で 表示されたICETree設定画面で 
    作成>ICEツリー を実行すると ICETree というノード が出現します!! 以上です。 すべてはここから始まります・・・。



      ここでは解り易い例として、ポリゴンの立方体に設定することからお話しますが、
    シーン内の大きな構造体、例えば人体構造体などを制御するようなICEを作ったとしても、
    シーン内の特定のオブジェクト、例えばセンターに置いてある Null に ICETree をくっ付けておけば良いようです。
    ただし、そのシーンを受け取った側からすると、どこに ICEが設定したのか解らないので、
    名前を付けた特徴的なオブジェクトに設定するなど、何かルールを作っておいた方が良いように思います。
      (たとえば、正四面体に付けるとか・・・、ICEというカーブに付けるとか・・、中心にあるNullに付けてあるよとか・・)

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

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



    1) SetData
     値を設定するノードです。 [ set  ] までを検索する空欄に記入すると、Set で始まる名前のノードにしぼって表示します。
    その中から、 SetData を探し出し、ドラッグ&ドロップして画面上に持ってきます。
    真赤っかになっています。これはデータが正しく設定されてない時の表示です。
    SetData ノードをダブルクリックするとPPGが表示されるので、[ Explorer ] ボタンを押して、Cubeの GlobalTransform のノードをクリックします。



     するってーと、青に変化し、データが正常に設定されたことを示します。
    この青くなった SetData の出力を ICETreeノードの Port1に接続しやがれー です。



    2) SRTtoMatrix
     検索から文字を無くしたことを確認して、Conversion>SRTtoMatrix を探し出し、
    D&Dして その出力を SetDataの同じ色の入力に接続します。 はい出来上がりです。



     たったここまでの結果で解ることは、 
     「 この SRTtoMatrix ノードに入って来る値を シーンの何かから 得られれば この立方体をSRT変化させられる 」
    というもっとも基本的なキネマティクスが手に入れられたということです。

    3) Scalar to 3D Vector 
    Conversion>Scalar to 3D Vector を探し出し、その黄色の出力を SRT to Matrix の Translation に接続すると、
    これで X,Y,Z軸への値を入力すると、その値で立方体が動くのか確認できます。



    4) Scalar 、Pi
      何か数値を設定したい場合は、Constant 項目内の Scalar や、例えば Pi なんてのがあります。
     設定した値が代入されます。



    はい、ここまでのサンプルをModelで用意しました。> ICE_Kinematics-Sample01.zip <<<(用意するまでも無いくらいです、自分でつくってみでください)



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



     すると水色の出力になっているので、そのまま SetDataにつなげば、(イコール)の値になることが想像できます。
    でも、そんなつなぎ方しちゃうと、いったい球体の何の値をどう立方体に伝えたのか詳細を把握出来ません。

      なので、また逆の接続方法を取ると 例えば 球体のY軸の移動値を2倍して 立方体のY軸の移動値とする という風に設定可能となります。
    掛け算のところは Math>Multiply を使います。 " " という実数は あ、Constant>Scalar だと気が付きますよね。



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

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

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

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


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

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

     まず最初に Null と Cube を取り出します。 Nullによって Cube が動かされる という関係にします。
    Cube に ICETreeを設定します。
    左項目から Kinematics>AddConstraint を取り出します。データを設定してないので真っ赤です。



     おもむろに AddConstraint を ICETreeノード に接続します。
    AddConstraintをダブルクリックしてPPGを見ると、Self となっています。
    左項目から Kinematics>Constraint Position を取り出します。データを設定してないので真っ赤です。



    ConstraintPosition をダブルクリックしてPPGから、下段の 影響するオブジェクト として [ピック] ボタンから Null を選択します。
    これで Nullを動かすと 立方体が動きます。


     で、実は、この2つ共、複数のノードで組み合わせて作られた コンパウンド なのです。
    AddConstraintのノード上で右マウスボタン>コンパウンドの編集 を選択すると中身が見れます。
    なにやら設定しています。嫌がらずに見ると、グローバルの値を己の位置として設定している と解ります。



     さー、ここで コンストレイントにオフセット値 を設定できるように 編集したいと思います。
    見るところは、そのグローバルの値が入力されている所に、追加の値も入るようにすれば良い、ということです.
    その方法は、実はもうやっているのです。 Scalarto_3DVector を接続した記述 なんです。

     Math>Multiply と Conversion>SRTtoMatrix  と Conversion>SRTtoMatrix を探し出し、順につなぎ合わせます。
    コンパウンドは 箱 と考えて、左の● からデータが入力され、右の● で結果を出力しています。
    では、左の●に 今作った X・Y・Z軸の値 が入るように接続部を作ってあげます。
     左上の●から引っ張って来た白い矢印を X、Y、Z とつないであげます。



     左上の [×] 部分でコンパウンドを閉じます。
    すると、あたらしく X・Y・Z 軸の入力が出来ています。 
    AddConstraints の名前の所に * が付いています。これは内容を編集していていることを示しています。 



    どうせなら、あたらしいノードとして 保存しておきましょう。 右マウスボタン>コンパウンドのプロパティー を選択し、名前を変更します。



     この新しく作成したものを 保存すると共に ICETreeの左項目一覧 に登録できます。
    右マウスボタン>コンパウンドの書き出し を選択し、 ユーザーのディレクトリーに保存したとします。
     <C:\users\ユーザー名\Autodesk\Softimage_2011\Data\Compounds>



     すると、Kinematicsの項目に 作成した新しいコンパウンドが登録され U (ユーザー) と表示がついています。



    ここに Add Constraints with Offset.xsicompound を用意してみました。利用してみてください。

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

     Matrix to SRT と SRT to Matrix の間に Add を差し込んで 追加代入されるものと合わせれば良いと構想します。
            <なんとなくなんですが、このICEの作成って、構想を練ってから作り出すと良い感じです。>

    4つのノードを選択した状態で、右のノードから 右マウスクリック>コンバウンドの作成 を選択します。
    CompoundNode という名前で1になるので、右マウスクリック>コンバウンドの編集 を選択します。



     すると 箱の中に選択したノードがしまい込まれた って感じになります。
    左側の●から びゅーーーっと 白色の矢印を引っ張って来て、各値の Value2 に接続します。これが外部接続の入力●になります。
    右側の●も設定して、これが 外部接続の出力●になります。
    名前や上下の場所が右クリックから表示されるPPGで設定出来ます。



     もう少し探求しましょう。 この追加された値を使うのか/使わないのかの チェックボタン を追加してみましょう。(動作確認用としても便利)
    最初見ると ビビってしまいそうですが、なんて事ないんです。

    Execution>If を使います。 IF文みたいで チェックが入っている(有効=True)ならば、そのTrueの値(結果=Result)を通す てな感じです。
    Execution>Pass Through は、文字通りデータを伝えるもので、
    自動的に作成されたり、外部入力から値を複数の場所に利用する時に便利なものです。
     コンパウンドを閉じると 右下図のようなノードが完成します。



     出来たコンパウンドに名前とカテゴリ、バージョンを設定しておきます。
    実は、このノード達は バージョン管理できます。同じ名前で保存しながら バージョン番号だけ変えて保存すると 
    ノードを持って来た時にバージョンが選べるようになります。ので、バージョン番号は意識して使うと便利です。



     さて、次は、作成したノードを書き出し=保存する訳なんですが、下記のように自分用のWorkgroupとか設定しておくと便利です。
    この中には このようなICEコンパウンド、RTシェーダー、自動認識型プラグインとか入れておけば、ツールの管理がしやすいです。



     保存したいノード上を 右マウスクリック>コンパウンドの書き出し で 保存先を選択して [OK] を押します。
    すると、設定した カテゴリ、この場合、Matrix に保存したノード名 Matrix Offset use が表示されます。次からはここから使用できます。



    最初に説明に利用したシーンですが、作成した Matrix Offset use を使うと、こんな見やすく、簡単に設定出来ました。



     ここに Matrix Offset use.xsicompound を用意してみました。利用してみてください。

     これを利用すれば、Add Constraints with Offset もバージョンアップできることに気が付きます。 
    バージョンを V2.0 として保存してみてみましょう。 Matrix Offset use を 間に挟み込むだけです。



     * が右上に付いているはずです。
    右マウスクリック>コンパウンドのプロパティー から バージョンを 2.0 にして OK を押します。
    右マウスクリック>コンパウンドの書き出し から 名前に 2.0 と付いた名前 で保存します。



     同じ名前の付いているノード上 で 右マウスクリック> バージョン > 2.0 を選択すると、バージョンの異なるPPGになるのが確認出来ます。




     ここに Add Constraints with Offset.2.0.xsicompound を用意してみました。利用してみてください。




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