本篇记录了学习Unity Shader入门精要的屏幕后处理的一些知识点。

OnRenderImage(RenderTexture src, RenderTexture dest)

以上函数是Unity提供的接口,当前渲染得到的图像存储在 src 中,在函数中通过一些操作后将处理后里的图像存储在 dest 中显示到屏幕中。

Graphics.Blit(Texture source, RenderTexture dest, Material mat, int pass)

该函数 source 传给 mat 使用的Shader中名为 _MainTex 的属性, mat 使用的 shader 会对屏幕做各种处理,然后传给 dest, pass 默认为 -1 ,若为 - 1 会依次调用shader中的所有Pass,否则只会调用指定的Pass。

判断当前设备是否支持屏幕特效:

 UnityEngine.SystemInfo.supportsImageEffects

判断当前设备是否支持某种格式的渲染纹理:

 UnityEngine.SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGB32)

使用一个Shader之前需要判断当前设备的显卡是否支持该Shader,判断方式:

shader.isSupported 

1、调整屏幕的亮度(Brightness)、饱和度(Saturation)、对比度(Contrast)

调整亮度 即 将原颜色rgb分量的乘以亮度系数(0-1)

调整饱和度 即 在饱和度为0的颜色值与原颜色之间插值(0-1)

调整对比度 即 在对比度为0的颜色值与原颜色之间插值(0-1)

以下是本人对案例一些片元着色器代码的个人理解,纯属学习之用

 fixed4 frag(v2f i) : SV_Target
{
fixed4 renderTex = tex2D(_MainTex, i.uv); //获取对原屏幕图像的采样结果 // Apply brightness
//调整亮度 即 将原颜色乘以亮度系数(0-1)即可
fixed3 finalColor = renderTex.rgb * _Brightness; // Apply saturation
//亮度值 即 每个颜色分量乘以对应的特定的亮度系数再相加,注意亮度值是一个特定的概念0
//r- 0.2125 g-0.7154 b- 0.0721
fixed luminance = 0.2125 * renderTex.r + 0.7154 * renderTex.g + 0.0721 * renderTex.b;
//创建饱和度为0的颜色值,即rgb三个颜色分量值都为亮度值
fixed3 luminanceColor = fixed3(luminance, luminance, luminance);
//在饱和度为0的颜色值与实际的颜色之间插值(0-1),即可得到希望的饱和度颜色
finalColor = lerp(luminanceColor, finalColor, _Saturation); // Apply contrast
//创建对比度为0的颜色值,即rgb三个颜色分量的值相等
fixed3 avgColor = fixed3(0.5, 0.5, 0.5);
//在对比度为0的颜色值与实际的颜色之间插值(0-1),即可得到希望的对比度颜色
finalColor = lerp(avgColor, finalColor, _Contrast); return fixed4(finalColor, renderTex.a);
}

Unity Shader入门精要之 screen post-processing effect的更多相关文章

  1. Unity Shader入门精要学习笔记 - 第9章 更复杂的光照

    转载自 冯乐乐的<Unity Shader入门精要> Unity 的渲染路径 在Unity里,渲染路径决定了光照是如何应该到Unity Shader 中的.因此,如果要和光源打交道,我们需 ...

  2. Unity Shader入门精要学习笔记 - 第8章 透明效果

    转载自 冯乐乐的 <Unity Shader入门精要> 透明是游戏中经常要使用的一种效果.在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道.当开启透明混合后,当一个物体被渲染 ...

  3. Unity Shader入门精要读书笔记(一)序章

    本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...

  4. 【我的书】《Unity Shader入门精要》出版上市

    重要的事 先说重要的事,就是我的书籍<Unity Shader入门精要>在经过无数次跳票后,终于出版上市了(泪目-)! 购买传送门: 亚马逊 当当 京东 截止到我写这篇文章的时候,京东是没 ...

  5. Unity Shader入门精要学习笔记 - 第17章 Unity的表面着色器探秘

    转自 冯乐乐的<Unity Shader 入门精要> 2010年的Unity 3 中,Surface Shader 出现了. 表面着色器的一个例子. 我们先做如下准备工作. 1)新建一个场 ...

  6. Unity Shader入门精要学习笔记 - 第16章 Unity中的渲染优化技术

    转自冯乐乐的 <Unity Shader 入门精要> 移动平台的特点 为了尽可能一处那些隐藏的表面,减少overdraw(即一个像素被绘制多次),PowerVR芯片(通常用于ios设备和某 ...

  7. Unity Shader入门精要学习笔记 - 第15章 使用噪声

    转载自 冯乐乐的 <Unity Shader 入门精要> 消融效果 消融效果常见于游戏中的角色死亡.地图烧毁等效果.这这些效果中,消融往往从不同的区域开始,并向看似随机的方向扩张,最后整个 ...

  8. Unity Shader入门精要学习笔记 - 第14章非真实感渲染

    转载自 冯乐乐的 <Unity Shader 入门精要> 尽管游戏渲染一般都是以照相写实主义作为主要目标,但也有许多游戏使用了非真实感渲染(NPR)的方法来渲染游戏画面.非真实感渲染的一个 ...

  9. Unity Shader入门精要学习笔记 - 第11章 让画面动起来

    转自 冯乐乐的 <Unity Shader入门精要> Unity Shader 中的内置变量 动画效果往往都是把时间添加到一些变量的计算中,以便在时间变化时画面也可以随之变化.Unity ...

随机推荐

  1. 《论vue在前后端分离项目中的实践之年终总结》

    我是2014年的时候开始了解知道的vue,当时vue还不太成熟,想用但是又怕自己hold不住,况且那时候vue还没有成熟的(路由.验证.ui组件)插件,社区也是不温不火的,再说也没有合适的机遇让我去项 ...

  2. oracle /*+ SYS_DL_CURSOR */ 这个hint

    之前一直都没使用过 /*+ SYS_DL_CURSOR */这个提示,今天下午在排查一个性能问题的时候,发现出问题的session在执行一个带了SYS_DL_CURSOR提示的语句,类似于: 经查这个 ...

  3. dell win 10笔记本关闭多媒体键,启用功能键的快捷方式

    自从使用win 10之后,在使用快捷键方面就没有win 7之前来的顺手,比如F8切换投影仪,F5/F6调试等等.特地搜了下,使用Fn+Esc可以在功能键和多媒体键之间切换.

  4. ldap集成jira

    jira默认支持ldap,通过管理员登录jira 点击 User Management --> User Directories --> Add Directory. 进行ldap配置: ...

  5. Codeforces 808G Anthem of Berland - KMP - 动态规划

    题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个字符串$s$,和一个字符串$t$,$t$只包含小写字母,$s$包含小写字母和通配符'?'.询问$t$可能在$s$中出现最多多少次. 原 ...

  6. [内核驱动] VS2012+WDK 8.0 Minifilter实现指定扩展名文件拒绝访问

    转载:http://blog.csdn.net/C0ldstudy/article/details/51585708 转载:http://blog.csdn.net/zj510/article/det ...

  7. Vue学习【第二篇】:ES6简单介绍

    ECMAScript 6简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript ...

  8. smbclient和mount -t cifs共享win的共享文件夹? autocad小记

    插入U盘没有反应? 首先,打开设备管理器, 发现usb大容量设备为黄色感叹号 其次, 将这个usb大容量设备先卸载, 然后点击"自动扫描硬件变化",就可以重新自动安装usb的驱动. ...

  9. 论文阅读: End-to-end Learning of Action Detection from Frame Glimpses in Videos

      End-to-End Learning of Action Detection from Frame Glimpses in Videos  CVPR 2016  Motivation:    本 ...

  10. OpenCV学习一《Linux下安装OpenCV》

    第一步:安装源码前先安装好需要的第三⽅方环境 需要的编译环境■ [compiler] sudo apt-get install build-essential #  注释说明 64位ubuntu在安装 ...