Shader实例(流光实现)
流光效果
按照方向消失或重现效果
- //按照方向消失的效果
- //by:CJB_King
- //2017.12.23
- Shader "SelfShader/DissolveEffectX"
- {
- Properties
- {
- _MainTex("MainTex(RGB)", 2D) = "white" {}
- _DissolveVector("DissolveVector", Vector) = (0,0,0,0)
- }
- CGINCLUDE
- #include "Lighting.cginc"
- uniform sampler2D _MainTex;
- uniform float4 _MainTex_ST;
- uniform float4 _DissolveVector;
- struct v2f
- {
- float4 pos : SV_POSITION;
- float3 worldNormal : NORMAL;
- float2 uv : TEXCOORD0;
- float3 worldLight : TEXCOORD1;
- float4 objPos : TEXCOORD2;
- };
- v2f vert(appdata_base v)
- {
- v2f o;
- o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
- o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
- //顶点转化到世界空间
- o.objPos = v.vertex;
- o.worldNormal = UnityObjectToWorldNormal(v.normal);
- o.worldLight = UnityObjectToWorldDir(_WorldSpaceLightPos0.xyz);
- return o;
- }
- fixed4 frag(v2f i) : SV_Target
- {
- half3 normal = normalize(i.worldNormal);
- half3 light = normalize(i.worldLight);
- fixed diff = max(0, dot(normal, light));
- fixed4 albedo = tex2D(_MainTex, i.uv);
- //不满足条件的discard
- clip(i.objPos.xyz - _DissolveVector.xyz);
- fixed4 c;
- c.rgb = diff * albedo;
- c.a = 1;
- return c;
- }
- ENDCG
- SubShader
- {
- Pass
- {
- Tags{ "RenderType" = "Opaque" }
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- ENDCG
- }
- }
- FallBack "Diffuse"
- }
- //消失效果
- //by:CJB_King
- //2017.12.23
- Shader "SelfShader/DissolveEffectX"
- {
- Properties{
- _Diffuse("Diffuse", Color) = (1,1,1,1)
- _DissolveColor("Dissolve Color", Color) = (0,0,0,0)
- _MainTex("Base 2D", 2D) = "white"{}
- _ColorFactor("ColorFactor", Range(0,1)) = 0.7
- _DissolveThreshold("DissolveThreshold", Float) = 0
- }
- CGINCLUDE
- #include "Lighting.cginc"
- uniform fixed4 _Diffuse;
- uniform fixed4 _DissolveColor;
- uniform sampler2D _MainTex;
- uniform float4 _MainTex_ST;
- uniform float _ColorFactor;
- uniform float _DissolveThreshold;
- struct v2f
- {
- float4 pos : SV_POSITION;
- float3 worldNormal : TEXCOORD0;
- float2 uv : TEXCOORD1;
- float4 objPos : TEXCOORD2;
- };
- v2f vert(appdata_base v)
- {
- v2f o;
- o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
- o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
- o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject);
- o.objPos = v.vertex;
- return o;
- }
- fixed4 frag(v2f i) : SV_Target
- {
- float factor = i.objPos.x - _DissolveThreshold;
- clip(factor);
- //Diffuse + Ambient光照计算
- fixed3 worldNormal = normalize(i.worldNormal);
- fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);
- fixed3 lambert = saturate(dot(worldNormal, worldLightDir));
- fixed3 albedo = lambert * _Diffuse.xyz * _LightColor0.xyz + UNITY_LIGHTMODEL_AMBIENT.xyz;
- fixed3 color = tex2D(_MainTex, i.uv).rgb * albedo;
- //等价于下面注释代码的操作
- fixed lerpFactor = saturate(sign(_ColorFactor - factor));
- return lerpFactor * _DissolveColor + (1 - lerpFactor) * fixed4(color, 1);
- /*
- if (factor < _ColorFactor)
- {
- return _DissolveColor;
- }
- return fixed4(color, 1);*/
- }
- ENDCG
- SubShader
- {
- Tags{ "RenderType" = "Opaque" }
- Pass
- {
- //不让模型穿帮,关掉了背面裁剪
- Cull Off
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- ENDCG
- }
- }
- FallBack "Diffuse"
- }
溶解效果进阶版
- //溶解效果
- //by:CJB_King
- //2017.12.23
- Shader "SelfShader/DissolveEffectX"
- {
- Properties{
- _Diffuse("Diffuse", Color) = (1,1,1,1)
- _DissolveColor("Dissolve Color", Color) = (1,1,1,1)
- _MainTex("Base 2D", 2D) = "white"{}
- _DissolveMap("DissolveMap", 2D) = "white"{}
- _DissolveThreshold("DissolveThreshold", Range(0,1)) = 0
- _DissolveSpeedFactor("DissolveSpeed", Range(0,5)) = 2
- _DissolveControl("ColorFactorB", Float) = 0
- }
- CGINCLUDE
- #include "Lighting.cginc"
- uniform fixed4 _Diffuse;
- uniform fixed4 _DissolveColor;
- uniform sampler2D _MainTex;
- uniform float4 _MainTex_ST;
- uniform sampler2D _DissolveMap;
- uniform float _DissolveThreshold;
- uniform float _DissolveSpeedFactor;
- uniform float _DissolveControl;
- struct v2f
- {
- float4 pos : SV_POSITION;
- float3 worldNormal : TEXCOORD0;
- float2 uv : TEXCOORD1;
- float4 objPos : TEXCOORD2;
- };
- v2f vert(appdata_base v)
- {
- v2f o;
- o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
- o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
- o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject);
- o.objPos = v.vertex;
- return o;
- }
- fixed4 frag(v2f i) : SV_Target
- {
- fixed4 dissolve = tex2D(_DissolveMap, i.uv);
- //Diffuse + Ambient光照计算
- fixed3 worldNormal = normalize(i.worldNormal);
- fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);
- fixed3 lambert = saturate(dot(worldNormal, worldLightDir));
- fixed3 albedo = lambert * _Diffuse.xyz * _LightColor0.xyz + UNITY_LIGHTMODEL_AMBIENT.xyz;
- fixed3 color = tex2D(_MainTex, i.uv).rgb * albedo;
- float factor = i.objPos.x - _DissolveControl;
- if(factor < 0)
- {
- clip(_DissolveThreshold - dissolve.r * abs(factor) * _DissolveSpeedFactor);
- }
- return fixed4(color, 1);
- }
- ENDCG
- SubShader
- {
- Tags{ "RenderType" = "Opaque" }
- Pass
- {
- Cull Off
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- ENDCG
- }
- }
- FallBack "Diffuse"
- }
Shader "SelfShader/Dissolve"
{Properties{_MainColor("MainColor",COLOR)=(1,1,1,1)_MainTex ("Texture", 2D) = "white" {}_Noise("Noise",2D)="white"{}_Dissolve("Dissolve",Vector)=(0.2,0.5,0.8)_DissolveThread("DissolveThread",float)=0.2_DissolveColor("DissolveColor",COLOR)=(1,1,1,1)_DissolveColFactor("_DissolveColFactor",float)=2_FlyFactor("FlyFactor",float)=3}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct a2v{float4 vertex : POSITION;float2 uv : TEXCOORD0;fixed3 normal:NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 pos : SV_POSITION;fixed3 worldNormal:TEXCOORD1;fixed3 worldPos:TEXCOORD2;fixed3 objPos:TEXCOORD3;};sampler2D _Noise;sampler2D _MainTex;float4 _MainTex_ST;fixed4 _MainColor;fixed4 _Dissolve;float _DissolveThread;fixed4 _DissolveColor;float _DissolveColFactor;float _FlyFactor;v2f vert (a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldPos=mul((float3x3)unity_ObjectToWorld,v.vertex);o.worldNormal=UnityObjectToWorldNormal(v.normal);o.objPos=v.vertex;o.uv = TRANSFORM_TEX(v.uv, _MainTex);o.pos.xyz+=v.normal*saturate(_DissolveThread-_FlyFactor)*_FlyFactor;return o;}fixed4 frag (v2f i) : SV_Target{fixed3 worldNor=normalize(i.worldNormal);fixed3 lightDir=normalize(_WorldSpaceLightPos0.xyz);fixed4 albedo = tex2D(_MainTex, i.uv)*_MainColor;fixed4 noiseColor=tex2D(_Noise,i.uv);float factor=noiseColor.r-_DissolveThread;clip(factor);fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT.xyz*albedo.rgb;fixed3 diffuse=_LightColor0.rgb*albedo.rgb*(0.5*dot(lightDir,worldNor)+0.5);float lerpFactor=saturate(sign(_DissolveColFactor-factor));return lerp(fixed4(ambient+diffuse,1),_DissolveColor,lerpFactor);}ENDCG}}
}
Shader实例(流光实现)相关推荐
- android 4实例分析,OpenGL Shader实例分析(4)闪光效果
本文实例为大家分享了opengl shader实例闪光效果的具体代码,供大家参考,具体内容如下 在游戏中,当战斗结束后,对一些获取的宝贝需要进行闪光处理.这篇文章介绍一个进行闪光处理的shader,运 ...
- shader实例:实现类似宝可梦 Pokemon 的战斗转场
宝可梦游戏在进入战斗前会有类似这样转场动画. 例子中使用的纹理质量较差,边缘比较模糊,和shader无关. 这个UI是盖在所有UI最前面的.可以使用shader来完成这个工作,而不是复杂的动画. 使用 ...
- android雪花飘落效果,【OpenGL】Shader实例分析(七)- 雪花飘落效果
研究了一个雪花飘落效果.感觉挺不错的.分享给大家,效果例如以下: 代码例如以下: Shader "shadertoy/Flakes" { // https://www.shader ...
- Shader实例:Planar Reflection 平面反射
目前采用比较多的反射,最终效果示例: 代码已经中文注解,有2部分需扩展:反射矩阵.歪截头体矩阵.注解中有来源链接可以去理解推导过程. 可用于镜面和水面. 咱还是直接看注解过的代码 MirrorRefl ...
- android+动态光圈效果,OpenGL Shader实例分析(8)彩色光圈效果
本文实例为大家分享了opengl实现彩色光圈效果的具体代码,供大家参考,具体内容如下 研究了一个彩色光圈效果,感觉挺不错的,分享给大家,效果如下: 代码如下: shader "shadert ...
- D3D9 Shader实例教程
啥是Shader? Shader是一段运行在GPU上的小程序,是运行在GPU上的Pipeline上的特定的可编程单元的小程序. 从D3D9 API层面学习Shader编程 随着Unity3D的流行,很 ...
- Three 自定义着色器Shader实例
基础环境搭建: camera = new THREE.OrthographicCamera(-10, 10, 10, -10, 0, 100)camera.position.set(0, 0, 10) ...
- OpenGL Blinn-Phong Shader实例
OpenGL blinnphong 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <vmath.h> #include <sh ...
- unity描边发光shader_unity shader实例#1 轮廓渲染-描边
本文主要来讲几种描边的实现方法 1.法线外扩 一般期望的描边效果,就是在模型外面有一圈选边,因此我们可以把模型扩大一点点,利用这个扩大的边缘来实现描边效果.可以看出,扩大的方向其实就是法线的方向,边缘 ...
最新文章
- 怎么把一个控件放到tab页面上去?_移动端页面内容切换
- C#将图片白色背景设置为透明
- Git 分支管理 Feature分支 强行删除分支
- linux php imagick 扩展安装,linux下为php5.3安装Imagick扩展
- jQuery操作示例
- SimpleDateFormat 线程不安全及解决方案
- python基础(1)——简介与安装
- Select2使用经验及多Jquery版本处理
- Mugeda(木疙瘩)H5案例课—教你做魔性H5弹幕-岑远科-专题视频课程
- android cursor循环,Android:Cursor.getColumnIndex()在行循环中是不变的吗?
- day13_spring环境配置及bean使用
- 和平精英服务器响应超时什么意思,和平精英服务器无响应,和平精英服务器超时...
- Maven学习——maven基础
- 关于CSDN博客域名
- Linux获取最后一个参数(参数统计)
- 最新源码交易网系统HTML源码(可商用)
- Python进阶(三十三)Python获取并输出当前日期时间
- VST3主机开发(二)——插件调用
- C语言 用空格作判断,C语言菜鸟基础教程之判断
- Ubuntu16.04网络配置