UDN
Search public documentation:

BloomJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > ポストプロセス エフェクト > ブルーム ポストプロセス エフェクト


ポストプロセス機能 ブルーム (Bloom)


Bloom.jpg

概要


Bloom (ブルーム)とは、現実世界における発光現象です。これを利用することによって、適度なレンダリング パフォーマンス コストで、レンダリングされたイメージの知覚的な現実感を大幅に向上させることができます。背景がきわめて暗い状態で非常に明るい物体を肉眼で見る場合に、わたしたちはブルームを目にすることができます。さらに明るい物体は他の効果 (光の筋やレンズフレア) ももたらしますが、標準的なブルーム エフェクトではこのような効果を変換することはありません。私たちが使用するディスプレイ (例 : TV、TFT など) は通常 HDR (high dynamic range / ハイダイナミックレンジ) がサポートされていないため、きわめて明るい物体をレンダリングすることができないのです。そのかわりに、目の中で生じる効果 (網膜のサブサーフェス スキャタリング) をシミュレートします。これは、光がフィルムに当たる場合 (フィルム サブサーフェス スキャタリング) や、乳白色ガラスフィルターをカメラの前に置いた場合に見られる効果です。この効果は、必ずしも物理的に正当であるとは限りませんが、物体がかなり明るいことを示すのに役立つとともに、LDR (low dynamic range / ロウダイナミックレンジ) のイメージのリアリティを高めるのに役立ちます。

ブルームのプロパティ


ブルームを調整できるプロパティは、 UberPostProcessEffect ノード内のポストプロセス チェーンにあります。

注意 : ブルームのプロパティは、他のノード (例 DOFAndBloomEffect ) にもありますが、それらのノードは使用するべきではありません。下位互換性 のためだけに存在しているノードだからです (最適化が不十分なコードや低い機能が実行される可能性があります)。

そこにあるプロパティの大半は、 PostProcessVolumes および、 WorldPropertiesCameraActor 、さらに、 UnrealScript でアクセスできるいくつかの構造体にも含まれています。それらの設定項目は、他のすべてのポストプロセス エフェクトと同様に、通常のオーバーライドされた動作に従います。

次の画像は、内容は同一のものですが、プロパティによる調整を変えています。

BloomSamples.png
左上 : デフォルトのブルーム設定値
右上 : KernelSize
左下 : Threshold
右下 : 青の Tint をともなっている

次は、エディタ内でプロパティが表示されている画像です。(チェーン)

EditorBloom.png

なお、 PostProcessVolumes あるいは WorldPoperties においては、大半のレベルの主な設定値がオーバーライドされています。

ブルームの形状を調整する


ブルームの実装は、分離可能なガウス ブラー カーネルが使用される場合が多い。これによって、効率的なブラーが可能になります。(パフォーマンスはカーネル半径に対して線形比例します。ただし、効果範囲は幅と高さのサイズが増加します)。 ガウス ブラーを使用するとともに、さらに、その結果をソースの結果とブレンドしても、本当に望ましいエフェクトは得られません。第 1 近似としては充分ですが (そのような状態で出荷されるゲームは多い)、クオリティの基準を引き上げるのであれば、明るい部分のディテールを上げて、より大きなフォールオフをとるべきです。そのためには、オプションとしてガウス分布の寄与をもう 1 つか 2 つ追加することが可能です。3 つのガウス曲線の半径と重みは、 UberPostProcessEffect ノードで調整できます。次の画像は、ゲームのコンテンツに適用した場合のものです。

NewBloom.jpg
左上 : ブルームがないため、物体の発光が適切に表現されていません。
右上 : 単一のガウス曲線が左側の物体に効果的に作用していますが、右側の物体にはそれほどでもありません。
左下 : 2 つのガウス曲線が両方の物体にうまく作用しています。
右下 : ガウス曲線を 3 つ使用することによって、かすかでスケール大きな発光が加わりました。

次の画像は、ガウス分布曲線がどのようなものかを示しています。

one.png
このグラフは、幅が制限されているガウス分布曲線です。

異なるスケールとサイズの 3 つのガウス分布曲線を結合することができます。

three.png
赤 : 大型のガウス分布曲線
青 : 中型のガウス分布曲線
緑 : 小型のガウス分布曲線

寄与を追加することによって、望ましい形状を得ることができます。

combined.png
新たな形状は、中央が鋭く、幅が両端まで広がっています。

曲線の形状はエディタで調整することができます (上に掲載されているエディタの画像の中にある Shape [形状] の部分をご覧ください) 。あるいは、コンソールコマンドを使用して調整することもできます (このページの最後をご覧ください)。

低解像度のブラー


低解像度であっても、画質をあまり劣化させずにブルームを実行することが可能です。1/4 の解像度でも良い結果を得たことがあります (エリアの1/16)。分離可能なガウスブラーによって大きな半径が可能になりますが、それでもある範囲を超えると負荷が大きくなりすぎます。さらに低い解像度であっても演算処理を行い、かつ、レンダリング パフォーマンスを節約することは可能です。

現在デフォルトでは、下位互換性を保つために、単一のガウス分布曲線を使用しています (重さは 0/1/0)。ユーザーによって大小の重みづけが指定されると、異なるシステムが使用されることになります。新たなシステムでは、中型のガウス曲線では半分の解像が用いられます(つまり、速度は上がるが画質が低下するということになります)。しかし、小さいガウス曲線では通常のブルームの解像度が使われます。大型のガウス曲線では、それらの中間の解像度が用いられます。これによって、非常に大きな半径を、きわめて低い負荷で使うことができるようになります。

トーンマッパ インタラクション


最高の画質を得るために、ブルームはトーンマッピングを行う前にシーンに追加されます。つまり、近くのブルームしている部分によって一層明るくなっている部分が、穏やかに LDR の最大値に収束していくことになります (通常、白になりますが、鮮やかな色の場合は違う色になる可能性もあります)。ブルームによってこのような明るい部分のディテールが阻害される場合は、 ScreenBlendThreshold プロパティを調整します。

ScreenBlend.png
最も明るい部分の違いに注目してください。

パフォーマンスと実装の詳細


分離可能なガウス ブラー メソッドを使用するため、パフォーマンスは半径に対してほぼ線形比例します。半径もスクリーンの解像度 (正確にはビューの幅) に対して比例し、 KernelSize は 1280 の解像度のためにピクセルで定義されます。カーネルのサイズは 64 に制限を設けています。(パフォーマンス上の理由とシェーダーの種類を少なくするためです)。低解像度のため、ピクセル シェーダーでは 16 のルックアップしか使用しません。(半径 64 → 幅 128 → 1/4 解像度で 32、16 のバイリニア フィルタ サンプル )。複数のガウス曲線が使用される場合、中型の曲線の解像度は半分になり、大型の曲線では 1/4 になります。これは画質とパフォーマンスに影響を及ぼします。現在のところ、生成される画像は余分なパスと結合されています。 (改善可能です)。

大きな半径 (64+) を使用する場合にのみ、旧式の / デフォルトのメソッド (単一のガウス曲線) のパフォーマンスが改善されることが経験上分かっています。

便利なコンソール コマンド


BloomScale
ブルームの強さを調節します。
BloomSize
ブルーム エフェクトのサイズを調整します。
BloomType
内部で使用するメソッドを調整します。
BloomWeightSmall
小型のガウスブラーの重みを調節します。(UI プロパティとは異なり、正規化の後で行います)。
BloomWeightLarge
大型のガウスブラーの重みを調節します。(UI プロパティとは異なり、正規化の後で行います)。

モバイルサポート


ブルームは、モバイルプラットフォーム上でシステム設定が有効となった場合のみ機能します。ハイエンドなモバイル機能で高価な操作ですので、注意を払って有効にしてください。モバイルブルームは、 MobilePostProcess ヘッダの DefaultPostProcessSettings から設定出来ます。ブルームを実際に有効にするには、 MobilePostProcess から Bloom_ScaleBloom_ThresholdBloom_Tint のどれか一つを上書きしなくてはいけません。また WorldInfo に値を特定すると、値がプロパティリスト上で上書きされていなくても、これらの値はブルームが有効の際に使用されます。