密度ボリューム
グローバルフォグだけでは実現できないフォグエフェクトを、シーンに使いたい場面があるかもしれません。このような場合、ローカルフォグを利用できます。ローカルフォグは、Density Volume (密度ボリューム) を使って追加します。密度ボリュームは、配向バウンディングボックス (oriented bounding box、OBB) として示される、フォグの追加ボリュームです。デフォルトにより、フォグは定数 (同質) ですが、Density Mask 3D テクスチャを Density Mask Texture (密度マスクテクスチャ) セクションの下にある Texture フィールドに割り当てて、変更できます。現在 HDRP がサポートする 3D テクスチャの解像度は 32x32x32 です。
HDRP は密度ボリュームをボクセル化してパフォーマンスを向上させます。これには 2 つの制限が伴います。
- 密度ボリュームはボリュメトリックシャドウイングをサポートしません。ライトとサーフェスの間に密度ボリュームを配置した場合、ボリュームはサーフェスに到達するライトの強度を減少させません。
- 密度ボリュームは、通常カメラの焦点軸に 64 または 128 スライスという、極めて粗いレートでボクセル化されます。これにより、ボリュームの境界で顕著なエイリアシングが発生します。可能であれば、密度ボリュームとグローバルフォグと併用しエイリアシングを隠します。さらに、密度ボリュームとゼロではないブレンド距離を使って、エッジの粗さを減少させることもできます。
密度ボリュームを作成するには、Hierarchy で右クリックしてから Rendering > Density Volume を選択します。または、画面上部のメニューバーから GameObject > Rendering > Density Volume へ移動します。
プロパティー
プロパティー | 説明 |
---|---|
Single Scattering Albedo | フォグの色を設定します。ボリュメトリックフォグはライティングに色付けをするため、フォグがライトをこの色に散乱させます。色付けさせるのは、フォグの後ろまたはフォグ内のライトが発光するライティングのみです。つまり、フォグの後ろまたはフォグ内のゲームオブジェクトが反射するライティングには色付けせず、反射されたライティングは、フォグの密度が増すにつれて薄暗くなる (黒くフェードする) だけです。例えば、赤い単一の散乱アルベドのフォグの後ろの白壁にライトを当てると、フォグは赤く見えます。白壁にライトを当ててフォグの反対側から見ると、フォグはライトを暗くしますが、赤くはなりません。 |
Fog Distance | フォグのベースで密度を制御し、フォグを通してどれくらい先まで見えるかをメートル単位で決定します。この距離でフォグは、63% の背景ライトを吸収および散乱させています。 |
Size | ボリュームの次元を制御します。 |
Per Axis Control | 有効にすると、グローバルではなく、軸ごとのブレンド距離を制御します。 |
Blend Distance | ブレンド距離は、ボリューム内のフォグレベルから外側のフォグレベルまでに線状のフェードを作ります。これはパーセンテージではなく、フェードが開始する、サイズプロパティーに定義されるボリュームのエッジからの絶対距離です。Unity は Size プロパティーで、この値を 0 と軸の最低値の半分の間に固定します。Normal タブを使うと、Blend Distance と呼ばれる単一浮動小数点値を変更でき、全方向に一様のフェードがかけられます。Advanced タブを開くと、各方向に 1 つずつ、軸ごとに 2 つのフェードを使うことができます。例えば X 軸では左から右へに 1 つ、さらに右から左へに 1 つ使えます。距離を 0 に設定するとフェードは表示されず、1 に設定するとフェードがかかります。 |
Invert Blend | フェードの方向を逆転させます。各軸に最大限値のブレンド距離を設定すると、ボリュームの中央でフォグを保持し、エッジをフェードさせます。ブレンドを反転させると中央がフェードし、代わりにエッジが保持されます。 |
Distance Fade Start | 密度ボリュームがフェードアウトし始めるカメラからの距離です。これは多くの密度ボリュームを使ってシーンを最適化し、遠くのものを見えなくするときに便利です。 |
Distance Fade End | 密度ボリュームが完全にフェードアウトするカメラからの距離です。これは多くの密度ボリュームを使ってシーンを最適化し、遠くのものを見えなくするときに便利です。 |
Density Mask Texture | ボリュームの内部にマッピングされた 3D テクスチャを特定します。密度ボリュームはテクスチャのアルファチャンネルのみを使います。テクスチャの値は、密度の乗数として作用します。テクスチャ値が 0 の場合は、密度のボリュームが 0 に、テクスチャ値が 1 の場合は、元の定数 (同質) ボリュームになります。 |
Scroll Speed | 密度ボリュームがテクスチャをスクロールするスピード (軸ごと) を特定します。各軸を 0 に設定すると、密度ボリュームはテクスチャをスクロールせず、フォグは静的になります。 |
Tiling | テクスチャの軸ごとのタイリング率を特定します。例えば、X 軸コンポーネントを 2 に設定すると、テクスチャはボリューム内部にある X 軸で 2 回繰り返します。 |
Density Mask Texture の作成
任意の画像編集ソフトでグレースケールフリップブックテクスチャを準備し、3D テクスチャとしてインポート します。例えばサイズが 1024x32 のテクスチャは、32 スライスが順に並べられた、サイズが 32x32x32の3D テクスチャを描きます。
さらに Texture Import Settings で、下記を行います。
Texture Type を Single Channel に設定します。
Channel を Alpha に設定します。
(オプション) Alpha Source を From Gray Scale に設定します。
適用をクリックします。
Density Volume コンポーネントを開き、Density Mask Texture セクションの Texture フィールドにインポートしたテクスチャを割り当てます。