备忘
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 中对着实现:
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);
References
|