Unity 基于图像处理的图像显示特效制作过场特效
逐行/列扫描
Shader "LSQ/ImageProcessing/PerLineScan"
{Properties{_MainTex ("Texture", 2D) = "white" {}[Enum(Up,1,Down,2,Left,3,Right,4)] _ScanDirection ("Scan Direction", Int) = 1 _Value ("Value", Range(0, 1)) = 0}SubShader{// No culling or depthCull Off ZWrite Off ZTest AlwaysPass{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;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}sampler2D _MainTex;float4 _MainTex_TexelSize;int _ScanDirection;float _Value;fixed4 frag (v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);int lineIndex = 1;int valueIndex = 0;if(_ScanDirection == 1) //向上{lineIndex = i.uv.y * _MainTex_TexelSize.w;valueIndex = _Value * _MainTex_TexelSize.w;}else if(_ScanDirection == 2) //向下{lineIndex = (1 - i.uv.y) * _MainTex_TexelSize.w;valueIndex = _Value * _MainTex_TexelSize.w;}else if(_ScanDirection == 3) //向左{lineIndex = i.uv.x * _MainTex_TexelSize.z;valueIndex = _Value * _MainTex_TexelSize.z;}else //向右{lineIndex = (1 - i.uv.x) * _MainTex_TexelSize.z;valueIndex = _Value * _MainTex_TexelSize.z;}clip(lineIndex - valueIndex);return col;}ENDCG}}
}
移动
Shader "LSQ/ImageProcessing/MoveIn"
{Properties{_MainTex ("Texture", 2D) = "white" {}[Enum(Up,1,Down,2,Left,3,Right,4)] _ScanDirection ("Scan Direction", Int) = 1 _Value ("Value", Range(0, 1)) = 0}SubShader{// No culling or depthCull Off ZWrite Off ZTest AlwaysPass{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;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}sampler2D _MainTex;float4 _MainTex_TexelSize;int _ScanDirection;float _Value;fixed4 frag (v2f i) : SV_Target{if(_ScanDirection == 1) //向上{i.uv.y = i.uv.y + 1 - _Value;}else if(_ScanDirection == 2) //向下{i.uv.y = i.uv.y - 1 + _Value;}else if(_ScanDirection == 3) //向左{i.uv.x = i.uv.x - 1 + _Value;}else //向右{i.uv.x = i.uv.x + 1 - _Value;}fixed4 col = tex2D(_MainTex, i.uv);if(i.uv.x > 1 || i.uv.y > 1 || i.uv.x < 0 || i.uv.y < 0)return 1;return col;}ENDCG}}
}
交叉飞入
Shader "LSQ/ImageProcessing/CrossFlight"
{Properties{_MainTex ("Texture", 2D) = "white" {}[Enum(Horizontal,1,Vertical,2)] _Direction ("Direction", Int) = 1_Value ("Value", Range(0, 1)) = 0}SubShader{// No culling or depthCull Off ZWrite Off ZTest AlwaysPass{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;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}sampler2D _MainTex;float4 _MainTex_TexelSize;int _Direction;float _Value;fixed4 frag (v2f i) : SV_Target{if(_Direction == 1) //水平{if(i.uv.y > 0.5) //上行{i.uv.x = i.uv.x + 1 - _Value;}else //下行{i.uv.x = i.uv.x - 1 + _Value;}}else if(_Direction == 2) //竖直{if(i.uv.x > 0.5) //右列{i.uv.y = i.uv.y + 1 - _Value;}else //左列{i.uv.y = i.uv.y - 1 + _Value;}}fixed4 col = tex2D(_MainTex, i.uv);if(i.uv.x > 1 || i.uv.y > 1 || i.uv.x < 0 || i.uv.y < 0)return 1;return col;}ENDCG}}
}
中间扩张/收缩
Shader "LSQ/ImageProcessing/CenterExtend"
{Properties{_MainTex ("Texture", 2D) = "white" {}[Enum(Horizontal,1,Vertical,2)] _Direction ("Direction", Int) = 1[Enum(Extend,1,Shrink,2)] _Type ("Direction", Int) = 1_Value ("Value", Range(0, 1)) = 0}SubShader{// No culling or depthCull Off ZWrite Off ZTest AlwaysPass{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;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}sampler2D _MainTex;int _Direction;int _Type;float _Value;fixed4 frag (v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);float value = 1;if(_Direction == 1) //水平{if(_Type == 1) //扩张{value = abs(i.uv.x - 0.5) * 2;}else //收缩{value = 1 - abs(i.uv.x - 0.5) * 2;}}else if(_Direction == 2) //竖直{if(_Type == 2) //扩张{value = 1 - abs(i.uv.y - 0.5) * 2; }else //收缩{value = abs(i.uv.y - 0.5) * 2;}}clip(_Value - value);return col;}ENDCG}}
}
栅条特效
Shader "LSQ/ImageProcessing/GridBar"
{Properties{_MainTex ("Texture", 2D) = "white" {}[Enum(Horizontal,1,Vertical,2)] _Direction ("Direction", Int) = 1_Count ("Count", int) = 10_Value ("Value", Range(0, 1)) = 0}SubShader{// No culling or depthCull Off ZWrite Off ZTest AlwaysPass{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;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}sampler2D _MainTex;int _Direction;int _Count;float _Value;fixed4 frag (v2f i) : SV_Target{if(_Direction == 1) //水平{float lineIndex = i.uv.y * _Count;lineIndex = floor(lineIndex);if(lineIndex % 2 == 0){i.uv.x = i.uv.x - 1 + _Value;}else{i.uv.x = i.uv.x + 1 - _Value;}}else if(_Direction == 2) //竖直{float lineIndex = i.uv.x * _Count;lineIndex = floor(lineIndex);if(lineIndex % 2 == 0){i.uv.y = i.uv.y + 1 - _Value;}else{i.uv.y = i.uv.y - 1 + _Value;}}fixed4 col = tex2D(_MainTex, i.uv);if(i.uv.x > 1 || i.uv.y > 1 || i.uv.x < 0 || i.uv.y < 0)return 1;return col;}ENDCG}}
}
图像渐显
Shader "LSQ/ImageProcessing/FadeIn"
{Properties{_MainTex ("Texture", 2D) = "white" {}_Value ("Value", Range(0, 1)) = 0}SubShader{// No culling or depthCull Off ZWrite Off ZTest AlwaysPass{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;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}sampler2D _MainTex;float _Value;fixed4 frag (v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);//灰度值float value = (0.299 * col.r + 0.587 * col.g + 0.114 * col.b);clip(_Value - value);return col;}ENDCG}}
}
百叶窗
Shader "LSQ/ImageProcessing/Shutter"
{Properties{_MainTex ("Texture", 2D) = "white" {}[Enum(Horizontal,1,Vertical,2)] _Direction ("Direction", Int) = 1_Count ("Count", int) = 10_Value ("Value", Range(0, 1)) = 0}SubShader{// No culling or depthCull Off ZWrite Off ZTest AlwaysPass{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;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}sampler2D _MainTex;int _Direction;int _Count;float _Value;fixed4 frag (v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);float value = 1;if(_Direction == 1) //水平{value = i.uv.x * _Count;value = value - floor(value);}else if(_Direction == 2) //竖直{value = i.uv.y * _Count;value = value - floor(value);}clip(_Value - value);return col;}ENDCG}}
}
马赛克
Shader "LSQ/ImageProcessing/Mosaic"
{Properties{_MainTex ("Texture", 2D) = "white" {}_Value ("Value", Range(0, 1)) = 0}SubShader{// No culling or depthCull Off ZWrite Off ZTest AlwaysPass{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;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}sampler2D _MainTex;float4 _MainTex_TexelSize;float _Value;fixed4 frag (v2f i) : SV_Target{fixed2 uv = round(i.uv * _MainTex_TexelSize.zw * _Value) / (_MainTex_TexelSize.zw * _Value);fixed4 col = tex2D(_MainTex, uv);return col;}ENDCG}}
}
Unity 基于图像处理的图像显示特效制作过场特效相关推荐
- 前程无忧招聘网站特效制作(JavaScript特效)
招聘网站特效制作,实现如下功能: 1.网站首页 2.新用户注册 3.用户登录 4.简历管理:信息填写 5.职位搜索 6.招聘公司页面查看 模板制作:网站底部做成模板,网站其他页面调用模板,模板用DIV ...
- android图片抖动,Android基于Shader的图像处理(12)-仿抖音抖动特效
抖动特效和缩放特效很像,除了图像缩放,还在图像颜色分界处混合了颜色.颜色分界处混合颜色和之前说的高斯模糊,边缘检测很像,找到当前纹理周围的纹理,和当前纹理颜色混在一起.这里将左下角,右上角的颜色分量和 ...
- 【Unity】创建一个自己的AR脸部特效安卓程序
目录 1 创建一个换脸AR场景 2 下载官方提供的BasicFaceFilterAssets资源 3 设置AR面部追踪 4 配置AR Face Manager 5 配置AR Camera为前置摄像头 ...
- Unity3d展厅模型预处理UV拆分光影烘焙材质及后处理与特效制作基本流程【2020】
应很多读者的要求,本文小姐姐将以一个用户的展厅VR场景为例,详细讲解Unity3d的VR开发在美工阶段的模型预处理.UV2拆分.贴图优化.光影烘焙.后处理与特效制作以及最终作品优化的基本方法和流程 ...
- Unite 2018|基于照片建模的游戏制作流程
Unity之前发布了了全新的实时渲染作品<死者之书>的预告片,Unity引擎的画面表现又一次提升到全新的高度.这个Demo的场景包含大量的树木.植被.岩石等素材,非常接近真实照片的感觉.在 ...
- Unity3d 游戏特效制作实战教程 第二部
本套教程是由多年特效制作经验的作者录制,通过多个案例, 演示了xffect粒子系统与unitu3d粒子系统的特效制作的全部流程 包含xffect基础教程,并附送全部项目文件打包和素材. 本教学适合于U ...
- Unity3D粒子系统之制作火焰特效
Unity3D粒子系统之制作火焰特效 本文将会介绍如何使用Unity内的粒子系统制作烟雾效果. 如果想了解Unity粒子系统中的基础属性,可以看这篇博客:Unity3D粒子系统之基础属性介绍 先上预览 ...
- Unity 基于eventTriggers的3D场景交互系统
Unity 基于eventTriggers的3D场景交互系统 Unity里的3D项目有时候需要大量的交互,而且是无UI的交互. 这时候可以像UI系统里,使用eventTrigger去制作交互系统.但是 ...
- 使用jQuery 快速高效制作 网页特效
使用jQuery 快速高效制作 网页特效 第一章:JavaScript基础 DOM:document object model 文档对 ...
- unity 彩带粒子_Unity3D_(Shuriken粒子系统)制作简单的烟花爆炸效果
Unity中的粒子系统可以用于制作特效,如开枪火花效果,简单爆炸效果等.(毕竟程序员不是设计师,简单的特效都没有问题,要制作一些非常美观的特效还是需要多了解跟美术有关的知识.) 粒子系统实现一个简单的 ...
最新文章
- Python入门100题 | 第005题
- android paint 圆角 绘制_[BOT] 一种android中实现“圆角矩形”的方法
- html5链接mvc,LinkExtensions.ActionLink 方法 (System.Web.Mvc.Html) | Microsoft Docs
- Bootstrap 按钮菜单的尺寸
- OpenShift 4 - 查看关键证书到期日期
- 水墨流动生太极,四式''拳诀''展存储
- java动漫项目_狂拽酷炫diao炸天的开源动画项目:lottie-android,拿来就用!
- 周赛-mZY寻宝(bfs搜索)
- RabbitMq使用demo
- w ndows7错误恢复,Win7 0xc000000e启动错误恢复方法
- 商务网站建设与维护【12】
- Node.js 网页瘸腿爬虫初体验
- python3 进程池Pool 详解
- 数据库SQL实战 --42.将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005
- panda3d场景的主要状态
- PHP 验证码无法显示的问题
- uniapp微信小程序项目启动步骤
- 数据库(MySQL + Redis)
- GitHub push的时候报:Unable to access ‘https://github.com/xxxx/xxxx.git/‘:OpenSSL SSL_read:Connection was
- 珠海拱北口岸停车攻略,拱北口岸地下停车场收费
热门文章
- 服务器系统事件id1001,WIN10事件查看器,ID1000,ID1001 問題
- 使用Docker发布DNC项目
- 服务器的mysql目录在哪,oracle数据库目录在哪
- sublime license key
- Shiro源码剖析——Subject的创建与获取(一次完整的请求执行流程)
- 英特尔芯片组 年代表_英特尔:对不起,但我们的7纳米芯片将延迟到2022年,2023年
- 分组交换(Packet Switching)和线路交换(Circuit Switching)
- 工具系列 | FPM进程管理器详解
- 产业科技创新杂志产业科技创新杂志社产业科技创新编辑部2022年第3期目录
- lua 利用os.data和os.time实现运营活动在客户端跨时区换算服务端所在时区时间戳