<< TOP



XSI ICE活用 頂点カラー
:01 頂点カラーとICEの関係
このドキュメントは


  • XSIはそこそこ触れる
  • ICEというものがどういうものか大体わかる
  • ICEが気になっているのだけど、どこから入ったら良いかわからない
    といったアーティスト、デザイナさん向けに作られています。



頂点カラーとICEの関係編
ICEといえばパーティクルがなんか凄いとか、スクリプトの知識がある程度ないと入れないとかそういったイメージがあると思い ます。
でも、パーティクル以外でもいろいろと用途はあり、その中でもここでは頂点カラーの要素に注目しています。
昨今の日本のゲーム会社では、頂点カラーは欠かせない頂点データの要素となっています。

この部分は比較的スクリプトの知識が無くても入れるところでもあり、ここからスクリプト要素を少しずつ理解できるのではないかと妄想しています。
それでは、ぐだぐだと考えを述べていても仕方ないので基本的なところから行きましょ~。

※頂点カラーって何に使えるの?
頂点カラーは頂点ごとに格納できる頂点データのひとつです。
色情報としても使えるほか、RTシェーダ、レンダリング用シェーダ等の要素としても使用可能です。
・レンダリングの使用例
頂 点カラーのレンダリングと他のシェーダとのミキシングについて(v2.0.x)
他にもゲームの使用例もたくさんありますので、検索エンジンでゲーム、頂点カラー等で検索してみると面白いかもしれません。

 1.データの準備
まずは頂点カラーをオブジェクトに適用します。
取得>プロパティ>頂点カラーマップとここはいつもの頂点カラーを割り当てる要領です。
視認しやすいようにビューをコンスタントにしておきましょう・・・。

※1ディスプレイオプションのシェーディングモードの頂点カラーがRGBカラー表示となっていることを確認しておいてくださ い。
 001
※1
 002


 2.ICEの準備
次にICEのビューを起動します。
表示>一般>ICE TreeかAltを押しながら9キーを押します。
 
003
ICEツリーのビューが起動します。
上記オブジェクトが選択されていればそれが右側に、エクスプローラー表示になっていると思います。
 
004
ビューのメニュー内の作成>ICEツリーでオブジェクトにICEノードを適用します。
 
005
オブジェクトにICE Treeオペレーターがスタックされ、ツリービュー上にはICETreeノードが出現します。
これでオブジェクトにICEツリーを組んでいく準備は整いました。
※パーティクルの場合はシミュレートICEツリーを使います。
 
007 007

 3.頂点カラーとICEの接続
次にオブジェクトに割り当てた頂点カラーとIceツリー を接続します。
接続しますと、言っても手順は簡単でSetDataノー ドを取得してICETreeに接続し、Dataを頂点カラーにするだけです。
 それでは、なぞらえていってみましょう。
Data Access>Set Dataをツリービューの中にドラッグアンッドロップをします。
すると赤いSetDataノードがツリービューの中にできます。
赤いのは現在そのノードがICETree内でデータが正しく流せていないという意味で、SetDataが何のデータをセットするのか設定されていないから です。↓
  008 009
Set Dataノードをダブルクリックしてプロパティを開きます。
頂点カラーはとっても深いところにあるので「ピック」ではなく、「Explorer」を選びます。
オブジェクトデータの階層をたどっていって頂点カラー”Vertex_Color”のColorsを選びます。
 010
リファレンスのテキストフィールドに頂点カラーのColorまでがフルパスで記載され、ノードの色が青くなりました。
これで、ICEツリー内でも生きたノードとして使えます。
テキストボックスの上に、カラーボックスも同時に出現したのにも注目しておいてください。
 011
そしてSet Dataノードの「Execute」をICETreeのPort1に接続して・・・
 012
オブジェクトがSet Dataノードのカラーボックスの色になれば接続成功です!!
 013
ここまでだと、単純に頂点カラーを一色塗るだけじゃないか・・・。と言われる方も多いと思います。
では、かる~くやってみましょう~♪

 4.頂点カラーのブレンド(乗算)
デフォルトプリミティブではいまいち面白くないので、 siggraph等でおなじみのStanford Bunnyを使ってみましょう。

Stanford Bunnyについて・・・
該当するモデルデータは以下の場所からダウンロードできます。
http://graphics.stanford.edu/data/3Dscanrep/(Stanford Computer Graphics Laboratoryサイトへ)
基本的に研究に関して使用するのはフリーのようですが、使用上の注意をよく読んでお使いください。
データのコンバート方法
1 
上のリンク先から3分の2くらいのところにある、bunny.tar.gzをダウンロードして解凍します。
 bunny/reconstruction内に  bun_zipper.ply 2963KB があります。
2 ply ファイルを含む幾つかの3Dデータ形式を変換できるソフトを利用して、COLLADAにします。
 Paolo Cignoni's MeshLab system, available from SourceForge.
 Windows版の MeshLabSetup_v111.exe をインス トールし、bun_zipper.plyをLoad
   bun_zipper.dae 5365KB にSaveします。

3 XSI上で  bun_zipper.dae を ファイル>Crosswalk>読み込み でLoadします。

Bunnyにレンダーマップを使って、アンビエントオクルージョンとランバートのイルミネーションカラーを焼き付けてみます。
・頂点カラーのレンダーマップ作成方法
オブジェクトを選択して、取得>プロパティ>レンダーマップ を選びます。
 076
サンプリングの設定を頂点のみにして、頂点カラーをそれぞれ新規から作ります。
そして作成した新規の頂点カラーにマップをアンビエントオクルージョン、サーフェイスカラーとイルミネーションと切り替えて1回ずつレンダリングをしま す。
(マップ再生成ボタンを押す)

「Occlsion」と「SurfaceColor」という二つの頂点カラーが設定されています。
 014 015
二つの頂点カラーをブレンドした結果を表示するために、頂点カラー「Vertex_Color」をもうひとつ新規に作成します。
マテリアルのOGL表示オプション>頂点カラー表示プロパティは
、「Vertex_Color」にしてブレンド結果を表示 させるようにしておきます。
 016
それでは上まででやったようにICEツリーをBunnyに設定して、SetData
Vertex_ColorのColorに設定します。
 017
次にSetDataと同じ場所の
Data Access>Get Dataを二つツリービューに入れ、それぞれ「Occlsion」 と「SurfaceColor」を指定します。
 018
ここで気づいたかと思いますが、SetDataノードのColorsのInPortとGetDataのそれぞれのValueのOutPortが赤くなって いると思います。
これは色を入出力しているという意味です。
ICEはポートの色によって何が入出力できるかがわかります。

それでは
「Occlsion」と「SurfaceColor」を乗算させるためにノードを組みます。

乗算はMultiplyと訳しますね。ということでMultiplyノードを探します。
Math>Basic>Multiplyにありました。

早速ドラッグしてツリービューに入れて、ポートの仕様を見てみます。
ポートの上にカーソルを合わせてしばらくボーっとすると、そのポートの仕様がポップアップします。
 019
みたところColor、RGBには対応していないみたいですね。
というわけでColorをRGBにそれぞれ分解し、Scalarに化けさせます。
Conversion>Color to RGBAを使うと色をRGBAに分解できます。
Color to RGBA」ノードを二つ呼び出し、それぞれの頂点カラーにつなぎま す。
 020
ここでようやく「
Multiply」ノードが使えます。
R,G,Bそれぞれ分用意します。
3回ドラッグしても良いのですが、コピーペーストのコマンドが使えますので、一回ドラッグしてノードを選択>Ctrl+C>Ctrl+V×2回
だと早いんではないでしょうか・・・?(これでちょっとICEをマスターした気分にもなれますね?w)

それぞれR、G、Bを各ノードにつなぎ乗算をさせます。
 021

最後にRGBが分解されちゃっているのでそれぞれを合体させColorに戻してあげるため、Conversion>RGBA to Colorを使います。
ひとつのColorになったデータをSetDataにつないで
Vertex_Colorに返して終了です。
 022

 023

 5.コンパウンドを作る
毎回上のように色を分解して、乗算して合体というのを繰 り返すのは結構面倒くさいです。
ここでICEのメイン機能の一つである、コンパウンドを作りましょ う。

まとめたいノードを選択して、メニューの コンパウンド>コンパウンドの作成 を選ぶか、右クリックのメニューからコンパウンドを作成を選んでください。
 024
CompoundNodeという名前のノードひとつにまとまりました。(入力の接続がなぜか上下交差しているのはいったん無視します。)
 025
そして、コンパウンドノードの上で右クリックをしてコンパウンドの書き出し...を 選べば外部ファイルに保存できますが、そのまえにこのコンパウンドにいろいろ付属情報をつけます。

右クリックメニューの中に、コンパウンドのプロパティというものがあ ると思いますので選びます。
すると以下のウィンドウが出てきます。
 026
ここで名前をつけたり、バージョンを設定したり、ノードカラーを設定したり出来ます。
カテゴリにプリセットマネージャに存在するカテゴリ名を入れ、コンパウンドの書き出しをするとそこにコンパウンドが出現したりします。
必要な情報を入れたら書き出しで書き出します。
今回は「ColorBlend Mul」と名づけました。(あとで
ColorBlend Addとか増やしてみようかなーと思っています。)
 027

この時点でのコンパウンドのサンプルをダウンロードできるようにしておきます。
ご自由にお使いください。
ColorBlend Mul v0.5 ダウンロード

 6.もう少し便利に・・・
もう少しブレンドを便利にしたいと思いませんか?
たとえばそれぞれの頂点カラーの割合率を変えたいとかゥァ・淵侫・肇轡腑奪廚埜世Δ箸海蹐離譽ぅ筺爾瞭・静戮任垢諭ΑΑΑ・ヒ

それでは、作ったコンパウンドを編集してみましょう。
右クリックメニューからコンパウンドの編集を選ぶと、コンパウンドの中に入り、ツリービューが以下の画面になります。
 028
左が入力パラメータで右が出力パラメータです。
今回は乗算なのでそれぞれの色が白になれば、ブレンド率が変更できているといえます。
なのでブレンド用のノードはColor>Blend Colorを 使います。

Blend Colorノードを二つ呼び出してColor0とColor1をValue1につなぎます。
この時Pass Throughノードも出来ますが、特に気にしないでください。※
Pass Throughノードは外部公開入力を保持するために自動で作成されます。
(正規化のチェックはONにします。)
Value1のWeight値とValue2のWeight値を外部公開入力に接続します。※ 念のためここでもPass Throughノードを使います。
Value2のWeight値にはMath>Subtractノードを使い、Secondにポートをつなぎ、First を「1」にしておきます。
 031
※ここでちょっとRTシェーダ的な色のアルファブレンディングを使用しています。
色Aと色Bをアルファブレンディングしたい場合は、色A×アルファ+色B×(1-ア ルファ) という概念を使って、
アルファの部分を外部接続のWeightに使用して、色Bを白としています。
この計算を使うと
Weight値が0のときに頂点カラーは真っ白に、1になると頂点カラー自身の色にということになりま す。

Weight値は0~1の範囲である必要があるので、外部公開入力のWeightそれぞれの文字の上で右クリックメニューを出して、プロパティで最大値を 1に設定します。
 032

これでそれぞれの頂点カラーにブレンド値が存在するコンパウンドノードが出来ました。
 033

さて、後半ちょっと複雑だったかもしれませんが、ここのハードルを越えるとまたいっそういろいろ考えられるようになると思うので、
ちょっと頑張って、周りのプログラマさんにも相談したりして、超えることをオススメします。

それではこのバージョンのコンパウンドをVer1.0として公開します。
ColorBlend Mul v1.0 ダウンロード

まだまだこのコンパウンドも改良点があると思います。
皆さんでご自由に使いやすいように改良していってください。

次へ>