ガンマ補正
参考:
概要
参考:
ガンマが分かりにくいから調べてまとめてみた | Hiroki Kamada
ディスプレイの調整
参考:
曲線美が色再現性の決め手になる?液晶ディスプレイのガンマを知ろう | EIZO株式会社
sRGB
参考:
「sRGB のガンマは 2.2」ってのは本当? | イメージスキャナ開発室
ワークフロー
参考:
リニアワークフローとガンマ補正について | Blender Cycles memo
カラーマネージメント/シーンリニアワークフローを Blender で学ぶ | CGcompo
計算
近似
最も簡単な近似は、べき乗を使うことである。但し、輝度が小さく、画像が暗い場合には誤差が生じるので注意する。
近似的にガンマ補正を適用する。
rgb_value = pow(linear_value, 1.0 / 2.2)
近似的にリニア値を求める
linear_value = pow(rgb_value, 2.2)
コード:
Gamma Correction.hlsl – VoidXH/Cinema-Shader-Pack – GitHub
参考:
ガンマとは ? | Shade3D Knowledge Base
ガンマ 2.2 と sRGB の違い | Shade3D Knowledge Base
線形 RGB 値へのガンマ補正の適用 | MathWorks
sRGB Approximations for HLSL | Chilliant
HDR
参考:
よくわかる、HDR 徹底解説!ガンマカーブの違い | EIZO 株式会社
HDR テクスチャから SDR テクスチャへのトーンマップ | 下町のナポレオン
OpenGL
float Convert_sRGB_FromLinear (float linear_value)
{
return linear_value <= 0.0031308f ?
linear_value * 12.92f :
powf (linear_value, 1.0f / 2.4f) * 1.055f - 0.055f;
}
float Convert_sRGB_ToLinear (float rgb_value)
{
return rgb_value <= 0.04045f ?
rgb_value / 12.92f :
powf ((rgb_value + 0.055f) / 1.055f, 2.4f);
}
Code language: Arduino (arduino)
(出典:Stack Overflow )
参考:
Gamma Correction | LearnOpenGL
What is the correct gamma correction function? – Stack Overflow
HLSL
vec3 LinearToSRGB(vec3 c)
{
vec3 low = c * 12.92;
vec3 high = (pow(c, 1.0 / 2.4) * 1.055) - 0.055;
return (c <= 0.0031308) ? low : high;
}
vec3 SRGBToLinear(vec3 c)
{
vec3 low = c / 12.92;
vec3 high = pow((c + 0.055) / 1.055, 2.4);
return (c <= 0.04045) ? low : high;
}
Code language: Arduino (arduino)
(出典:LIGHT11 )
コード:
SRGBToLinear – Colors.hlsl at 32c3155 · Unity-Technologies/PostProcessing – GitHub
LinearToSRGB – Colors.hlsl at 32c3155 · Unity-Technologies/PostProcessing – GitHub
参考: