失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > unity使用屏幕后处理实现闪烁特效 创建新的shader文件过程

unity使用屏幕后处理实现闪烁特效 创建新的shader文件过程

时间:2018-12-02 21:25:48

相关推荐

unity使用屏幕后处理实现闪烁特效 创建新的shader文件过程

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文件

保存时对应的工程文件:

如果觉得《unity使用屏幕后处理实现闪烁特效 创建新的shader文件过程》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。