58.屏幕后期处理效果-效果实现-亮度饱和度对比度-基本原理
58.1 知识点
颜色亮度的基本原理
改变图像颜色的亮度,可以通过对图像的每个像素进行加法(或减法,即加负数)或乘法(或除法,即乘小数)运算。
- 增加亮度:增加像素的 RGB 值。
- 减小亮度:减少像素的 RGB 值。
在 Shader 中的实现方式:
- 定义一个控制亮度的
float
类型变量。 - 使用颜色的 RGB 乘以该变量或加上该变量。
通常采用乘法形式,具体公式为:最终颜色 = 原始颜色 * 亮度变量
亮度变量的取值效果:
- 亮度变量 > 1:图像变亮。
- 亮度变量 < 1:图像变暗。
- 亮度变量 = 1:图像保持不变。
颜色饱和度的基本原理
改变图像颜色的饱和度,可以通过对每个像素的颜色值相对于灰度颜色进行插值运算实现,基本步骤如下:
计算灰度值(亮度)
使用图像的 RGB 值计算一个平均值,得到灰度值。
人眼对不同颜色的敏感度不同,因此不直接使用算术平均公式
(R + G + B) / 3
,而采用 加权平均法 来计算灰度值。常用的权重基于 Rec. 709 标准(高清电视和数字图像格式常用的标准):
- 红色通道(R)的权重:
0.2126
- 绿色通道(G)的权重:
0.7152
- 蓝色通道(B)的权重:
0.0722
- 红色通道(R)的权重:
这些权重反映了人眼对绿色最敏感、对蓝色最不敏感的特点。
加权平均法公式: 灰度值(亮度)L = 0.2126 * R + 0.7152 * G + 0.0722 * B
生成灰度颜色
- 利用第一步计算出的灰度值 L,生成对应的灰度颜色:灰度颜色 = (L, L, L)
插值计算
使用插值函数
lerp
,在灰度颜色和原始颜色之间进行插值运算。插值系数是用于控制饱和度的float
类型变量计算公式:最终颜色 = lerp(灰度颜色, 原始颜色, 饱和度变量)
插值计算原理:最终颜色 = 灰度颜色 + (原始颜色 − 灰度颜色) * 饱和度变量
饱和度变量的取值效果:
- 饱和度变量 = 0:结果为灰度颜色。
- 饱和度变量 = 1:保持原始颜色不变。
- 饱和度变量在 0~1 之间:灰度颜色和原始颜色的混合。
- 饱和度变量 > 1:RGB 值超出原始范围,使颜色更为饱和,产生增强效果。
颜色对比度的基本原理
调整图像颜色的对比度,可以通过对每个像素的颜色值相对于 中性灰色 进行插值运算实现,具体步骤如下:
声明中性灰色变量
- 定义中性灰色作为参考基准:中性灰色 = (0.5, 0.5, 0.5)
进行插值运算
- 在中性灰色和原始颜色之间使用插值函数
lerp
进行计算: - 最终颜色 = lerp(中性灰色, 原始颜色, 对比度变量)
- 对比度变量的取值效果
- 对比度变量 = 0:
图像对比度降到最低,所有像素变为中性灰色。 - 对比度变量 = 1:
图像保持原始颜色,对比度不变。 - 对比度变量在 0~1 之间:
图像亮度差异减少,颜色变得更平淡。 - 对比度变量 > 1:
RGB 值超出原始范围,图像亮部更亮、暗部更暗,对比度增强。
- 对比度变量 = 0:
总结
亮度计算规则
对图像的每个像素颜色进行乘法运算:
最终颜色 = 原始颜色 * 亮度变量。饱和度计算规则
相对于灰度颜色进行插值:- 计算灰度值(亮度)L = 0.2126 * R + 0.7152 * G + 0.0722 * B
- 生成灰度颜色:灰度颜色 = (L, L, L)
- 最终颜色 = lerp(灰度颜色, 原始颜色, 饱和度变量)。
对比度计算规则
相对于中性灰色进行插值:- 声明中性灰颜色 = (0.5, 0.5, 0.5)
- 最终颜色 = lerp(中性灰色, 原始颜色, 对比度变量)。
注意:亮度、饱和度和对比度的计算规则是基于视觉科学、色彩理论和图像处理技术逐步发展起来的。这些规则并非由某个人发明,而是通过多年的研究与实践总结出来的。它们被广泛应用于各种图像处理工具和计算机图形学中,用于图像调整和优化。
58.2 知识点代码
Lesson58_屏幕后期处理效果_效果实现_亮度饱和度对比度_基本原理.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson58_屏幕后期处理效果_效果实现_亮度饱和度对比度_基本原理 : MonoBehaviour
{
void Start()
{
#region 知识点一 颜色亮度的 基本原理
//想要改变图像颜色的亮度
//只需要对图像的每个像素进行加法(减法-加负数)或乘法(除法-乘小数)运算即可实现
//增加亮度就是 增加像素的RGB值
//减小亮度则是 减少像素的RGB值
//也就是说我们只需要在Shader当中加入一个控制亮度的float类型的变量
//然后用颜色的RGB乘以该变量或者加上该变量即可
//一般我们会采用乘法的形式
//即:
//最终颜色 = 原始颜色 * 亮度变量
//亮度变量 >1 时,图像变亮
//亮度变量 <1 时,图像变暗
//亮度变量 =1 时,图像不变
#endregion
#region 知识点二 颜色饱和度的 基本原理
//想要改变图像颜色的饱和度
//只需要对图像的每个像素的颜色值 相对于灰度颜色进行插值来实现
//基本原理为以下三步:
//1.计算灰度值(亮度)
// 利用图像颜色RGB计算一个平均值,得到一个灰度值
// 但是由于人眼对不同颜色的敏感度不同,所以在计算平均值时不会直接使用算数平均(R+G+B)/3
// 在图形学中我们一般使用加权平均法来计算灰度值
// 所谓加权平均法就是通过对不同数据分配不同权重,计算出更符合实际情况的平均值
// 常用的权重基于Rec. 709标准(高清电视和许多数字图像格式中常用的标准)
// R 红色通道的权重:0.2126
// G 绿色通道的权重:0.7152
// B 蓝色通道的权重:0.0722
// 这些权重反映了人眼对绿色最敏感,对蓝色最不敏感
// 加权平均法公式:
// 灰度值(亮度)L = 0.2126*R + 0.7152*G + 0.0722*B
//2.生成灰度颜色
// 利用第一步中计算出来的灰度值,生成一个灰度颜色
// 灰度颜色 = (L, L, L)
//3.插值计算
// 使用插值函数lerp,在灰度颜色和原始颜色之间进行插值运算
// 插值系数就是用于控制饱和度的float类型的变量
// 公式如下:
// 最终颜色 = lerp( 灰度颜色, 原始颜色, 饱和度变量 )
// lerp计算原理:最终颜色 = 灰度颜色 + (原始颜色 − 灰度颜色)*饱和度变量
// 饱和度变量 = 0时,结果为灰度颜色
// 饱和度变量 = 1时,保持原始颜色不变
// 饱和度变量 = 0~1之间时,灰度颜色和原始颜色的混合
// 饱和度变量 > 1时,颜色的RGB值超出原始范围,从而使颜色看起来更饱和
#endregion
#region 知识点三 颜色对比度的 基本原理
//想要改变图像颜色的对比度
//只需要对图像的每个像素的颜色值 相对于中性灰色进行插值来实现
//基本原理为以下两步:
//1.声明中性灰色变量,即RGB都为0.5的颜色变量
// 中性灰颜色 = (0.5,0.5,0.5)
//2.在中性灰色和原始颜色之间进行插值运算
// 最终颜色 = lerp( 中性灰色, 原始颜色, 对比度变量 )
// 对比度变量 = 0时,此时对比度降到最低,变为中性灰色
// 对比度变量 = 1时,保持原始颜色不变
// 对比度变量 = 0~1之间时,降低对比度效果,图像的亮度差异减少,使图像颜色看起来更平淡
// 对比度变量 > 1时,颜色的RGB值超出原始范围,从而使颜色亮部更亮,暗部更暗,从而增加对比度
#endregion
#region 总结
//1.亮度计算规则
// 对图像的每个像素颜色进行乘法运算
// 最终颜色 = 原始颜色 * 亮度变量
//2.饱和度计算规则
// 相对于灰度颜色进行插值
// 第一步:灰度值(亮度)L = 0.2126*R + 0.7152*G + 0.0722*B
// 第二步:灰度颜色 = (L, L, L)
// 第三步:最终颜色 = lerp( 灰度颜色, 原始颜色, 饱和度变量 )
//3.对比度计算规则
// 相对于中性灰色进行插值
// 第一步:中性灰颜色 = (0.5,0.5,0.5)
// 第二步:最终颜色 = lerp( 中性灰色, 原始颜色, 对比度变量 )
//注意:
//亮度、饱和度和对比度的计算规则是在视觉科学、色彩理论和图像处理技术的基础上逐步发展起来的
//这些规则不是由某个人发明的,而是通过多年的研究和实践得出的
//这些计算方法被广泛应用于各种图像处理工具和计算机图形学中,用于实现图像的调整和优化
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com