HDR
■概要
HDR(High Dynamic Range)とはRGBAの各色の基本的な限界値である、
1.0(255)を超える設定を可能とした表現方法です。
もともとは写真技術の一つとして使用されていた表現方法ですが、
グラフィック技術の向上によりゲームなどの3Dグラフィックスでも
使用されるようになりました。
●HDRのピクセル情報
・R16G16B16A16
各ピクセルを2バイトとして1ピクセルを表現する
※大体現実世界と同じくらいの表現が可能
・R32G32B32A32
各ピクセルを4バイトとして1ピクセルを表現する
●メリット
・色 + 明るさを表現できる
今までの0.0~1.0までの範囲では「色」を表現するには十分ですが
更に「明るさ」の要素を表現しようとすると不十分になります。
例えば真っ白の紙と蛍光灯はどちらとも白色(1.0, 1.0, 1.0)です。
しかし蛍光灯は白色の紙より明るいイメージですので、
RGBの白色(1.0, 1.0, 1.0)よりも上の白さを要求したくなります。
その際にHDRを使用することで、蛍光灯に1.0よりも上の値をを設定し、
白い紙よりも更に白い(明るい)表現をすることが可能です。
●デメリット
・メモリ使用量の増加
HDRのデメリットはメモリ使用量です。
本来は1ピクセル辺りのバイト数はR8G8B8A8の計4バイトですが、
R16G16B16A16では8バイトR32G32B32A32では16バイト必要です。
1ピクセルにつき2倍または4倍となりますので、
画面を構成するピクセル数に適応した場合
必要とするバイト数は大幅に増加します。
■擬似的HDR
HDRは上記のようなデメリットがありますので、
0.0~1.0の範囲を擬似的に0.0~2.0の範囲として表現する
擬似的HDRという方法があります。
こちらを使用することで、あくまで0.0~1.0の範囲内での表現にはなりますが、
HDRに近い表現を行うことが可能です。
■トーンマッピング
HDRを使ってレンダリングしても最終的にディスプレイに表示しなければならず、
HDRに対応していないディスプレイ(LDR)の場合1.0を超えた色は白色になります。
この時に使用されるのがトーンマッピングと呼ばれる方法です。
トーンマッピングを使用するとHDRで表現する内容を
適切な1.0の範囲に収めることができます。
※DirectX Graphicsではトーンマッピングの機能は実装されていないので
ピクセルシェーダでプログラムを作成する必要があります。