赞
踩
(1)HDR的格式: 在unity中是 RGBA 每个通道16位
非HDR: 每个通道8位
(2)逐步执行DrawCall时,你会注意到场景看起来比最终结果要暗。发生这种情况是因为这些步骤存储在HDR纹理中。由于线性颜色数据按原样显示,因此看起来很暗,它错误地解释为sRGB。
(3)Luminance函数: 客观测量发光体的亮度,是个客观值
函数: luminance = 0.2125 * Red + 0.7154 * Green + 0.0721 * Blue;
代码和逻辑真的懒得粘贴了,工程中都有
(3)bloom 中控制阈值threshold = 1: 即 只有颜色值大于1的才会被处理(HDR)
用ToneMapping 将HDR 最后转换到 LDR 显示
最后的关系 : Bloom 作用HDR 的结果 , 然后 被 ToneMapping 转化为LDR
所以 Bloom 和 HDR , ToneMapping 三者的关系非常密切
最后附上详细解释:
Bloom解释
ToneMapping解释
最后附上git工程:git工程链接
(4)颜色分级:
Color Grading
调整图像颜色共3步:
(1) 颜色校正: 目的是 使图像与观察场景时的图像相匹配
(2)颜色分级: 对最终图像进行颜色和亮度的改变和矫正 ,可以理解为增加滤镜
以上两步可以合并为一个颜色分级的步骤
(3)色调映射: 将HDR颜色映射到显示范围。
仅应用色调映射的图像 往往不那么丰富多彩, 除非图像非常明亮
ACES可以稍微增加深色的对比度,但是不能替代颜色分级。
关于在“颜色分级中的详细步骤:
(1)后曝光: 让颜色整体缩放
// 后曝光
float3 ColorGradePostExposure(float3 color)
{
return color * _ColorAdjustments.x;
}
(2)对比度 : 用的是中间灰度值: 0.42来计算
对比度高: 黑的会越黑,白的会越白
对比度低: 黑 和 白 向中间的灰色靠拢
// 对比度: 最亮的白 和 最黑的黑的 对比(对比度高,可以提高画质的明亮清晰程度; 低对比度灰蒙蒙)
// ACEScc_MIDGRAY= 0.4135 表示中间灰度值
float3 ColorGradeingContrast(float3 color)
{
color = LinearToLogC(color);
color = (color - ACEScc_MIDGRAY) * _ColorAdjustments.y + ACEScc_MIDGRAY;
return LogCToLinear(color);
}
(3)滤镜: 直接乘以颜色值进行过滤
// 滤镜
float3 ColorGradeColorFilter(float3 color)
{
return color * _ColorFilterId.rgb;
}
(4)色调偏移: ColorGradeing
float3 ColorGradingHueShift(float3 color)
{
color = RgbToHsv(color);
float hue = color.x + _ColorAdjustments.x;
// 将色调限制在(0,1) 小于0: hue+1; 大于1:hue-1
color.x = RotateHue(hue,0.0,1.0);
return HsvToRgb(color);
}
色调偏移是在HSV空间中计算的:
(5)饱和度:
// 饱和度:
float3 ColorGradingSaturation(float3 color)
{
//用Luminance 获取亮度, 然后参与计算
float luminance = Luminance(color);
return (color - luminance) * _ColorAdjustments.w + luminance;
}
饱和度是指色彩的鲜艳程度,也称色彩的纯度。
饱和度取决于该色中含色成分和消色成分(灰色)的比例。
含色成分越大,饱和度越大;消色成分越大,饱和度越小
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。