ポストプロセス機能 ブルーム (Bloom)
概要
Bloom (ブルーム)とは、現実世界における発光現象です。これを利用することによって、適度なレンダリング パフォーマンス コストで、レンダリングされたイメージの知覚的な現実感を大幅に向上させることができます。背景がきわめて暗い状態で非常に明るい物体を肉眼で見る場合に、わたしたちはブルームを目にすることができます。さらに明るい物体は他の効果 (光の筋やレンズフレア) ももたらしますが、標準的なブルーム エフェクトではこのような効果を変換することはありません。私たちが使用するディスプレイ (例 : TV、TFT など) は通常 HDR (high dynamic range / ハイダイナミックレンジ) がサポートされていないため、きわめて明るい物体をレンダリングすることができないのです。そのかわりに、目の中で生じる効果 (網膜のサブサーフェス スキャタリング) をシミュレートします。これは、光がフィルムに当たる場合 (フィルム サブサーフェス スキャタリング) や、乳白色ガラスフィルターをカメラの前に置いた場合に見られる効果です。この効果は、必ずしも物理的に正当であるとは限りませんが、物体がかなり明るいことを示すのに役立つとともに、LDR (low dynamic range / ロウダイナミックレンジ) のイメージのリアリティを高めるのに役立ちます。
ブルームのプロパティ
ブルームを調整できるプロパティは、 UberPostProcessEffect ノード内のポストプロセス チェーンにあります。
注意 : ブルームのプロパティは、他のノード (例 DOFAndBloomEffect ) にもありますが、それらのノードは使用するべきではありません。下位互換性 のためだけに存在しているノードだからです (最適化が不十分なコードや低い機能が実行される可能性があります)。
そこにあるプロパティの大半は、 PostProcessVolumes および、 WorldProperties 、 CameraActor 、さらに、 UnrealScript でアクセスできるいくつかの構造体にも含まれています。それらの設定項目は、他のすべてのポストプロセス エフェクトと同様に、通常のオーバーライドされた動作に従います。
次の画像は、内容は同一のものですが、プロパティによる調整を変えています。
|
左上 : デフォルトのブルーム設定値 右上 : KernelSize 大 左下 : Threshold 小 右下 : 青の Tint をともなっている |
次は、エディタ内でプロパティが表示されている画像です。(チェーン)
なお、 PostProcessVolumes あるいは WorldPoperties においては、大半のレベルの主な設定値がオーバーライドされています。
ブルームの形状を調整する
ブルームの実装は、分離可能なガウス ブラー カーネルが使用される場合が多い。これによって、効率的なブラーが可能になります。(パフォーマンスはカーネル半径に対して線形比例します。ただし、効果範囲は幅と高さのサイズが増加します)。
ガウス ブラーを使用するとともに、さらに、その結果をソースの結果とブレンドしても、本当に望ましいエフェクトは得られません。第 1 近似としては充分ですが (そのような状態で出荷されるゲームは多い)、クオリティの基準を引き上げるのであれば、明るい部分のディテールを上げて、より大きなフォールオフをとるべきです。そのためには、オプションとしてガウス分布の寄与をもう 1 つか 2 つ追加することが可能です。3 つのガウス曲線の半径と重みは、 UberPostProcessEffect ノードで調整できます。次の画像は、ゲームのコンテンツに適用した場合のものです。
|
左上 : ブルームがないため、物体の発光が適切に表現されていません。 右上 : 単一のガウス曲線が左側の物体に効果的に作用していますが、右側の物体にはそれほどでもありません。 左下 : 2 つのガウス曲線が両方の物体にうまく作用しています。 右下 : ガウス曲線を 3 つ使用することによって、かすかでスケール大きな発光が加わりました。 |
次の画像は、ガウス分布曲線がどのようなものかを示しています。
|
このグラフは、幅が制限されているガウス分布曲線です。 |
異なるスケールとサイズの 3 つのガウス分布曲線を結合することができます。
|
赤 : 大型のガウス分布曲線 青 : 中型のガウス分布曲線 緑 : 小型のガウス分布曲線 |
寄与を追加することによって、望ましい形状を得ることができます。
|
新たな形状は、中央が鋭く、幅が両端まで広がっています。 |
曲線の形状はエディタで調整することができます (上に掲載されているエディタの画像の中にある Shape [形状] の部分をご覧ください) 。あるいは、コンソールコマンドを使用して調整することもできます (このページの最後をご覧ください)。
低解像度のブラー
低解像度であっても、画質をあまり劣化させずにブルームを実行することが可能です。1/4 の解像度でも良い結果を得たことがあります (エリアの1/16)。分離可能なガウスブラーによって大きな半径が可能になりますが、それでもある範囲を超えると負荷が大きくなりすぎます。さらに低い解像度であっても演算処理を行い、かつ、レンダリング パフォーマンスを節約することは可能です。
現在デフォルトでは、下位互換性を保つために、単一のガウス分布曲線を使用しています (重さは 0/1/0)。ユーザーによって大小の重みづけが指定されると、異なるシステムが使用されることになります。新たなシステムでは、中型のガウス曲線では半分の解像が用いられます(つまり、速度は上がるが画質が低下するということになります)。しかし、小さいガウス曲線では通常のブルームの解像度が使われます。大型のガウス曲線では、それらの中間の解像度が用いられます。これによって、非常に大きな半径を、きわめて低い負荷で使うことができるようになります。
トーンマッパ インタラクション
最高の画質を得るために、ブルームはトーンマッピングを行う前にシーンに追加されます。つまり、近くのブルームしている部分によって一層明るくなっている部分が、穏やかに LDR の最大値に収束していくことになります (通常、白になりますが、鮮やかな色の場合は違う色になる可能性もあります)。ブルームによってこのような明るい部分のディテールが阻害される場合は、 ScreenBlendThreshold プロパティを調整します。
|
最も明るい部分の違いに注目してください。 |
パフォーマンスと実装の詳細
分離可能なガウス ブラー メソッドを使用するため、パフォーマンスは半径に対してほぼ線形比例します。半径もスクリーンの解像度 (正確にはビューの幅) に対して比例し、 KernelSize は 1280 の解像度のためにピクセルで定義されます。カーネルのサイズは 64 に制限を設けています。(パフォーマンス上の理由とシェーダーの種類を少なくするためです)。低解像度のため、ピクセル シェーダーでは 16 のルックアップしか使用しません。(半径 64 → 幅 128 → 1/4 解像度で 32、16 のバイリニア フィルタ サンプル )。複数のガウス曲線が使用される場合、中型の曲線の解像度は半分になり、大型の曲線では 1/4 になります。これは画質とパフォーマンスに影響を及ぼします。現在のところ、生成される画像は余分なパスと結合されています。 (改善可能です)。
大きな半径 (64+) を使用する場合にのみ、旧式の / デフォルトのメソッド (単一のガウス曲線) のパフォーマンスが改善されることが経験上分かっています。
便利なコンソール コマンド
-
BloomScale
- ブルームの強さを調節します。
-
BloomSize
- ブルーム エフェクトのサイズを調整します。
-
BloomType
- 内部で使用するメソッドを調整します。
-
BloomWeightSmall
- 小型のガウスブラーの重みを調節します。(UI プロパティとは異なり、正規化の後で行います)。
-
BloomWeightLarge
- 大型のガウスブラーの重みを調節します。(UI プロパティとは異なり、正規化の後で行います)。
モバイルサポート
ブルームは、モバイルプラットフォーム上でシステム設定が有効となった場合のみ機能します。ハイエンドなモバイル機能で高価な操作ですので、注意を払って有効にしてください。モバイルブルームは、 MobilePostProcess ヘッダの DefaultPostProcessSettings から設定出来ます。ブルームを実際に有効にするには、 MobilePostProcess から Bloom_Scale 、 Bloom_Threshold 、 Bloom_Tint のどれか一つを上書きしなくてはいけません。また WorldInfo に値を特定すると、値がプロパティリスト上で上書きされていなくても、これらの値はブルームが有効の際に使用されます。
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.