Unity Shader实现2D游戏迷雾
程序员文章站
2022-11-19 20:29:42
本文实例为大家分享了unity shader实现2d游戏迷雾的具体代码,供大家参考,具体内容如下先看效果吧。我使用的是屏幕后处理效果,首先先去photoshop做一张图片如下,用画笔点一个点就可以了,...
本文实例为大家分享了unity shader实现2d游戏迷雾的具体代码,供大家参考,具体内容如下
先看效果吧。
我使用的是屏幕后处理效果,首先先去photoshop做一张图片如下,用画笔点一个点就可以了,使用它来对摄像机截取的图片进行处理。
在摄像机上添加脚本文件
using system.collections; using system.collections.generic; using unityengine; public class testscript : monobehaviour { [range(0,3)] public float lerp = 0;//使用它来调整可视区域的大小 public texture2d masktex; public shader screanshader; public material getmaterial { get { if(_material ==null) _material = new material(screanshader); return _material; } } private material _material = null; //src是摄像机截取到的照片,dest是处理过的图片 void onrenderimage(rendertexture src, rendertexture dest) { getmaterial.settexture("_maintex", src); getmaterial.settexture("_masktex", masktex); getmaterial.setfloat("_lerp", lerp); graphics.blit(src, dest, getmaterial); } }
对应的shader,思路就是把masktex的颜色翻转一下然后直接乘上去就可以了,小数越乘越小,越小颜色越黑。
shader "wzhhh/myshader2" { properties{ _maintex("maintex",2d) = "white"{} _masktex("masktex",2d) = "white"{} _lerp("lerp",range(0,3)) = 1 } subshader{ pass{ tags{ "lightmode" = "forwardbase" } cgprogram #include "lighting.cginc" #pragma vertex vert #pragma fragment frag sampler2d _masktex; sampler2d _maintex; float4 _maintex_st; float _alphabase; float _lerp; struct a2v { float4 vertex : position; float2 texcoord : texcoord0; }; struct v2f { float4 pos : sv_position; fixed2 uv : texcoord0; }; v2f vert(a2v i) { v2f o; o.pos = unityobjecttoclippos(i.vertex); o.uv = transform_tex(i.texcoord, _maintex); return o; } fixed4 frag(v2f o) :sv_target{ fixed4 color = tex2d(_masktex, o.uv); color.r = 1 - color.r; color.g = 1 - color.g; color.b = 1 - color.b; fixed4 color2 = tex2d(_maintex, o.uv); color2.r *= color.r*_lerp; color2.g *= color.g*_lerp; color2.b *= color.b*_lerp; return color2; } endcg } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。