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作用 屏幕映射 三角形遍历 两大 ...
随机推荐
- spark学习笔记2
SparkContext代表和一个集群的连接 在shell中SparkContext是自动创建好的,就是sc
- ORACLE UNDO
UNDO 数据操纵 数据操纵语言(DML)由以下SQL语句组成: INSERT,DELETE,UPDATE,MERGE DML始终作为事务处理的一部分执行,它可以: 使用Rollback命令执行回退 ...
- LeetCode 559 Maximum Depth of N-ary Tree 解题报告
题目要求 Given a n-ary tree, find its maximum depth. The maximum depth is the number of nodes along the ...
- HBase系列文章(转)
HBase概念学习(一)基本架构 HBase概念学习(二)JAVA API操作概览 HBase概念学习(三)Java API之CRUD(增查改删) HBase概念学习(四)Java API之扫描和过滤 ...
- rar压缩类
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespa ...
- zip压缩类
using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressi ...
- python脚本获取文件的创建于修改日期并计算时间差
由于在计算一个算法的运行时间的时候,需要将文件的创建日期与修改日期读取到,然后计算两者之差,在网上搜索了相关的程序之后,自己又修改了一下,把代码贴在这里,供以后查阅使用,也希望可以帮到其他人. # - ...
- (4.4)mysql备份还原——备份存储容灾基础知识
存储知识 1.为什么需要存储,存储一般解决哪些问题? 容量.速度.易于管理.安全(容灾与备份).可扩展性 2.存储发展历史 [2.1]大型机 [2.2]c/s结构(客户端->服务器) [2.3] ...
- 自定义UIProgressView
自定义CustomporgressView #import <UIKit/UIKit.h> @interface CustomporgressView : UIView @property ...
- KinectFusion测试
谁告诉我说KinectFusion不能直接在Kinect2上直接用.今天心血来潮看了一下Kinect for Windows SDK中的头文件,发现完全可以用啊. 于是用SDK自带的Demo测试了一下 ...