备忘
Standard 中的 HDR Color
Custom Shader Lab 的模拟运算
发现参考 unity 的脚本的算法也是不对的,如下代码:
public float exposureValue
{
get {
return m_ExposureValue; }
set
{
if (m_ExposureValue == value)
return;
m_ExposureValue = value;
var newRgbFloat = (Color)color * Mathf.Pow(2f, m_ExposureValue);
m_ColorHdr[(int)RgbaChannel.R] = newRgbFloat.r;
m_ColorHdr[(int)RgbaChannel.G] = newRgbFloat.g;
m_ColorHdr[(int)RgbaChannel.B] = newRgbFloat.b;
}
}
[SerializeField] private float m_ExposureValue;
然后我在 shader lab 中对着实现:
// jave.lin :
// 将 https://github.com/Unity-Technologies/UnityCsReference/blob/61f92bd79ae862c4465d35270f9d1d57befd1761/Editor/Mono/GUI/ColorMutator.cs#L162
// 的处理搬运到 shader lab,学习用
void GetHDRColor(fixed3 colorLDR, half exposure, out float3 colorHDR)
{
colorHDR = colorLDR * pow(2.0, exposure);
}
结果还是有差异的,最后还是给 exposure 添加了 1.90 的系数就差不多了
colorHDR = colorLDR * pow(2.0, exposure * 1.90);