株式会社コロッサスへようこそ

menu

Colossus Studios

アーノルドレンダー検証 その3

最近はまっているゲームがあります。モンハンとかジョジョじゃないですよ。「World of Tanks」です。


ベラルーシのWargaming.net社が開発した戦車戦を扱った多人数参加型オンラインゲームで、試作車両から実際に使用された車両まで主に20世紀の戦車が多数登場し、リアルなフィールドとともに戦車オタクにはたまらない世界となっています。
夕べも3時ごろまで戦闘に参加し、寝不足が続いています。社会人としてはよくないですよね。
ちなみに、私はソ連やドイツ車両に劣るフランス戦車に乗っていて、M的苦行の毎晩を過ごしているというわけです。
どうですか?あなたも乗ってみませんか?

さて、また気を取り直してアーノルドaiStandardシェーダー検証の続きです。

次は屈折についてです
Refractionパラメータは反射のように2つに分かれているわけではなく、1つのカテゴリーでコントロールします。

ただ、シェーダーのRefractionパラメータを上げただけでは正しい透明感が得られません。
シェーダーを割り当てたオブジェクトのシェイプノードにあるArnold専用アトリビュートのOpaque(不透明)オプションのチェックを外さなくてはいけません。
Refractionパラメータを上げて、OpaqueのOn,Offで結果を比べてみます。

レンダリング結果を見てください。

OpaqueON 透明なオブジェクトの影が黒く表現されている

OpaqueOFF透明なオブジェクトの色が影に反映されている

上:OpaqueONでは透明なオブジェクトの影が黒く表現されていますが、
下:OpaqueOFFでは透明なオブジェクトの色が影に反映されています。
このように設計してあるのは、たぶん、Arnoldのレンダリング負荷を少しでも軽減させるために、デフォルトの設定ではオブジェクトが物理的に正しい透明感を計算させないようになっているからではないか思われます。

 

続いて屈折における透過色のコントロールについて
色のついた透明なオブジェクトを作る場合、RefractionのColorに任意の色を付ければいいのですが、透明体の厚みによる物理的に正確な色の変化を得たい場合は、
RefractionのColorではなくTransmittanceに任意の色追加する必要があります。
mentalRay、mia_materialのrefr_falloff_dist、 refr_falloff_colorに相当するパラメータがTransmittanceとなります。
ただし、任意の距離を設定することはできません。

レンダリング結果を見てください。

RefractionColor 
どの部分も同じ色の濃さになっている

 

RefractionTransmittance 
オブジェクトの厚みに応じて色が変化している

上:RefractionColorではどの部分も同じ色の濃さになっています。
下:RefractionTransmittanceではオブジェクトの厚みに応じて色が変化しています。

また、同じ項目にOpacityというパラメータがありますが、これには注意が必要です。
白黒値をつかって透明不透明をコントロールするためのパラメータなのですが、任意の色を与えることも可能になっています。
しかしその場合は上記の2つのパラメータと違って計算負荷が20倍近く跳ね上がってしまいます。これは決してお勧めできない方法です。

レンダリング結果を見てください。

RefractionOpacity 

この辺りにも計算負荷を軽減するため、あえて物理的なパラメータを外せるような設計が見て取れます。

次の記事へ >>

<< 前の記事へ
その2 反射について
その3 屈折について
その4 SSSについて
その5 ディスプレイスメントについて