2

そのため、RGB という名前で呼ばれるさまざまな色空間が多数あります。線形のものもあれば、ガンマのものもあります。そして、どれが使用されているかはモニターごとに異なると想定しています。

directx または opengl シェーダーの RGB 値はどちらを解釈すればよいですか?

一般的なユーザーが使用すると想定できる「安全な」色空間はありますか? たとえば、ゲーム業界の誰もがユーザーが使用すると想定している RGB 空間はありますか?

または、モニターが使用している色空間を検出する方法はありますか?

CIE XYZ のような標準的な色空間との間で変換できるように知る必要があります。少し違っていてもいいのですが、一般的なハードウェアにできるだけ近づけたいと思っています。

4

1 に答える 1

3

さらに準備をしなくても、OpenGL に送られる色は、ビデオ ガンマ ランプだけが適用された状態で、そのままモニターに送られます。OpenGL のすべてのカラー操作は線形です。

ただし、OpenGL は、色操作を行う前にまず色空間からテクスチャの色を線形化する特別な sRGB テクスチャ フォーマットを提供します。これを補完するために、sRGB フレームバッファ形式もサポートされています。

詳細については、http://www.g-truc.net/post-0263.htmlおよびhttp://www.arcsynthesis.org/gltut/Texturing/Tut16%20Free%20Gamma%20Correction.htmlも参照してください。

もちろん、一部のアプリケーションでは、sRGB は不適切な色空間です (小さすぎて、8 ビットでは忠実度が低すぎます)。そのような状況では、「生の色」の OpenGL 画像とフレームバッファ形式をお勧めし、シェーダーで色変換を実行します。テクスチャ (R=X、G=Y、B=Z と仮定) には、何らかの HDR 画像フォーマット (つまり、1 チャンネルあたり 10 ビット以上) で、コンタクト カラー スペース (XYZ が非常に適しています) を使用します。オフスクリーン フレームバッファ オブジェクトにレンダリングし、最後の後処理ステップで XYZ フレームバッファからスクリーン カラー スペースに変換します。

または、モニターが使用している色空間を検出する方法はありますか?

OpenGL はデバイス管理を扱いません。出力デバイスのカラー プロファイルを決定するには、OS の機能を使用する必要があります。

于 2012-12-26T20:18:18.427 に答える