ディスプレイスメントを使用して海をレンダリングするチュートリアル

このチュートリアルでは、ポリゴン プレーンと、skydome_light に接続されている HDR イメージのみを使用して海のシーンをレンダリングする方法について説明します。海のシェーダのディテールは、ベクトル ディスプレイスメント マップから取得します。ディスプレイスメント マッピングを使用する場合、設定するアトリビュートにはさまざまなものがあります。ただし、セットアップを行い、適切な設定を使用して納得のいく結果を得ることは非常に簡単です。

シーン ファイルとベクトル ディスプレイスメント マップは、こちらにあります。

海洋マテリアル

Arnold モディファイヤのポリゴン プレーンで opaque を無効にする

ベクトル ディスプレイスメント マップ

使用されるベクトル ディスプレイスメント マップは、32 ビット EXR イメージです。これはつまり、最高品質のベクトル ディスプレイスメント効果を維持できるということです。 よりリアルな波の効果を作成するには、ベクトル ディスプレイスメント マップを使用して海の波のディスプレイスメントを行います。これは、1 方向にのみジオメトリをディスプレイスメントする従来のディスプレイスメント マップとは異なり、法線と異なる方向に海のジオメトリをディスプレイスメントします。

海のディスプレイスメント作成に使用する vector_map.object_space

波の効果がシャープすぎる場合は、よりスムーズな波を作成するために、ベクトル ディスプレイスメント マップにブラーを適用してみてください。

Environment and Effects ウィンドウ(8)を開き、スカイ HDR マップを Background -> Environment Map にドラッグ アンド ドロップします。

サブディビジョンの設定

subdivision_type: catclark、 subdivision_iterations: 3

subdivision_iterations: 8。海の波のディテールが増加している。

ライティング

distant_light を使用したレンダリング

angle: 5

透過

海のサーフェスに差し込む光は「屈折」します。水中よりも空気中の方が光の移動速度が速いためです。光が水に到達すると、海のパーティクルによって散乱するか、吸収されます。海が深くなるほど(密度が濃くなるほど)、通過した光の深度は小さくなります。standard_surface シェーダの transmission アトリビュートを使用すれば、この効果を簡単に再現することができます。海のサーフェスの内側にオブジェクトを配置すると、この効果を確認できます。光がメッシュ内部を移動する距離が長いほど、青色の transmission_color の影響を強く受けることが分かります。

transmission_color: white transmission_color: blue

海のシェーダに適用した場合、下にある閉じたサーフェスの海の内部にある白い円柱に transmission_colordepth が及ぼす影響を確認できます。

暗いまだら部分

海のシェーダは完全に透明なわけではありません。つまり、入射しないレイは反射せず、その代わりに屈折して水中を進む(実世界と同様)ということです。ただし、シェーダが透明ではないため、レイを終了して黒色にする必要があります。

ジオメトリ法線がレイと同じ方向を向いているのにシェーディング法線がレイとは逆の方向を向いている場合、シェーディング法線で問題が生じることがあります。この例では、シェーディング(Auto Bump)法線は、水の裏側に当たって下方向に反射しますが、実際はもちろん、レイは水のメッシュの上面に当たります。

実際の水は、グレージング角度でほぼ 100% 光を反射しますが、その場合でも光が波頭の裏の谷から出るまでに数回バウンスします。また、数回バウンスした後も、水平線からの入射光を、周囲の水の反射位置よりも高い位置で反射する可能性があります。

見た目をよりリアルにするには、水を透明にしてから、海水の色が付いたプレーンを水の下に配置します。下のイメージ例では、海底の standard_surface シェーダには emission_scale の値として 1、emission_color として青色/緑色が設定されています。subdivision_iterations を増やしたことも、ディスプレイスされた海の波の黒いまだら部分の数を減らすのに役立ちました。

subdivision_iterations: 3。一部が黒くなります。 subdivision_iterations を 8 に増やすと問題が減ります。

波頂の背後にある暗いまだら部分(自己反射)も、Render Settings の specular_ray_depth を増やすことで改善できます。

specular_ray_depth: 1 specular_ray_depth: 2

まとめ

これで、説得力ある海のシーンを作成する方法に関するチュートリアルは終わりです。正しいディスプレイスメント設定と、高品質の 32 ビット ベクトル ディスプレイスメント、および正しい standard_surface シェーダ設定を組み合わせれば、リアルな結果が得られるでしょう。さらに視覚的な魅力をシーンに追加するには、被写界深度を追加したり、魚眼レンズのようなカメラ レンズに変更してみてください。

以下では、通常のジオメトリを使用するのと比較して、ベクトル ディスプレイスメント マップを使用して波の効果を作成するとどれほどのディテールを加えることができるかを確認できます。

ポリゴン ジオメトリを使用した海の波 ベクトル ディスプレイスメント マップは、ジオメトリを使用するよりずっと細部を描くことができます

ディスプレイスメント値のアニメーション

ワークフローの例