Unity5.0 Shader 极简入门 (五)
来源:互联网 发布:广告公司免费记账软件 编辑:程序博客网 时间:2024/06/06 03:13
屏幕叠贴图特效
准备文件:
一个名为asd的贴图一张,
一个C#特效脚本,
一个简单的特效shader。
C#代码,挂给摄影机的
using UnityEngine;using System.Collections;public class E_Screen_001 : MonoBehaviour { private Material tempMat; private Texture2D ttt; public Shader eee; Material TeXiaoMat {//先检测有木有生成这个屏幕特效的材质 get { //如果没有生成,就先生一个 if (tempMat == null) { //生一个临时材质 tempMat = new Material(eee); //生完不用拿出来看,隐藏在内存里面就行 tempMat.hideFlags = HideFlags.HideAndDontSave; } //返回临时材质,以后调用材质就是指的这个临时材质了 return tempMat; } } // Use this for initialization void Start () { //初始化时候先载入我们需要的贴图 记住要作为 Texture2D 类型载入,把贴图放在resources文件夹里 ttt = Resources.Load ("asd") as Texture2D; //将图像贴给材质球的_Tex1通道。 可以在shader中找到这个通道,注意千万不要贴在 _MainTex 通道等专有名词通道上,否则会被覆盖 TeXiaoMat.SetTexture("_Tex1",ttt); //做一个判断,屏幕特效是否被支持(固定用法,死记硬背) if (!SystemInfo.supportsImageEffects) { enabled = false; return; } //做一个判断,特效shader是否被支持(固定用法,死记硬背) if (!eee && !eee.isSupported) { enabled = false; } } //屏幕渲染 yuantu可以是Texture类型,也可以是RenderTexture,类型。 void OnRenderImage(Texture yuantu, RenderTexture xiaoguotu) { //如果特效材质不等于没有(就是正常存在的意思) if (TeXiaoMat != null) { // 输入的原始屏幕图像yuantu,使用TeXiaoMat材质加工完成后,输出xiaoguotu到屏幕 Graphics.Blit(yuantu, xiaoguotu, TeXiaoMat); } else { //如果没有texiao材质,就什么样来的什么样送出去。 Graphics.Blit(yuantu, xiaoguotu); } } //如果不可见,则销毁临时材质。 void OnDisable() { if (tempMat) DestroyImmediate(tempMat); }}
shader代码:
Shader "LiShader/ScreenEffect_Tex"{ Properties { _MainTex ("MainTex", 2D) = "white" {} //记住这个名字 _Tex _Tex1("Texture1", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; uniform sampler2D _MainTex; uniform float4 _MainTex_ST; //在这里声明一下,C#就可以往shader里面传贴图了 uniform sampler2D _Tex1; v2f vert (appdata v) { v2f o; o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } fixed4 frag (v2f i) : SV_Target { //将屏幕特效与贴图进行乘法融合 fixed4 col = tex2D(_MainTex, i.uv) * tex2D(_Tex1, i.uv); return col; } ENDCG } }}
然后把C#挂给摄影机,把shader仍在Eee一栏里面。
这时候运行游戏吧,就可以看到效果了
阅读全文
0 0
- Unity5.0 Shader 极简入门 (五)
- Unity5.0 Shader 极简入门(一)
- Unity5.0 Shader 极简入门 (二)
- Unity5.0 Shader 极简入门 (四)
- Unity5.0内置Shader解析
- 五、WebGL入门,shader剖析
- (五)Unity5.0新特性------unity中编写脚本
- Unity5 Compute && Geometry Shader
- Unity5 shader with lightmap
- Unity5中新的Shader体系简析
- Unity5 (5.0-5.2) Shader编译机制初探
- Unity Shader入门精要 阅读笔记五
- Shader 入门(一)
- Shader 入门(二)
- Unity5 (5.0-5.2) Shader编译机制初探 - 小心,Shader在吞噬你的内存
- Unity5中新的Shader
- Unity5中新的Shader
- Shader学习笔记(五)
- MySQL 基础教程
- JavaScript操作下拉框动态显示内容
- CCF认证201409-3 字符串匹配
- thinkphp5 锁表操作
- unity3d学习日记:接入UnityAds平台广告
- Unity5.0 Shader 极简入门 (五)
- webView显示页面不全解决办法
- Python基础
- Recyclerview嵌套Recyclerview,条目显示不全和宽度不能铺满不能同时满足
- ccf 20150903 模板生成系统
- 分布式系统
- Android进程的内存管理分析
- 网站缓存技术总结( ehcache、memcache、redis对比)
- ElasticSearch学习(1)--ElasticSearch的单机安装