シェーダー数学の場合、リニアRGBがsRGBの色域を保持する必要があるのはなぜですか?


13

sRGBは、多くの場合「リニアRGB」と対比されます。

  • 画像はディスクに保存され、sRGBのディスプレイに渡されます。これは知覚的にほぼ均一な強度です。
  • シェーダー演算は線形RGBで行われ、物理的に強度が均一です。
  • ガンマ補正は、2つの間の変換に適用できます。

現在、sRGBには色域で色域を指定する規格があり、純粋な赤、緑、青、白の正確な位置を示しています。ただし、「リニアRGB」だけに対応する標準はありません。 任意の色度図上の三角形の中から選択するいくつかのよく知られた域がありますが、確かに、直線的であると言われて、ことができます:

RGB色域

実際には、「リニアRGB」と言うときは、「ガンマ補正なしのsRGB」を意味します。(これは、最終的な後処理ステップとしてsRGBガンマ補正を適用し、残りのレンダリングパイプラインの色空間を無視する場合に暗黙的に実行していることです。)

しかし、なぜ その RGB色域は、補間と照明の計算に使用するのに適切な色域なのでしょうか?それはarbitrary意的です。どちらかといえば、内部計算に可能な限り最大の色域を使用し、最後に出力デバイスの色域に合わせて色をクリップまたはスケールしませんか?

RGBライティングはどのような場合でも近似値になるので、どの色域を選択しても問題ありません。ディスプレイがネイティブにサポートする色域に最も近いものを選択することもできますか?それは単なる過失ですか?または、これらの異なる色域での計算では、実際にはまったく同じ結果が得られますか?

回答:


13

リニアRGBについて話すことは、RGBカラースペースの組み込み関数、つまりプライマリ、ホワイトポイント、および色成分の伝達関数について何も伝えないため、避ける必要があります。数年前、それがsRGBであると仮定していたが、今日ではDCI-P3とBT.2020が非常に一般的であるため、除外する必要があります。

レンダリングの理想的な色域は、実世界の参照またはより便利なグラウンドトゥルーススペクトルレンダリングに関するエラーを最小限に抑えるものです。この文からの最初の要点は、さまざまなRGB色空間が同等ではなく、同様の結果を生成しないことです。

同じ基本色で2つのレンダリングを実行するが、1つはsRGB / BT.709でエンコードされ、もう1つはDCI-P3でエンコードされ、2つの結果イメージをたとえばACES2065-1に変換すると考えるかもしれません同じ画像が得られますが、そうではありません。線形代数と行列の性質のためのいくつかの数学演算は、与えられたRGB色空間の原色、つまり色空間に依存しています。異なるRGB色空間で同じ操作を実行すると、CIE XYZ色空間に変換された後、異なる三刺激値が生成されます。たとえば、乗算、除算、および累乗の演算はRGB色空間の原色に依存しますが、加算と減算は依存しません。

RGB色空間とべき乗

この画像は、さまざまな色をそれ自体で異なるRGB色空間に乗算する効果を示しています。結果の色は異なります。さまざまなサンプルが次のように生成されます:3つのランダムなsRGBカラースペース値が選択され、3つの調査されたRGBカラースペースに変換され、指数化され、sRGBカラースペースに変換され、左側のCIE 1931色度図にプロットされ、スウォッチとして表示されます正しい。

Ward and Eydelberg-Vileshin(2002)Langlands and Mansencal(2014)、およびMansencal(2014)が実施したテストと研究により、スペクトル軌跡に最も近い原色、つまりスペクトル的にシャープな原色を含むガマットは、スペクトルグラウンドと比較して誤差を最小化する傾向があることが示されました真実がレンダリングされます。

これは、Andersで調査結果を再検証するために、最近ミツバでレンダリングした画像です。

色空間のレンダリング

これらは、BT.709原色(1行目)、47スペクトルビン(2行目)、BT.2020原色(3行目)、スペクトルマイナスBT.709原色レンダリング残差(4行目)、スペクトルマイナスBTを使用した同じシーンのレンダリングです.2020原色は残差をレンダリングします(5行目)。最後の行は、それぞれBT.709プライマリ、スペクトルレンダリング、およびBT.2020プライマリレンダリングの3つの垂直ストライプで組み立てられた合成画像を示しています。直接照明は、レンダリング間で一致する傾向があります。BT.709およびBT.2020プライマリレンダリングで複数のライトバウンスの効果を示す領域、つまり天井は、特にBT.709プライマリレンダリングで、または特にBTでエネルギーのわずかな損失で、彩度が増加する傾向があります。 .2020レンダリング。可視光源などの外れ値を除くと、スペクトルレンダリングのRMSEは0.0083ですそして0.0116それぞれBT.2020プライマリおよびBT.709の原色のためにレンダリングされます。

今では、常にパフォーマンスが向上するわけではなく、BT.709 / sRGBに偏った例を示すことができるかもしれません。主なポイントは、RGBレンダリングがスペクトルレンダリングと一致せず、シャープな広い色域がより良いパフォーマンスを発揮する傾向があることです。レンダリング色空間の選択に関しては、ポインターの色域を含む広い色域を持つものを選択します。DCI-P3、BT.2020、またはACEScgはそのための優れた候補です。


5

実際には、「リニアRGB」と言うときは、「ガンマ補正なしのsRGB」を意味します。

「sRGB色空間」と「線形化されたsRGB色空間」があり、sRGBの仕様では相互の変換が定義されていると言う方が正しいでしょう。

はい、無限に多くの「線形RGB」色空間があります。しかし、これらの「線形RGB」色空間のすべてに共通することは、それらが線形であることです。つまり、コンポーネントの値を2倍にすると、そのコンポーネントが表す光の強度が2倍になります。それは基本的に「線形」であることを意味します。色の値とその明るい色の結果の強度との間に線形マッピングがあります。

これは重要です。なぜなら、色の値が光の強度に線形にマッピングされていないと、照明の方程式は機能しないからです。しかし、方程式はどの線形色空間を使用するかを気にしません。あなたは1つを選ぶ必要があります。

したがって、線形化されたsRGB色空間は、線形化されたAdobe RGB色空間または線形化されたSWOP CMYK色空間よりも正確ではありません。重要なのは、正確に2つのことです。

  1. 色空間は、値と光強度の線形マッピングを表します。
  2. 選択された色空間は、照明方程式で一貫して使用されます。つまり、照明方程式で使用されるすべての色は、同じ(線形)色空間に由来します。

RGBライティングはどのような場合でも近似値になるので、どの色域を選択しても問題ありません。ディスプレイがネイティブにサポートする色域に最も近いものを選択することもできますか?

それと、最近のsRGB変換はハードウェアに組み込まれていますが、他の色空間変換は頻繁に組み込まれていません。したがって、線形化されたAdobe RGB色空間を使用する場合は、シェーダーで多くの作業を行ってテクセル値を線形化し、それらに対してバイリニア/トリリニア補間を正しく実行する必要があります(線形化後に行う必要があります)それらを照明方程式に。そして、線形化されたAdobe RGBから線形化されたsRGBへの変換を行う必要があります。これにより、表示のためにsRGBフレームバッファーイメージに書き込むことができます。

または、どこでも線形化されたsRGBを使用してパフォーマンスを実現できます。後者は勝つ傾向があります。


この記事についてどう思いますか?私は右のそれを読んでいる場合、それは別の線形色空間での計算があることを示してやる異なる結果になりました。
Maxpm

@Maxpm:それは興味深い。その論文を読んだところ、問題は結局のところ、RGBカラースペースモデルに光が実際には適合しないという事実に帰着するということです。これにより、数学的に同じものであるべき視覚的な結果が異なります。そこで唯一の解決策は、RGBの使用を停止し、スペクトルレンダリングの使用を開始することです。
ニコルボラス

@Maxpmですが、もちろん他のすべてのスペースが異なった後に行われます。しかし、RGBは色ではないので、それがあります。しかし、その後、あなたは正しい質問があります。ゲインは
ますます

0

特にsRGBには2つの側面があります。入力の非HDR画像については、sRGBに圧縮されると想定されるべきであると主張されています(この主張が正確かどうかは別の話です)。したがって、線形演算を実行する前に、sRGBから圧縮解除する必要があります。画像がキャプチャされ、sRGBではない別の表現に圧縮された可能性もあります。その場合、その特定の表現を解凍する必要があります。いずれの場合でも、エンコードは入力画像が決して逃げない特定の色域を意味します(sRGBに格納された画像は通常チャネルごとに8ビットに切り捨てられるため)画像は解凍されます。しかし、最終的には表示を考慮する必要があります。

イメージがあり、それを表示するときが来たら、ディスプレイデバイスが必要とする表現でエンコードします。CRTはsRGBを選択し、LCDはそれをエミュレートしました。そのため、モニター表示用のsRGB圧縮は過去10年間で一般的な選択であり、出力がsRGB色域内に収まるように制限されていました。広い範囲のディスプレイは、その正確な色域に固執する必要はありません。

(人造の画像はsRGBでエンコードされているという主張の根拠は、それらの画像がsRGBディスプレイで作成されたと想定されているためだと思います)

したがって、おそらくsRGBが特にシェーダーの数学入力および画像表示用のハードウェアでサポートされている理由がよくわかります。これは一般的なケースです。さらに、知覚的なカラーバンディングアーティファクトを低減するのに優れたメリットがあるため、8ビットで色を圧縮し、人間にとってもっともらしい外観を維持するのに適した方法です。


0

0..1の範囲外の値を許可する場合、sRGBのかなり限定された原色であっても、人間の視覚範囲全体に対処できます。そのため、浮動小数点のライトカラー値を格納するために、使用するプライマリをあまり重要ではありません。ただし、プライマリの任意の座標がスケーリングの「ピボット」として機能するため、あらゆる種類の乗算数学を実行すると少しファンキーになります。通常、入力データはsRGBでエンコードされ、出力出力はsRGBまたはrec709であるため、sRGBプライマリが一般的に使用されます...ストレージと同じプライマリーが最も簡単なオプションです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.