Unity shader学习之屏幕后期效果之调整屏幕亮度,饱和度,对比度
Unity的屏幕后期处理效果,使用MonoBehaviour.OnRenderImage来实现。
转载请注明出处:http://www.cnblogs.com/jietian331/p/7228063.html
如代码如下:
基类:
using UnityEngine; [RequireComponent(typeof(Camera))]
public abstract class PostEffectRenderer : GameBehaviour
{
protected abstract string ShaderName { get; } Material m_mat; void Start()
{
if (!SystemInfo.supportsImageEffects)
NotSupport();
} protected virtual void OnRenderImage(RenderTexture src, RenderTexture dest)
{
Graphics.Blit(src, dest, Mat);
} protected void NotSupport()
{
enabled = false;
} protected Material Mat
{
get
{
if (!m_mat)
{
Shader shader = Shader.Find(ShaderName);
if (shader != null && shader.isSupported)
m_mat = new Material(shader);
else
NotSupport();
}
return m_mat;
}
}
}
PostEffectRenderer
子类实现 :
using UnityEngine; public class ScreencolorsAdjuster : PostEffectRenderer
{
[SerializeField]
float m_brightness = ;
[SerializeField]
float m_saturation = ;
[SerializeField]
float m_contrast = ; protected override void OnRenderImage(RenderTexture src, RenderTexture dest)
{
base.Mat.SetFloat("_Brightness", m_brightness);
base.Mat.SetFloat("_Saturation", m_saturation);
base.Mat.SetFloat("_Contrast", m_contrast);
base.OnRenderImage(src, dest);
} protected override string ShaderName
{
get { return "Custom/Screencolors Adjuster"; }
}
}
ScreencolorsAdjuster
shader如下:
Shader "Custom/Screencolors Adjuster"
{
Properties
{
_MainTex("Main Texture", 2D) = "white" {}
_Brightness("Brightness", Float) =
_Saturation("Saturation", Float) =
_Contrast("Contrast", Float) =
} SubShader
{
Pass
{
ZTest Always
ZWrite Off
Cull Off CGPROGRAM
#pragma vertex vert
#pragma fragment frag sampler2D _MainTex;
float _Brightness;
float _Saturation;
float _Contrast; struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
}; struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
}; v2f vert(appdata v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.uv; return o;
} fixed4 frag(v2f i) : SV_TARGET
{
fixed4 tex = tex2D(_MainTex, i.uv); fixed3 finalCol = tex.rgb * _Brightness; fixed luminance = dot(fixed3(0.2125, 0.7154, 0.0721), tex.rgb);
fixed3 luminanceCol = fixed3(luminance, luminance, luminance);
finalCol = lerp(finalCol, luminanceCol, _Saturation); fixed3 avgCol = fixed3(0.5, 0.5, 0.5);
finalCol = lerp(finalCol, avgCol, _Contrast); return fixed4(finalCol, tex.a);
} ENDCG
}
} Fallback Off
}
ScreencolorsAdjuster脚本挂在摄像机上:

调整参数,效果如下:

Unity shader学习之屏幕后期效果之调整屏幕亮度,饱和度,对比度的更多相关文章
- Opencv学习笔记4:Opencv处理调整图片亮度和对比度
一.理论基础 在数学中我们学过线性理论,在图像亮度和对比度调节中同样适用,看下面这个公式: 在图像像素中其中: 参数f(x)表示源图像像素. 参数g(x) 表示输出图像像素. 参数a(需要满足a> ...
- Unity Shader入门精要学习笔记 - 第12章 屏幕后处理效果
建立一个基本的屏幕后处理脚本系统 屏幕后处理,顾名思义,通常指的是在渲染完整个场景得到屏幕图像后,再对这个图像进行一系列操作,实现各种屏幕特效.使用这种技术,可以为游戏画面添加更多艺术效果,例如景深. ...
- Unity Shader 学习之旅
Unity Shader 学习之旅 unityshader图形图像 纸上学来终觉浅,绝知此事要躬行 美丽的梦和美丽的诗一样 都是可遇而不可求的——席慕蓉 一.渲染流水线 示例图 Tips:什么是 GP ...
- Unity Shader 学习之旅之SurfaceShader
Unity Shader 学习之旅之SurfaceShader unity shader 图形图像 如果大地的每个角落都充满了光明 谁还需要星星,谁还会 在夜里凝望 寻找遥远的安慰——江河 官方文档 ...
- Unity shader学习之屏幕后期处理效果之高斯模糊
高斯模糊,见 百度百科. 也使用卷积来实现,每个卷积元素的公式为: 其中б是标准方差,一般取值为1. x和y分别对应当前位置到卷积中心的整数距离. 由于需要对高斯核中的权重进行归一化,即使所有权重相加 ...
- 第四章 开始Unity Shader学习之旅(1)
1. 一个最简单的顶点/片元着色器 现在,我们正式开始学习如何编写Unity Shader,更准确的说是,学习如何编写顶点/片元着色器 2.顶点/片元着色器的基本结构 我们在以前已经讲过了Unity ...
- Unity Shader入门精要学习笔记 - 第5章 开始 Unity Shader 学习之旅
一个顶点/片元 着色器的结构大概如下: Shader "MyShaderName" { Properties { //属性 } SubShader { //针对显卡A的SubSha ...
- 第四章 开始Unity Shader学习之旅(2)
目录 1. 强大的援手:Unity提供的内置文件和变量 1.1 内置的包含文件 1.2 内置的变量 2. Unity提供的Cg/HLSL语义 2.1 什么是语义 2.2 Unity支持的语义 2.3 ...
- Unity Shader学习笔记-1
本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大 ...
随机推荐
- 转:AOP与JAVA动态代理
原文链接:AOP与JAVA动态代理 1.AOP的各种实现 AOP就是面向切面编程,我们可以从以下几个层面来实现AOP 在编译期修改源代码 在运行期字节码加载前修改字节码 在运行期字节码加载后动态创建代 ...
- omitting directory何意
使用cp命令拷贝目录时,若该目录下有子目录 需加参数 cp -r 加目标目录到路径下
- 预备作业2 :学习基础和C语言基础调查
剑网三毒经pk心得: 看完标题的你真的没有进错,这里是博客园. 想到写这篇文章的原因一部分是自己的确没啥技能比超过90%以上的人还好,还有一部分是受到了作业提示的指引...... 如果你有类似的技能获 ...
- 牛客Wannafly9E 组一组 差分约束
正解:差分约束 解题报告: 传送门! 首先肯定要想到把他们分开来考虑,就是说,把数二进制拆分掉,这样就可以分开考虑了嘛 然后考虑设f[i]:前i个数中的1的个数 然后就可以得到一堆差分约束的式子 然后 ...
- 【数据可视化-pyecharts】pyecharts快速入门
pyecharts快速开始 首先开始来绘制你的第一个图表 from pyecharts import Bar bar = Bar("我的第一个图表", "这里是副标题&q ...
- 【Python基础】安装python第三方库
pip命令行安装(推荐) 打开cmd命令行 安装需要的第三方库如:pip install numpy 在安装python的相关模块和库时,我们一般使用“pip install 模块名”或者“pyth ...
- net use共享文件访问
NET USE "\\xxx.xxx.xxx.xxx\vms\Application Files" "password123" /USER:"ap\1 ...
- Ubuntu上qt环境的构建
写在前面.......这个教程好像比较早一点了,现在介绍一个新的思路: 整体参见如下步骤(for zedboard): 1.首先下载qt-opensource-linux.run文件,然后跟在Wind ...
- IQ调制原理
现代通信中,IQ调制基本上属于是标准配置,因为利用IQ调制可以做出所有的调制方式. 但是IQ调制到底是怎么工作的,为什么需要星座映射,成型滤波又是用来干嘛的.这个呢,讲通信原理的时候倒是都会泛泛的提到 ...
- centos安装Django之三:安装python
这是centos安装Django系列第三篇,安装python.centos系统已经自带了python2.6,但是它被系统很多程序所依赖,不建议删除.我们可以使用以下命令来查看我们使用的Python版本 ...