ボケ被写界深度
概要
次の画像は、デジタルカメラを使用して現実の世界を撮ったものです。撮影されている物体には、焦点が合っている部分と、合っていない部分があります。
焦点が合っていない部分は、ボケ (日本語) と呼ばれる丸みを帯びた形となります。焦点がかなり合っていない場合でも、小さな光る物体についてはよりはっきりと見えます。
これから、このエフェクトをシミュレートして、効率的なリアルタイム実装を可能にさせる近似値を受け入れることにします。多くの他の被写界深度のレンダリング方法と同様に、ポストプロセスにおいてカラーイメージに対して行うことにします。ピクセル単位の深度情報、および、いわゆる許容錯乱円機能を使用することによって、イメージにおけるある部分をどの程度シャープにするか (あるいはどの程度焦点をぼかすか) を計算することができます。
リアルタイムにレンダリングされたこのイメージには、焦点があっているシャープな物体と焦点が合っていないブラーされた物体が写っています。ボケの形状は、5 ブレードレンズの絞りをミミックしています。
ボケ被写界深度を起動する
注意 : この機能を使用するにはジオメトリ シェーダーがサポートされていなければなりません。現在は、Direct3D 11 のためだけに実装されています。(起動方法については、 このページ を参照してください。)
アクティブなポストプロセス チェーンを開き、uber ポストプロセス エフェクトをクリック (または追加) します。被写界深度のグループの中には、次のように、関係する設定項目があります。
必ず、 Type (タイプ) を BokehDOF にセットします。
Quality (クオリティ) によって、パフォーマンスと引き替えにクオリティを高めることができますが、その効果は小さい場合があります。理想としては、Low (低い) のままにしておくべきです。視覚的効果に違いが生じ、かつ、パフォーマンスが充分である場合に限って設定値を上げるべきです。
BokehTexture (ボケテクスチャ) は、あらゆる 2D テクスチャにできますが、理想的には次のようにすべきです。
- グレイスケールであること。(正しいカラーフリンジはスクリーン位置依存ですが、カラーシフトをイメージに加えることによってカラーフリンジのように見えます)。
- 128 x 128 を超えないようにする。(これより大きくなるとメモリを浪費します)。
- 黒い境界線をもつこと。(四角形が大きいとより大きなテクスチャがレンダリングされます。また、ボケの形状がバイリニア フィルタリングからアンチエイリアス処理されます)。
- 圧縮されていないか、ルミナンスであるかのどちらかであること。
- 適正な輝度があること。(例を参照してください)。
ボケの形状
アーティストはポストプロセス チェーンにおいてボケテクスチャを指定することができます。次の画像は、さまざまなテクスチャ (左下) がどのようにレンダリングされたイメージに影響を及ぼすかを示しています。
Translucency (半透明)
ポストプロセスとして被写界深度を処理する場合、不透明なオブジェクトには非常によく機能します。これは、各ピクセル (またはフラグメント) が深度と関連づけられるためです。しかし、透過性のレンダリングの場合は、ポストプロセスの方法がうまく働きません。この問題を無視するならば、透過性のオブジェクトのあまりにも多くがフォーカスされるか、過度にブラーされるかのどちらかとなります。(オブジェクトの背景に依存します)。
どの透過性オブジェクトが被写界深度に影響を受けるか (受けないか) を制御することによって、この問題を解決しました。(マテリアルの設定項目において。後にDX11なしでプロセスが可能になりました)。次の画像を参照してください。
さらに、DepthOfFieldFunction (被写界深度機能) という新たなマテリアルノードによって、シェーディングを調整することができます。(例 : フェードアウトあるいはブラー状態にブレンド)。
既知の制約 (低レベル詳細度)
- このテクニックでは、半分の解像度のイメージをソースとして使用するため、輝度が高いピクセルの小規模なアーティファクトが、不適切なレイヤーに漏れる可能性があります。
- エフェクトはフルシーンのアンチエイリアス処理 (MSAA) によって機能しますが、ピクセルのうち非常に輝度が高い部分が不適切なレイヤーに漏れる場合があります。これを防ぐには、uber ポストプロセス エフェクトにおけるアップサンプリングを MSAA を意識したものにします。
- レイヤー内部のオクルージョンが処理できません。その結果、小規模な色漏れが生じる場合があります。
- フォーカスされていないあらゆるエフェクトがモーションブラーの影響を受けません。(これは、!MotionBlurSoftEdge 機能がエッジをソフトにすべきハードシルエットか、モーションブラーを喪失したかのどちらかを意味します)。
最適化 (低レベル詳細度)
パフォーマンスのために、アルゴリズムが半分の解像度のイメージだけに適用され、その後にフル解像度のイメージと再結合します。再結合のステップはピクセル単位で実行され、MSAA を無視します。(簡素化とパフォーマンスのため)。これは、クオリティの問題になる場合があります。(MSAA を無効にすることによって検証することが可能です)。
ボケの半径をかなり小さくすると、最近のグラフィックカードではパフォーマンスの問題が生じません。半径を大きくすると、すぐにレンダリングの速度が低下します。(半径が 2 倍になると、フィルコストが 4 倍になります)。
ジオメトリシェーダーは 2x2 のブロックを処理します。2x2 のブロックのコンテンツが適している場合は (ヒューリスティックがコードで定義されています)、ブロック全体で 1 つのクワッドしかスポーンされません。そうでない場合は、各ピクセルについて 1 つのクワッドがスポーンされます (合計 4 クワッド)。 次の画像では、1 つのクワッドでレンダリングされている部分 (緑色) と、4 つのクワッドを使用してレンダリングしなければならない部分 (赤色) を示しています。その他の部分はすべてフル解像度のシーンカラーを示しています。
Important!
You are viewing documentation for the Unreal Development Kit (UDK).
If you are looking for the Unreal Engine 4 documentation, please visit the Unreal Engine 4 Documentation site.