« BA_Volume 普及促進実行委員会 | トップページ | オーバーラップクラスタの恐怖。 »

2008年1月28日 (月)

BA_Volume普及促進委員会(その2)

BA_Volumeのバージョン3を持っている方、Texture Synthesis ってどういうものなんですか。
額面どおりのことできますか。教えてください。そして委員会に入ってください。


某所の某氏が BA を買ったと聞いて、なんとなく BA が気になり出している今日このごろ。




BA の基本的な使い方を理解するために、シンプルなシーンで実験。プリミティブの Cube と Grid を出してみましょう。

Ba2_1

Cube にテキトーにマテリアルを与えて、RenderTree の Node > Volume > More > Path ボタンで BA フォルダに行き、BA_Volume_cloud を選びましょう。で、マテリアルノードの Volume ポートにぶっ込みましょう。デフォルトの Phong はもう要らないから捨てましょう。で、リジョンを描いてみると、

Ba2_2

こういう絵が出てきます。すでにボリュームレンダリングがされています。Cube の Volume =つまり容積・体積、を満たすレンダリングをするのがボリュームシェーダです。この場合、デフォルトの青い物体で満たされています。

ここで、試しにライトを増やしたり、ライトの明るさや色を変えてみましょう。すると、レンダリングされる絵は何も変わりません。BA_Volume_cloud の中で、ライティングに使うべきライトを指定してないからです。なので BA_Volume_cloud ノードを開いて設定します。

Ba2_3

このように Lights/Shadows タブでライトを選んであげると、ちゃんとボリュームがライトに照らされた状態でレンダリングされました。 
ちなみに、さっきまで見えていた青い物体は、となりの Color タブの中の Ambience の色です。アンビエンス、つまりライトで照らされてない部分に付く色です。さっきまではライトの影響を受けてない状態だったので、ボリューム全体がアンビエンスの色になっていたということです。
3DCGでは基本的にアンビエンスは撲滅すべきだと思っているんですが、BA を使う時はこのアンビエンスを利用しないわけにはいきません。いちいちカゲ側からもライティングしてたら重すぎて話にならないからです。

次に、ライトをいじります。以降の作業を分かりやすくするために、Intensity1 にします。シャドウをオンにして、Umbra0 にします。

Ba2_4

ボリュームが出すシャドウがボリューム自体にも落ちます(セルフシャドウ)。さらに、下の Grid にもシャドウが落ちています。なんだか美味しそうな Cube になりました。ブルーベリージャムでもかけると良いデザートになりそうです。

Intensity を 1、シャドウを 0 にするのは単にその方が分かりやすかろうというだけのことで、別に必須ではありません。BA はシーンのライトの強さ・シャドウの濃さなどに素直に反応しますが、BA_Volume_cloud の中でライトに対する敏感度やシャドウの色などをいじれるので、ライトの数値は分かりやすい値に固定しておいてあとはシェーダのパラメータの方で調整するのがよろしいかと。

ちなみに、リジョン/レンダーオプションで、シャドウの種類を Segmented にしておく必要があるようです。他の種類にするとシャドウがレンダリングされませんでした。

Ba2_5

XSI5.11 までは Enabled ってやつがデフォルトだったと思うんだけど、XSI6 からはこの Segmented がデフォルトになったようです。ヘルプを読むと、Segmented はちょっとレンダリング重くなるけどボリュームシェーダがシャドウを落とすようにするために必要なのだ、という意味のことが書いてあります。よく意味わかりませんが、まあデフォルト設定のままいじらなければ問題ないということにしておきます。

現在はボリュームの密度を何もコントロールしてないので、Cube の中は一定の密度のままになっており、だからこんな杏仁豆腐みたいな Cube になります。一番左の Density(密度)タブの Density input で、試しに密度を下げてみます。

Ba2_6

薄~くなりました。密度はここでコントロールします。で、この密度のコントロールこそがBA の肝になります。Density input が一定の数値のままだと杏仁豆腐になるので、他のノードでコントロールしてあげるのです。分かりやすいよう、ハートな画像をぶっ込んでみました。

Ba2_7

ちなみに UV の設定で Implicit にしてあげないと正しくレンダリングされません。何故かは知りません。で、レンダリングしてみると、

Ba2_8

こうなります。Cube を満たすボリュームの密度を、テクスチャの白黒で制御していることになります。ハートの代わりにモヤモヤの模様をぶっ込んであげてモヤモヤな密度にすると、雲っぽくなるわけです。 しかしテクスチャ画像を用意したのでは、Planar XY やら Spherical やらの表面からぶち抜きで貼られるUVに縛られるので、3Dテクスチャ、つまりプロシージャルを使うことになります。UVW の W が必要だということです。

BA_Volume には BA_Fractal4D_scl というプロシージャルノードが付いてきます。これは、BA のフリー版プロシージャル集 BA Shader Collection Essential に入っている BA_Fractal_4D ノードのスカラ版です。BA_Volume_cloud の Density パラメータは RGB ではなくただの数値、つまりスカラ値ですので、スカラ値をぶっ込んでやる必要があります。BA_Fractal_4D を Color2Scalar 経由でぶっ込んでもいいのですが、余計なものを挟まないためにスカラ版の BA_Fractal4D_scl を用意した、って感じでしょうか。

ともかくも、Node > Texture > More > Path ボタンで BAフォルダ 経由で BA_Fractal4D_scl を取り出し、Density にぶっ込んでみましょう。

Ba2_9

ようやく雲っぽい絵になりました。
あとは、BA_Fractal4D_scl の中のパラメータをいじりまくって、好みの雲になるようにしていくわけです。Noise タブで Perlin ノイズを Turbulence に変えたり、Texture Support タブで模様の大きさを変えたりすると、結果が劇的に変化します。一番左の Color タブでは出力する数値の色(スカラ値ですが便宜的に色と言います)をコントロールしますが、ここも外観に思いっきり影響を与えます。

Ba2_10

BA_Fractal4D_sclを使わないといけないなんてことはないので、自分の気に入ったシェーダでやればいいと思います。Enhance:XSI なんかも、とても使えそうです。

Ba2_11

ただ、BA_Fractal4D はとても使えるので、結局これでやることが多くなる気はしますが、どうでしょう。誰か BA と相性のいいシェーダ教えてください。

BA_Fractal4D_scl が1個だけで済むことは少ないでしょう。大きさや模様の種類を変えて複数用意し、それらを掛け算や引き算でミックスし、その結果を Density にぶっ込んでやることになる場合が多いと思います。 Cube のカドを見えなくするためにグラデーションともミックスしてやることにもなるでしょう。 この掛け算・引き算などの四則演算がまたクセ者で、計算結果を脳内でレンダリングできないとつらいかもしれません。 基本的には、でかい模様のフラクタルで大まかな雲を作り、小さい模様のフラクタルをディテールとして用意して、でかい方から小さい方を引き算してあげる、というのが典型的なパターンになるのではないかと思います。プロシージャル+ディスプレイスメントで海面を作るのと同じ考え方ですな。

また、Cube のようなオブジェクトではなく、パーティクルに対してこの BA_Volume_cloud を与えるのも、もちろんよくやる手段です。この場合は、パーティクルから情報を持ってくるための別のノードが必要になります(BA_Volume に付属)。これに関してはまた別の機会で書くかも知れません。書かないかも知れません。

さらに BA_Volume_cloud の中にも調整すべきパラメータは死ぬほどあるんですが、それはまた今度書くかも知れません。書かないかも知れません。
ともかく、 BA_Volume_cloud の Density をプロシージャルでコントロールして雲のような外観にするという概念は理解できたのじゃないでしょうか。理解できてませんか。知りません。



しかし、自分で習熟してもいないのに、こういう記事を書いてもいいもんでしょうか。ムズいシェーダです。もう1回同じ雲作れと言われたら土下座します。できません。

続く。
かもしれないし、続かないかもしれません。





|

« BA_Volume 普及促進実行委員会 | トップページ | オーバーラップクラスタの恐怖。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: BA_Volume普及促進委員会(その2):

« BA_Volume 普及促進実行委員会 | トップページ | オーバーラップクラスタの恐怖。 »