简单滤镜效果
1.大部分滤镜是通过基础的“曝光、对比度、色温等”配合滤镜算法生成的一种色彩模式
2.上述算法在游戏处理中复杂度很高,所以我们一些简单的色彩滤镜效果可以使用lut的方式
LUT What?
LUT(Look Up Table)指的是“颜色查找表”,是原始颜色通过LUT的颜色查找表映射到新的色彩上去。是单独针对色彩空间的一种管理和转换。
与滤镜的一些区别
1.两者虽然都能让图片的色彩发生变化,但是工作原理不同。lut只能针对色彩路径转换,滤镜可以通过算法针对图片进行更多特征性改变。
2.比如一些颗粒化,模糊等不是简单处理像素颜色,所以不能通过lut实现
3.Lut的优点是把复杂的计算公式放入了图片的前期处理,后期使用只需要查找对应颜色即可。
原始lut图片格式
512*16格式贴图
1024*32格式贴图
Lut贴图设置的注意事项
1.取消Mipmap设置
2.Format格式要改为RGB24
3.2D方式 贴图要把 anisolevel 等级设置为0
4.3D方式 打开Read/Write enabled
5.贴图的sRGB关闭,否则线性空间会有问题
Lut在手游中的应用场景
1.屏幕后处理中使用
2.游戏中部分功能的使用,比如眼睛的色彩空间贴图更换
PS中修改贴图
1.本文使用的是 512*16的贴图格式
2.在ps中进行了“色相/饱和度”“曲线”“照片滤镜”“渐变映射”等操作
对游戏屏幕截图进行的PS操作
操作后的原图效果
对lut原图进行操作
1.把上述步骤使用了PS中“色相/饱和度”“曲线”“照片滤镜”“渐变映射” ,在lut原图上进行操作
2.在游戏中使用操作后的贴图
Lut贴图使用方式
1.Lut有2D和3D贴图两种方式使用
2.由于部分机型和unity的版本原因,不支持3DShader贴图,只能使用2D贴图传入方式
3.2D方式兼容性好,但2D方式要消耗更多的GPU算力
2D代码
2D代码参数含义
sampler2D tex 为PS修改后的标准2D贴图
half3 color 为原始采样值
half3 offset 计算的偏移值,
offset 计算方式如下:
Vector3(1f /贴图宽度 , 1f /贴图高度, 贴图高度 - 1f)
3D代码
逻辑代码中生成一张3D贴图
3D shader语句
主要语句如下:
tex3D(_LutTex3D, tex.rgb * _Scale + _Offset).rgb
参数含义如下:
_LutTex3D 为生成的3D贴图
_Scale (贴图宽度 - 1) / (1.0f *贴图宽度 )
_Offset 1.0f / (2.0f *贴图宽度 )