unity使用屏幕后处理实现闪烁特效,创建新的shader文件过程
来源:互联网 发布:红包软件代理招募 编辑:程序博客网 时间:2024/04/29 13:19
shader代码
Shader "FlickerEffect"{ Properties { _MainTex ("Texture(RGB)", 2D) = "white" {} _FlickerColor("FlickerColor",Color)=(1,1,1,1) _LerpLevel("LerpLevel",Range(0.0,1.0))=1.0 } SubShader { Pass { CGPROGRAM #pragma vertex vert_img #pragma fragment frag #include "UnityCG.cginc" uniform sampler2D _MainTex; half4 _FlickerColor; fixed _LerpLevel; half4 frag(v2f_img i):SV_Target { //如果纹理为null,就单独显示颜色 half4 renderTex=tex2D(_MainTex,i.uv); //处理颜色,正常图层叠加 结果色=混合色 * 混合色不透明度值 + 基色 * (100% - 混合色不透明度值)。 half r=_FlickerColor.r*_FlickerColor.a+renderTex.r*(1-_FlickerColor.a); half g=_FlickerColor.g*_FlickerColor.a+renderTex.g*(1-_FlickerColor.a); half b=_FlickerColor.b*_FlickerColor.a+renderTex.b*(1-_FlickerColor.a); half a= _FlickerColor.a+(1-_FlickerColor.a)*renderTex.a; half4 targetColor=half4(r,g,b,a); //lerp(x,y,s) return x+s(y-x) half4 finalColor=lerp(renderTex,targetColor,_LerpLevel); return finalColor; } ENDCG } }}
实现屏幕后处理,调用OnRenderImage,使用shader
public Material material { get { if (curMaterial == null) { curMaterial = new Material(curShader); curMaterial.hideFlags = HideFlags.HideAndDontSave; } return curMaterial; } } void Start () { curShader = Shader.Find("ORG/FlickerEffect");} void OnRenderImage(RenderTexture source, RenderTexture destination) { if (curShader != null) { material.SetFloat("_LerpLevel", lerpLevel); if (flickerTexture != null) material.SetTexture("MainTex", flickerTexture); material.SetColor("_FlickerColor", flickerColor); Graphics.Blit(source, destination, material); } else { Graphics.Blit(source, destination); } }
使用协程实现等待执行
IEnumerator ToFlicker() { while (true) { if (remainDuration < 1) break; remainDuration--; lerpLevel = remainDuration / duration; lerpLevel = Mathf.Clamp(lerpLevel, 0, 1f); yield return null; } Destroy(this); }
unity设置打包时包含shader文件
保存时对应的工程文件:
0 0
- unity使用屏幕后处理实现闪烁特效,创建新的shader文件过程
- Unity shader实现屏幕模糊特效
- Unity Shader-后处理:屏幕水波效果
- Unity Shader学习笔记:屏幕后处理
- unity shader:屏幕后处理技术
- Unity Shader 学习笔记(十四)使用屏幕特效实现亮度饱和度和对比度
- 【Unity Shader编程】之十五 屏幕高斯模糊(Gaussian Blur)后期特效的实现
- Unity Shader编程】之十五 屏幕高斯模糊(Gaussian Blur)后期特效的实现
- 【Unity Shader编程】之十五 屏幕高斯模糊(Gaussian Blur)后期特效的实现
- 【unity】【shader】屏幕高斯模糊(Gaussian Blur)后期特效的实现
- Shader特效——BRDF 的实现【Unity Shader】
- Shader创建老电影风格的屏幕特效
- Unity Shader-后处理:景深
- Unity Shader-后处理:景深
- 在Unity的后处理shader中通过屏幕像素坐标和深度贴图反推世界坐标
- 【猫猫的Unity Shader之旅】之初识屏幕特效
- 《着色器和屏幕特效》读书笔记第八章-用Unity的渲染纹理实现屏幕特效
- Unity Shader 学习笔记(19) 屏幕后处理效果、调整亮度、饱和度、对比度
- 深度学习时代的计算机视觉
- TensorFlow深度学习框架
- VS2017我们无法刷新此账户的凭据发送请求时出错
- 堆以及php实现堆排序
- properties
- unity使用屏幕后处理实现闪烁特效,创建新的shader文件过程
- selenium 之Xpath定位泛指元素&&下载图片
- 跨服务器Session共享的四种方法
- Android的WebView加载异常问题
- 我的操盘机器人新模型上线第一天(计算出来10个股票),感觉开挂了
- git子模块及仓库操作
- kill ORACLE中正在运行的存储过程
- RTSP的报文结构
- postgresql 常用命令