【Shader】扫描网屏幕特效
2017-12-28 20:50
267 查看
Shader "Custom/ScannerEffect" { Properties { _MainTex("Texture", 2D) = "white" {} _ScanDistance("Scan Distance", float) = 0 _ScanWidth("Scan Width", float) = 10 _ScanColor("Scan Color", Color) = (1, 1, 1, 0) } SubShader { // Cull Off // ZTest Always Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" // 顶点着色器需要的数据类型 struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; // 顶点着色器处理后传递给片段着色器的数据类型 struct v2f { float4 vertex : SV_POSITION; float2 uv : TEXCOORD0; float2 uv_depth : TEXCOORD1; }; // 内置变量:相机的世界坐标 float4 _CameraWS; // 内置变量:主贴图像素尺寸大小,值是Vector4(1 / width, 1 / height, width, height) float4 _MainTex_TexelSize; // 顶点着色器 v2f vert(appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; o.uv_depth = v.uv; return o; } // 主贴图 sampler2D _MainTex; // 内置变量:深度图 sampler2D _CameraDepthTexture; // 扫描距离 float _ScanDistance; // 扫描网宽度 float _ScanWidth; // 扫描网的颜色 float4 _ScanColor; // 指定返回值类型是被SV_Target限定的类型 half4 frag (v2f i) : SV_Target { // 片段着色器着色(图像采样) half4 col = tex2D(_MainTex, i.uv); // 获取深度信息 float depth = UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv)); // 将深度值转换为线性的值 (0~1之间) float linear01Depth = Linear01Depth(depth); // 绘制需要变色的扫描区域 if ( linear01Depth < _ScanDistance && linear01Depth > _ScanDistance - _ScanWidth && linear01Depth < 1) { float diff = 1 - (_ScanDistance - linear01Depth) / (_ScanWidth); _ScanColor *= diff; return col + _ScanColor; } return col; } ENDCG } } }
相关文章推荐
- UnityShader 屏幕特效入门前
- 【浅墨Unity3D Shader编程】之十 深入理解Unity5中的Standard Shader(二)&屏幕油画特效的实现
- unity使用屏幕后处理实现闪烁特效,创建新的shader文件过程
- 【Shader】游戏屏幕黑白特效
- 【猫猫的Unity Shader之旅】之初识屏幕特效
- Unity3D Shader编程】之八 Unity5新版Shader模板源码解析&运动模糊(径向模糊)屏幕特效的实现
- Unity3D Shader编程】之九 深入理解Unity5中的Standard Shader (一)&屏幕水幕特效的实现
- Shader学习案例三---屏幕特效之色彩调节
- UnityShader实例12:屏幕特效之马赛克(Mosaic)材质
- UnityShader屏幕特效之Bloom
- Unity3D Shader编程】之十一 深入理解Unity5中的Standard Shader(三)&屏幕像素化特效的实现
- UnityShader实例13:屏幕特效之均值模糊(Box Blur)
- 深入理解Unity5中的StandardShader屏幕像素化特效的实现
- Unity Shader——夜晚视觉屏幕特效(night vision Screen Effect)
- 【Unity Shader编程】之十五 屏幕高斯模糊(Gaussian Blur)后期特效的实现
- Shader学习案例一---屏幕特效之黑白化当前屏幕
- UnityShader - 屏幕特效 - 高斯模糊(Gaussian Blur)
- Unity 扫描特效 HoloTriangles.shader
- 【unity】【shader】屏幕高斯模糊(Gaussian Blur)后期特效的实现
- UnityShader实例16:屏幕特效之径向模糊(Radial Blur)