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作用 屏幕映射 三角形遍历 两大 ...
随机推荐
- 小心踩雷,一次Java内存泄漏排查实战
1.使用 jstack pid > jstack.log 保存了线程栈的现场,使用 jmap -dump:format=b,file=heap.log pid 保存了堆现场: https://m ...
- [dpdk] dpdk编译成动态库使用 -- PCI port自动发现与pmd动态加载
1. 修改配置文件 .conf, 设置如下变量的值. [root@D129 x86_64-native-linuxapp-gcc]# cat dpdk/x86_64-native-linuxapp- ...
- [性能优化] perf
运行时性能分析工具 wiki:https://en.wikipedia.org/wiki/Perf_(Linux) linux wiki:https://perf.wiki.kernel.org/in ...
- EF-CodeFirst-域模型配置
之前说到CodeFirst会使用默认约定从域模型创建数据库,同时也提供了方法重写这些约定;有两种方法可以实现 使用数据注解属性 使用Fluent API 数据注解属性 数据注释是一种简单的基于属性的配 ...
- LEO原创-FMX之你不知道的ARC
LEO原创13498714 FMX加入了ARC技术,对象创建后不用释放,FMX会帮你释放,是不是这样就不用关心对象的释放了呢,非也! 写简单的代码,这个功能也许很好用,但如果你写的是一个项目,那隐藏的 ...
- 【Python爬虫】Requests库的基本使用
Requests库的基本使用 阅读目录 基本的GET请求 带参数的GET请求 解析Json 获取二进制数据 添加headers 基本的POST请求 response属性 文件上传 获取cookie 会 ...
- 第 6 章 es5 对象创建和继承
目录 第 6 章 Object 一.创建对象 1. 字面量 2. 工厂模式 3. 构造函数 4. 原型 5. 构造+原型 6. 其他 二.Object静态属性 Object.definePropert ...
- 基于jQuery实现的Ajax 验证用户名唯一性
基于jQuery实现的Ajax 验证用户名唯一性 前端jsp页面代码 <tr> <th><span class="requiredField"> ...
- 【Linux】常用指令、ps查看进程、kill杀进程、启动停止tomcat命令、查看日志、查看端口、find查找文件
1.说出 10 个 linux 常用的指令 1) ls 查看目录中的文件 2)cd /home 进入 '/ home' 目录:cd .. 返回上一级目录:cd ../.. 返回上两级目录 3)mkdi ...
- laravel项目ThinkSNS+安装
ThinkSNS+ 是一个使用 Laravel 开发,并且功能繁多且健壮的社交程序.今天我们来跟着ytkah一起来尝鲜一下.首先PHP 版本必须大于 7.1.3,已经下载并安装过 Composer,拥 ...