Unity Shader入门精要之 screen post-processing effect
本篇记录了学习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的更多相关文章
- Unity Shader入门精要学习笔记 - 第9章 更复杂的光照
转载自 冯乐乐的<Unity Shader入门精要> Unity 的渲染路径 在Unity里,渲染路径决定了光照是如何应该到Unity Shader 中的.因此,如果要和光源打交道,我们需 ...
- Unity Shader入门精要学习笔记 - 第8章 透明效果
转载自 冯乐乐的 <Unity Shader入门精要> 透明是游戏中经常要使用的一种效果.在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道.当开启透明混合后,当一个物体被渲染 ...
- Unity Shader入门精要读书笔记(一)序章
本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...
- 【我的书】《Unity Shader入门精要》出版上市
重要的事 先说重要的事,就是我的书籍<Unity Shader入门精要>在经过无数次跳票后,终于出版上市了(泪目-)! 购买传送门: 亚马逊 当当 京东 截止到我写这篇文章的时候,京东是没 ...
- Unity Shader入门精要学习笔记 - 第17章 Unity的表面着色器探秘
转自 冯乐乐的<Unity Shader 入门精要> 2010年的Unity 3 中,Surface Shader 出现了. 表面着色器的一个例子. 我们先做如下准备工作. 1)新建一个场 ...
- Unity Shader入门精要学习笔记 - 第16章 Unity中的渲染优化技术
转自冯乐乐的 <Unity Shader 入门精要> 移动平台的特点 为了尽可能一处那些隐藏的表面,减少overdraw(即一个像素被绘制多次),PowerVR芯片(通常用于ios设备和某 ...
- Unity Shader入门精要学习笔记 - 第15章 使用噪声
转载自 冯乐乐的 <Unity Shader 入门精要> 消融效果 消融效果常见于游戏中的角色死亡.地图烧毁等效果.这这些效果中,消融往往从不同的区域开始,并向看似随机的方向扩张,最后整个 ...
- Unity Shader入门精要学习笔记 - 第14章非真实感渲染
转载自 冯乐乐的 <Unity Shader 入门精要> 尽管游戏渲染一般都是以照相写实主义作为主要目标,但也有许多游戏使用了非真实感渲染(NPR)的方法来渲染游戏画面.非真实感渲染的一个 ...
- Unity Shader入门精要学习笔记 - 第11章 让画面动起来
转自 冯乐乐的 <Unity Shader入门精要> Unity Shader 中的内置变量 动画效果往往都是把时间添加到一些变量的计算中,以便在时间变化时画面也可以随之变化.Unity ...
随机推荐
- Mysql 存储过程中使用多游标
Mysql 存储过程中使用多游标 drop procedure IF EXISTS test_proc_1; create procedure test_proc_1() begin ; ) ; ) ...
- Program terminated with signal 6, Aborted,有可能啥原因呢?
Program terminated with signal 6, Aborted,有可能啥原因呢?其中一种原因就是事实上的OOM(虽然/var/log/message中没有标明操作系统kill了进行 ...
- VS 域名绑定IIs 调试
一排致敬老师傅:https://www.cnblogs.com/woxpp/p/5805624.html 问题: 域名www.jinhuang.com,网站的ip地域跳转出问题,需要测试. ①修改Ho ...
- 使用mac自带终端修改hosts
修改mac host文件绑定域名 打开终端 在终端terminal中输入sudo vi/etc/hosts sudo与vi之间有一个空格 上一步输入完成之后按enter回车键,如果当前用户账号有密码, ...
- Angular 快速入门
Angular 快速入门 AngularJS 官方网址 Angular:https://www.angular.cn/ Angular官网:https://angularjs.org/ Angular ...
- k8s渐进
基本命令介绍(推荐) 1. The Almighty Pause Container 2. What are Kubernetes Pods Anyway? 3.中文版官方翻译[版本2] 提供了很多 ...
- Windows Media Player添加播放插件
- 20165310 NetSec2019 Week6 Exp4 恶意代码分析
20165310 NetSec2019 Week6 Exp4 恶意代码分析 一.实验要求 1.系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间 ...
- Vue父子组件生命周期
转载自:https://blog.csdn.net/a8725585/article/details/79092505 vue父子组件钩子函数触发顺序 beforeMount后mounted前构造子组 ...
- 关于scrapy 使用代理相关问题
在scrapy中使用代理时,我们不能保证每个代理都可用,难免出现代理ip错误的情况,如果代理ip出现错误设置一个请求超时和重新发送这个链接 在yield scrapy.Request时候加上一个参数: ...