|
●UVデータにコンバート編 2 |
1.データの準備 |
準備するデータは前回同様UVデータです。 上図の左のようにオブジェクトに緑色の枠が表示されます。 Texture_Supportというのが上図の左の緑色の枠です。 MCP右側のEdit > フリーズMを押す等して Texture_Support をフリーズしておきます。 UVは頂点カラーよりも深いところにあります。 ICEツリー上はこのようになります。 |
2.テクスチャシェーディング:スペキュラーバージョンと訂正 | |||
まず始めに、1で準備したICEのSet DataのUVsのポートにConversion>Scalar to 2D Vectorを繋ぎます。 そしてスペキュラーのICEは、以前作成したLambertShaderを基に、変更する形で作成します。 < fmt_LambertShader v0.6 ダウンロード > ユーザーフォルダの\Data\Compounds(例:C:\users\ユーザー名\Softimage\XSI_7.01\Data\Compounds)にコンパウンドが保存されていれば、 とりあえずコンパウンドが赤いままだと落ち着かないので前回同様に、Get Dataでライトを接続してあげてください。 次に fmt_LambertShader の Scalarポートを Scalar to 2D Vectorに繋ぎます。 ここで前回と同じLambertのトゥーンマップが再現できます。 シェーディング用のUVがオブジェクトの移動についていきません。 申し訳ありません。m(_ _)m それでは以下修正です。 そして上記エクスプローラーからSelf/Kinematics/Global Transform/Ori/Eulerと降りて行き Euler をピックします。 次にConversionからSRT to Matrixを取得して上記GetDataから接続します。 このとき、SRT to Matrixの出力ポートが黒く、未認識された状態になっています。 ここまでつなぎ終わった時点で、移動させていた上記オブジェクトのシェーディングがぴったり収まったと思います。 ここまでが前回の fmt_LambertShader の訂正点となりますので、以下にコンパウンドを再公開しておきます。 < fmt_LambertShader v0.7 ダウンロード > それではスペキュラの作成に入ります。
まずは、視線ベクトルの作成です。 一回コンパウンド編集から抜けて、外に出ます。 コンパウンド内に戻るとノードが青く、データが来ていることが確認できますので、次は頂点座標データツリーを作成します。 上二種類のカメラ位置と頂点位置をMath>Basic>Subtractで引き、Vector>Normalizeで正規化します。 もうすでにライトベクトルはこのコンパウンドの中にありますので、 H = V + Lを再現します。 あとはDot Productの先ですが、Rescaleのみクランプにチェックを入れて、Target Endを0.999に設定してください。 UVだけではこれで終わりなのですが、折角頂点カラー用にColorにも出力しているので、パワー(減衰)も調整できるようにしましょう。 こんかいはアンビエントはいらないのでアンビエントを削除し、Add Colorノードも省きました。 ExponentのPowerを外部公開に出力してPowerとします。 この値が頂点カラーの場合はスペキュラの減衰値になります。 変わって、UVに設定したテクスチャシェーディングの場合はテクスチャにグラデーションなどでスペキュラの減衰値と出来るわけです。 右図のテクスチャを使用すると左図のようになります。 今回のスペキュラーシェーダも以下リンクでダウンロードできるようにしておきます。 |
3.レンダリング設定例 | ||||||||||||||||||
ここまでの3シェーダを使って、レンダリングをするためのレンダーツリー設定例を紹介したいと思います。 そしてそれぞれの TextureProjection に SetData する ICEツリーを構成します。 このツリーへ、今まで作った「fmt_LambertShader」「fmt_SpecularShader」 「fmt_SphereEnvironment UVs」を取り出します。 今回はトゥーンのものとソフトシェーディングの両方を作ってみたいので、上までのTorusをもう一個複製して、「torus_soft」とリネームします。 ここまででUVの準備は出来ました。
スペキュラテクスチャはtoon側はアルファを用意して(左下枠下側)、アルファブレンドできるように用意します。
環境マップの方もスペキュラと同様にtoonとsoftで違う状態のものをそれぞれ用意します。 オブジェクトにそれぞれコンスタントでカラーが白のマテリアルを割り当て、それに接続していきます。 まずはtoonから。 Textrue_Projection1、環境マップは Textrue_Projection2 です。 そして各レイヤーを、すべてColorポートのレイヤーに設定します。 各レイヤーの設定を以下のようにします。※左からLambert用、Specular用、環境マップ用 結果はこんな感じになりました。 ちょっとシェーディングテーブルの色が良くないので以下のように変更しました。 結果はこんな感じです。 例えばこのように反射光的な効果を入れて見ます。 では次はSoftシェーディングです。 すると、このようになります。 たとえば、マテリアルのPhongのデフォルトのようにシェーディングの色味を設定すると・・・ このようになります。 シェーディングがサーフェイスの裏側へ回り込むハーフランバートなんていうのも・・・ いとも簡単に実現できてしまいます。 今回は環境マップもついでに付けてみましたが、スペキュラとランバートのセットを用意すると、 |
4.おまけ... | ||||
さらに実用例があると面白いかと思い、ユーザーノートの Ritaroさんより「絵美さん」モデルをお借りして、それにレンダリング設定を加えてみました。 顎を引き、ニコリと笑って、スマイル。 ■肌 ■髪 レンダーツリー ■肌 各レイヤーの設定 ■髪 ICEの構造は基本的に上までと同じものですが、髪の毛のスペキュラだけ、ライトを個別に持っています。 こうすることで物理的には正しくありませんが、異方性スペキュラのような手書きのイメージで狙いやすい効果を出すことが出来ます。 以上、ここまでのものはただの一例ですので、皆様の好きなシェーディングを再現してみてください。 |
5.First Valid について |
このページで使っている fmt_LambertShader コンパウンド等を見て、気になった方もおられるかと思います。 このノードはXSIヘルプの文章をそのまま引用すると、 First Validノードは、ツリーブランチに接続されている入力ポートの中で、エラーが発生していない最初のものを通過させます。その他の入力ポートは、すべて無視されます。 |