【Unity3D Shader】学习笔记-图片滤镜①

简介: 效果和上面的比较相似,Photoshop CS图像黑白调整功能的计算公式为: gray= (max - mid) * ratio_max + (mid - min) * ratio_max_mid + min 公式中:gray为像素灰度值,max、mid和min分别为图像像素R、G、B分量颜色的最大值、中间值和最小值,ratio_max为max所代表的分量颜色(单色)比率,ratio_max_mid则为max与mid两种分量颜色所形成的复色比率。默认的单色及复色比率为:

【Unity3D Shader】学习笔记-图片滤镜①


前言


   本篇开始连续的几篇文章主要介绍各种图片滤镜效果,本篇包括图片置灰,黑白图,发黄的老照片效果。

[声明:本笔记系列文章的图片资源都源自百度图片搜索,如有问题联系我]

一、图片置灰


微信图片_20220424222524.png


(左侧置灰,右侧对比)


   通过将原图RGB颜色 点乘 心理学置灰值(0.299,0.587,0.114)即可得到灰度图片。


fixed4 frag (v2f i) : SV_Target
{
    fixed4 col = tex2D(_MainTex, i.uv);
    // 这个是一个常量 心理学置灰值
    fixed3 gray_color = fixed3(0.299, 0.587, 0.114);
    fixed gray = dot(col.rgb , gray_color);
    fixed4 final_col = fixed4(gray, gray, gray, col.a);
    return final_col;
}


二、PS中的纯黑白算法


微信图片_20220424222528.png


   效果和上面的比较相似,Photoshop CS图像黑白调整功能的计算公式为:


       gray= (max - mid) * ratio_max + (mid - min) * ratio_max_mid + min


   公式中:gray为像素灰度值,max、mid和min分别为图像像素R、G、B分量颜色的最大值、中间值和最小值,ratio_max为max所代表的分量颜色(单色)比率,ratio_max_mid则为max与mid两种分量颜色所形成的复色比率。


默认的单色及复色比率为:


Color_Ratio_Red =0.4;  

  Color_Ratio_Yellow =0.6;

   Color_Ratio_Green =0.4;  

Color_Ratio_Cyan =0.6;

                                         Color_Ratio_Blue =0.2;

       Color_Ratio_Magenta =0.8;  


fixed4 black_white_tex(float2 uv)
{
    #define RED_COLOR_RATIO 0.4
    #define GREEN_COLOR_RATIO 0.4
    #define BLUE_COLOR_RATIO 0.2
    fixed4 main_col = tex2D(_MainTex, uv);
    // 黑白的公式 三通道的最大值max,最小值min,以及中间值mid
    //gray= (max - mid) * ratio_max + (mid - min) * ratio_max_mid + min
    fixed max_value = max(main_col.r, max(main_col.g, main_col.b));
    fixed min_value = min(main_col.r, min(main_col.g, main_col.b));
    // 通过rgb相加减去最大最小值就可以得到中间值
    fixed mid_value = main_col.r+main_col.g+main_col.b - max_value - min_value; 
    // if min_value == r 取 0.4, else if min_value == g 取 0.2, else 取 0.4
    fixed ratio_max_mid = lerp(GREEN_COLOR_RATIO, 
                        lerp(BLUE_COLOR_RATIO, RED_COLOR_RATIO, step(main_col.b, min_value)), 
                        step(main_col.g, min_value));
    // if max_value == r 取 0.4, else if max_value == g 取 0.4, else 取 0.2
    fixed ratio_max = lerp(RED_COLOR_RATIO, 
                        lerp(GREEN_COLOR_RATIO, BLUE_COLOR_RATIO, step(main_col.b, max_value)), 
                        step(main_col.g, max_value));
    fixed temp = (max_value - mid_value) * ratio_max + (mid_value - min_value) * ratio_max_mid + min_value;
    fixed3 final_col = fixed3(temp, temp, temp);
    return fixed4(final_col, main_col.a);
}


三、发黄的老照片


微信图片_20220424222532.png


   公式比较简单,通过对原图的RGB的各个通道进行调色后呈现发黄的效果:


new_r=0.393*R+0.769*G+0.189*B;

new_g=0.349*R+0.686*G+0.168*B;

new_b=0.272*R+0.534*G+0.131*B;


fixed4 old_pic(fixed2 uv)
{
    fixed4 main_col = tex2D(_MainTex, uv);
    fixed r = 0.393 * main_col.r  + 0.769*main_col.g + 0.189 * main_col.b;
    fixed g = 0.349 * main_col.r  + 0.686*main_col.g + 0.168 * main_col.b;
    fixed b = 0.272 * main_col.r  + 0.534*main_col.g + 0.131 * main_col.b;
    fixed3 final_col = fixed3(r, g, b);
    return fixed4(final_col, main_col.a);
}
相关文章
|
3月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
244 0
|
3月前
|
缓存 图形学
Unity3D学习笔记12——渲染纹理
Unity3D学习笔记12——渲染纹理
39 2
|
3月前
|
API C# 图形学
Unity3D学习笔记9——加载纹理
Unity3D学习笔记9——加载纹理
39 2
|
3月前
|
API 图形学 异构计算
Unity3D学习笔记7——GPU实例化(2)
Unity3D学习笔记7——GPU实例化(2)
24 2
|
3月前
|
存储 缓存 图形学
Unity3D学习笔记11——后处理
Unity3D学习笔记11——后处理
56 1
|
3月前
|
测试技术 C# 图形学
Unity3D学习笔记10——纹理数组
Unity3D学习笔记10——纹理数组
50 0
|
3月前
|
图形学 异构计算
Unity3D学习笔记8——GPU实例化(3)
Unity3D学习笔记8——GPU实例化(3)
41 0
|
3月前
|
存储 API 图形学
Unity3D学习笔记6——GPU实例化(1)
Unity3D学习笔记6——GPU实例化(1)
53 0
|
3月前
|
API 图形学 索引
Unity3D学习笔记5——创建子Mesh
Unity3D学习笔记5——创建子Mesh
28 0
|
3月前
|
API C# 图形学
Unity3D学习笔记4——创建Mesh高级接口
Unity3D学习笔记4——创建Mesh高级接口
39 0