![]() |
プロローグ
今回、CEDEC2011にてICEプレゼンを行い、 独自のICEノードでデータをSoftimageに読み込んで来る様子を紹介しました。 で、質問は、カスタムなICEノードを作成するSDKが存在するのか?でした。 答えはハイ、なんですが、SoftimageのPlugin製作と同様に、 便利なウィザードが存在します。 ここでは、PCにC++コンパイル環境の設定とICE SDK Wizardsを使って DLLプラグイン形式のカスタムICEノードの作成方法を紹介します。 > 前準備環境設定 > コンパイル環境 > サンプルデータ > Vector3Union > SDK_Wizards > ICENodeWizardPPG > VC++ 2008 上の作業 > コンパイル > 動作確認 > 試行錯誤 ![]() パソコンのスペックWindowsXP SP3、Intel Core2Duo 3G、 RAM; 3G、NVIDIA Quadro FX1700 |
サンプルデータ
Vector3Unionまずは、標準で用意されているサンプルデータから始めると良いです。 Softimage SDKまわりのサンプルのワークグループは、 C:\Program Files\Autodesk\<バージョン>\XSISDK\examples\workgroupにあります。 具体的には、今回は ファイル > プラグインマネージャーから C:\Program Files\Autodesk\Softimage 2012 SP1\XSISDK\examples\workgroupを指定します。 ![]() 必要無くなったら、ワークグループからチェックを外せば良いだけです。 今回は、ICEのカスタムノードなので、そのサンプルデータは C:\Program Files\Autodesk\Softimage 2012 SP1\XSISDK\examples\workgroup\Addons\CustomICENodes 内にあり、 ソースは各ツール名の中、 シーンデータは C:\Program Files\Autodesk\Softimage 2012 SP1\XSISDK\examples\workgroup\Addons\CustomICENodes\Data\Project\Scenes にあります。 例としてvector3_unionを取り上げたいと思いますので、Vector3Union.scnというシーンを開きます。 ![]() パーティクルが発生して2つのNullに範囲内に入って来た点に、色とサイズを設定した新たな点を追加する、 というものですが、2つNullがあるので、 vector3_unionというカスタムなICEノードで2つの3DVectorを合成している、 というものです。 ![]() |
SDK_Wizards
ICENodeWizardPPGでは、このカスタムICEノードvector3_unionをSDK_Wizardsを使って作成する手順を紹介します。 ![]() ユーザールート > プラグイン > 新規作成 > ICEノードを選択します。 ちなみに、ユーザールートというのは C:\users\<ユーザー名>\Autodesk\<バージョン>\Application\Plugins 内のことで、 今回の具体的例では、 C:\users\ritaro\Autodesk\Softimage_2012_SP1\Application\Plugins内にプロジェクトファイルが書き出されます。(変更可) (あれ、GnuのMakeファイルまであるよ、と思った方、ハイそうです、Linuxでのコンパイル用です。) 以下のICENodeWizerdのもっと詳しい情報は、 Softimage SDK プログラミングガイド > SDK によるカスタマイズ > カスタム ICENode > カスタム ICENode ウィザード に書かれていますので参照してください。 すると、自動的に設定画面 ↓ が表示されるので、ここに各種設定を入れていきます。 まずICENode情報タブには
![]()
と、同時に、エクスプローラー上ではSDK_Wizrdsというモデルの中に[C]ICENodeWizardというノードが作成されています。 設定画面を閉じてしまっても、このノードから開けますし、シーンを保存してもノードは残っています。 入力ボートタブは左側の入力接続部の設定を作ります。 ![]()
などを右の三角から開いたメニューから選択するのですが、 最後のコンテキストタイプは下の行を作ってから|siICENodeContextSingletonを追記しています。 項目はデータタイプで選んだ種類によって変化します。 例えば、siICENodeDataFloat を選択すると、下にUIの範囲指定が表示されます。 記入したら、[追加]っていうボタンを押すと下に設定情報の行が表示されます。 ここでは、左側に同じ種類の2つのポートを作成するので、 InArray1ポート名で[追加]のボタンを押し、 InArray2ポート名でもう一回[追加]ボタンを押して、2行を作成します。 PortIDは上から0と1になっています。 出力ボートタブは右側の出力接続部の設定を作ります。 入力ポートの時と同じでメニューから選択します。 ![]()
最後のコンテキストタイプは下の行を作ってから|siICENodeContextSingletonを追記しています。 resultポート名で[追加]のボタンを押して1行を作成します。 コードタブはいよいよ作った内容をCPPとして書き出します。 ![]()
サンプルコードの追加にチェックを入れると、各関数の開始部分に、ブロックのコーディング方法を説明する便利なコメントが書かれます。 [コードの生成]ボタンを押すと Vector3UnionNode.cppとVector3UnionNode.vcprojをユーザールートに出力します。何度でも・・・・ |
VC++ 2008 上の作業
コンパイル上記SDK_Wizardsで作成されたのは枠であって、プログラム部分の追記が必要です。 作ったVC32XSIx86.batのショートカットからVisualStudio2008Expressを起動し、 作成されたプロジェクトファイルVector3UnionNode.vcprojを開きます。 まず、#include の最後に
を追記します。 そして、125行からの
部分を
と書き換えます。 ![]() ビルドを実行してコンパイルが無事通ります。
出来上がったVector3UnionNode.dll は 54KBありました。もちろんこの状態で動作します。 デバッグ時にトレースできるようないろいろな情報が入った状態、ビルドがデバッグで実行されています。 下の動作確認が済んだら、ビルド > 構成マネージャでReleaseに設定してコンパイルすると20KBになりました。 <Softiamgeが立ち上がっていて dllがロードされていると失敗しますので、Softimageを落とすか アンロードするかしてから リコンパイル です。>
|
動作確認
試行錯誤今、SDKのサンプルプログラムを作り直していて、重複すると混乱するので、 ファイル > プラグインマネージャーから設定した C:\Program Files\Autodesk\Softimage 2012 SP1\XSISDK\examples\workgroup のチェックを外して、ワークグループ設定を解除しておきます。 作成したプラグインを読み込みます。 ![]() ファイル > プラグインマネージャーで[すべて更新]ボタンを押すと、プラグインの下に現れます。 何度か試したりする場合、ここからアンロードとすれば登録から消えます。 リコンパイルはアンロードしてから行わないと上書きが禁止になってしまいます。 ![]() SDK_Wizardsで指定したカテゴリー名Custom ICENodeに、コンパイルしたICEノードVector3Unionが置かれています。 左アイコンにUと書かれているのは、このノードが ユーザールート の中にあることを示しています。(Wはワークグループ) 正常動作するか確認します。 何度かやる場合は、ここら辺の繰り返しになります。 |
という訳で、まだまだICEが続きます。 乞う、ご期待!!
|