水面下のコースティクス

コースティクスとは、光線が曲面により鋭く反射する包絡線に沿って、屈折することによって集められ明るく輝く曲線模様を言い、例えば陽を受けた水面の波紋や波の反射が、透明度の高い川底に屈折して差し込むシーン等がそれに当たります。
Terragenで、そのコースティクスを偽造的にシミュレートする簡単な方法を解説します。
(最後にチュートリアルファイルを配布しているので、詳しくはDLしてご確認下さい。)

画像の準備

水面の写真画像を今回のチュートリアルに使用するため、フォトショップ等の写真加工ソフトでカラーからグレースケールに変換し、トーンカーブやコントラストツールで濃淡を調整します。

工程 1

1.TG4を起動し、【Objects】タブに移動します。このチュートリアルのシーンでは、地表代わりに新しく『Plane』オブジェクトを作成し、作業を進めます。これを"Ground plane"と名付け、下記画像の赤線で囲った地表のサイズと、配置を設定します。

2.既存の『Planet 1』を選択し、「Render surface」のチェックを外します。これにより画像をレンダリングする時に、『Ground plane』オブジェクトの前に不要な下地の地形を最初にレンダリングさせない事で、レンダリング時間を大幅に短縮します。さらに「Surface shader」の関連付けを"Break connection~"で『Base colour』から切り離して下さい。これにより、TG 4はこれから構築するすべてのシーンは、作成した『Ground plane』が地表として取り扱われます。(現段階では、『Ground plane』のInput端子の「Surface shader」が関連付けられていません。)

3.水面下の岩地となる『Rock Base』は、「Colour function」のために3つの異なる『Power Fractal Shaders』を持つ通常のサーフェス・レイヤーです。これらはグループの"RB Shaders"の内部ネットワークに格納されています。

4.『Rock Base』の次に『Fake stones shader』を追加し、テクスチャも同様に行います。これらはグループの"FS Shaders"の内部ネットワークに格納されています。『Rock Base』とは異なり、こちらは「Surface shader」のインプット端子に関連付けられます。

5.新しい『Surface layer』を作成し、"Caustics ground function"と名付けます。「Coverage」を0.5に設定し、「Apply colour」のチェックは外して下さい。一旦ここで、このノードの作業は終ります。作成時に付帯された『Fractal breakup shader』は削除します。このプロジェクトでは使用しません。

6.最後に、5.で作成した『Caustics ground function』を、オブジェクトの『Ground plane』のInput端子(Surface shader)に接続して下さい。

ここまでが、このチュートリアルの前準備段階です!

工程 2

1.ネットワーク・ビューの"Waterグループ"のエリアにアクセスし、右クリックでポップアップメニュー「Create Object」->『Plane』を作成します。サイズは見た目が判り易くなる様、地表より少し小さめに設定します。Y値は0.4(地表から40cm上)です。これを、"Water Plane"を名付け、"Waterグループ”の一番下に配置します。

2.新しく『Water shader』と『Surface layer』を作成し(『Fractal breakup shader』は削除します)、"Water surface displacement"と名付けます。このチュートリアルでは、これを岩地に照らされたコースティクスを描く'ドライ・レンダリング'と呼びます。さらに『Image map shader』と『Merge shader』を作成します。これらの接続は下記ネットワークビューの画像を参照して下さい。『Water shader』は、『Water surface displacement』の"child layer"として関連付けます。そしてOutput端子は、『Merge shader』のInput端子に接続し、このOutput端子は、『Water Plane』に接続します。『Merge shader』の"shader A"端子には『Image map shader』を接続します。現段階では『Image map shader』の画像ファイル指定は空白のままにしておきます。これは"Subsurface image map"と名付けます。

3.現段階では、『Water Plane』ノードは無効にします。このエリアは工程 4で引継ぎます。

工程 3

1.【Camera】タブに移動して、新しい『Camera』を作成し、"Directors camera"と名付けます。「Translation」をx=5、y=100、z=5に設定します。現在このカメラは、地表から100メートル上空に設置されています。「Rotation」をX=-90に設定して、そこに残します。

2."Waterグループ"のエリアに戻り、新しい『Group』を作成して、"Caustics"と名付けます。そのエリア内に新しく『Image map shader』を作成し、"Caustics image map"と名付けます。用意された画像ファイル、"caustic greyscale.jpg"を指定し、「Projection type」に"Through camera"に選択します。「Projection camera」は、『Directors camera』を設定します。[Flip,Repeat]タブの"Repeat x"と"Repeat y"のみチェックを入れます。

3."Shadersグループ"に移動し、『Caustics ground function』ノードを開きます。[Luminosity]タブを開き、「Luminosity function」に『Caustics image map』を関連付け、「Luminous」は1.2、「Luminosity tint
は1(白)に設定します。

4.3Dプレビュー上でコースティクス画像が、上空から地表上に投影されているのを確認して下さい。

5.【Renderers】タブに移動し、新しい『Render』を作成し、"Quick Render"と名付けます。[Quality]タブの[Micropoly detail」を0.5で設定します。『Water Plane』には前工程の"Waterグループ"で空白にしておいた『Subsurface image map』が関連付けられます。一度レンダリングを行い、その画像を(.bmp)ファイルで保存したものを、『Subsurface image map』の画像ファイルとして使用します。

現段階のデフォルトの『Water shader』設定で、地底に水面の波紋が焼き付けられたような模様を十分に表現しています。しかし、このチュートリアルはさらなるリアルを求め、水面の波紋に忠実にコースティクスとして投影します。

工程 4

1."Waterグループ"に戻り、『Caustics image map』のOutput端子から2本目のラインを、『Waters Surface Displacement』のInput端子"Displacement function"に接続します。

2.『Waters Surface Displacement』の「Apply colour」のチェックを外し、[Displacement]タブに移動します。

3.工程 1の『Caustics ground function』に接続する事で、コースティクス画像がここで使用される事に気付くでしょう。「Displacement multiplier」を0.25、「Displacement offset」を2(メートル)に設定する事で『Plate』オブジェクトを上に動かさず、サーフェスを石の上に浮かせます。

4."Waterグループ"の最下部に設置した『Water plane』ノードを再び有効にします。3Dプレビュー内で、サーフェス画像が『Water shader』を正確に二等分にマージされているのを確認出来ます。今やコースティクス画像マップは生きているかのように水面上の波として置換されます。水の透明度を損なわないよう、『Merge shader』の「Mix to A」のスライダーを調整します。右にスライドさせるほど透明度が上がります。

水面は、地表よりも投影カメラに近いため、コースティクスと波のサイズの違いは、深度に比例します(つまり、地上では大きく、波面では小さくなります)。水の倍率や屈折度等は現実とは違います。水平視野を'ドライ・レンダリング'のコースティクスに対して水平視野を少し広く設定する工程を加える事で倍率問題の予備手段となりますが、ここでは行いません。広く、長いシーンの撮影には、コースティクス画像の投影カメラを日光の角度と方向により近づけて'ドライ・レンダリング'のみを行います。これは真上の位置からではなく、コースティクス・ライトが正しい角度で投影されているかのように見せるためです。これこそがこのチュートリアルの要となります。




このチュートリアルを作成されたdandelO氏による最新の「Water Caustics」技法が公式フォーラムのTopic: Functional Caustics - by dandelO に掲載されています。こちらも併せてご参照下さい。