Unity エディターでは、リニアワークフローとガンマワークフローの両方が可能です。リニアワークフローは、色空間の切り替えを備えており、ガンマ色空間で作成された テクスチャ をリニア色空間で正しく精密にレンダリングできます。ガンマ色空間とリニア色空間の詳細については、リニアレンダリングの概要 のドキュメントを参照してください。
詳しい情報は、以下を参照してください。
テクスチャはガンマ色空間に保存される傾向がありますが、シェーダーはリニア色空間を前提としています。そのため、テクスチャがシェーダーでサンプリングされると、ガンマベースの値は不正確な結果となる原因になります。これを解決するために RGB サンプラーを使用するように Unity を設定し、ガンマサンプリングからリニアサンプリングへ切り替えることができます。これにより、正しい色空間でシェーダーの入力と出力がすべて揃ったリニアワークフローを行うことができ、正しい結果が得られます。
ガンマワークフローとリニアワークフローを指定するには、Edit > Project Settings の順に選択し、Player カテゴリを選択し、Other Settings に移動し、Rendering セクションを開き、好みに応じて Color Space を Linear か Gamma に変更します。
リニアワークフローではより精密なレンダリングができますが、ガンマワークフローが必要な場合もあります (例えば、プラットフォームの中には、ハードウェアがガンマ形式しかサポートしていないものもあります)。
これを行うには、Player の設定で Color Space を Gamma に設定します (メニュー: Edit > Project Settings の順に移動し、Player カテゴリーを選択)。このオプションを選択すると、レンダリングパイプラインは、ガンマ色空間で保存されているすべての色とテクスチャを使用します。テクスチャがシェーダーで使用されるときに、ガンマ補正は取り除かれません。
Color Space: Gamma モードで sRGB サンプリングを回避するよう設定できます。これを行うには、テクスチャの Inspector ウインドウ の sRGB (Color Texture) チェックボックスを無効にします。
注意 たとえ値がガンマ空間のものであっても、Unity のすべてのシェーダー計算では、リニア空間の入力であるかのように処理されます。使用可能な最終結果を得るために、エディターはシェーダーの出力をフレームバッファに書き込むときに一致しない形式を処理するよう調整し、最終結果にガンマ補正を適用しません。
リニア色空間を使用すると、ガンマ色空間よりも正確なレンダリングが可能です。
これを行うには、Player 設定(メニュー: Edit > Project Settings > Player カテゴリ)で Color Space を Linear に設定します。
テクスチャがリニア色空間かガンマ色空間で作成されている場合は、リニア色空間を使用できます。リニア色空間シェーダープログラムへのガンマ色空間のテクスチャ入力は、ガンマ補正を削除してシェーダーに渡されます。
色の場合、変換は暗示的に適用されます。なぜなら、Unity エディターが値を浮動小数点に変換してから GPU に定数として渡すためです。テクスチャをサンプリングすると、GPU はガンマ補正を自動的に削除し、その結果をリニア空間に変換します。
これらのデータはシェーダーに渡され、ライティング計算は通常のようにリニア空間で行われます。結果の値をフレームバッファに書き込むときは、直ちにガンマ補正されるか、後でガンマ補正するためにリニア空間に残されます。どちらになるかは現在のレンダリング設定に依存します。例えば、ハイダイナミックレンジ (HDR) では、レンダリングの結果はリニア空間に残され、後でガンマ補正されます。
リニアレンダリングを使用する場合、ライティング方程式への入力値はガンマ空間の入力値とは異なります。つまり、色空間によって結果が異なります。 たとえば、ライトが当たるサーフェスの応答曲線が異なり、イメージエフェクトの挙動が異なります。
距離による減衰と法線ベースの減衰は 2 つの点で異なります。
リニアモードでレンダリングする場合、ガンマ補正を加えるとライトの半径が大きく描画されます。
ライトのエッジがよりはっきりと描画されます。これにより、サーフェス上のライティング強度の減衰をより正確に表現します。
ガンマレンダリングを使用する場合、シェーダーに供給される色とテクスチャにはすでにガンマ補正が適用されています。シェーダーで使用する場合、高輝度の色は、リニアのライティングと比べると、あるべき状態より実際には明るくなります。つまり、リニアでない方法では、ライトの強度が増加すると、サーフェスがますます明るくなるということです。これは、多くの場所でライトが明るくなりすぎる原因となります。また、モデルやシーンに色あせた感じを与えます。リニアレンダリングを使用すると、サーフェスからの応答はライトの強度が増加してもリニアのまま残ります。これによって、より現実的なサーフェスシェーディングとより良いサーフェスの色応答が実現できます。
下の Infinite 3D Head Scan 画像では、人間の頭部モデルに異なる強度のライトを当て、リニアとガンマのライティングを比較しています。
フレームバッファにブレンドする場合、ブレンドはフレームバッファの色空間で行われます。
ガンマ空間レンダリングを使用すると、リニアでない色が混ざり合います。これは、数学的に正しくない色のブレンドで、予期しない結果をもたらす可能性があります。ただし、一部のグラフィックスハードウェアではこれが唯一のブレンド方法です。
リニア空間レンダリングを使用すると、リニア色空間でブレンドが発生します。これは数学的に正しく、正確な結果が得られます。
下の画像は、異なるタイプのブレンドを示しています。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.