Unity - HDR Color Intensity 在 shader lab 中的模拟

备忘


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);

在这里插入图片描述


References

猜你喜欢

转载自blog.csdn.net/linjf520/article/details/122223197