Shader消融特效
角色死亡消融,尸体消融,地图烧毁特效
不带阴影
参考 《unity shader 入门精要》
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Book/15.Dissolve" {Properties {_BurnAmount("Burn Amount",Range(0.0,1.0)) = 0.0_LineWidth("Burn Line Width",Range(0.0,0.2))=0.1_MainTex ("Albedo (RGB)", 2D) = "white" {}_BumpMap("Bump Map",2D)= "white" {}_BurnFirstColor("Burn First Color",Color)= (1,0,0,1)_BurnSecondColor("Burn Second Color",Color)= (1,0,0,1)_BurnMap("Burn Map",2D)= "white" {}}SubShader {Tags {"RenderType"="Opaque" "Queue"="Geometry"}Pass {Tags {"LightMode"="ForwardBase" }Cull OffCGPROGRAM#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.cginc"#pragma multi_compile_fwdbase#pragma vertex vert#pragma fragment fragsampler2D _MainTex;sampler2D _BurnMap;sampler2D _BumpMap;float4 _BurnFirstColor;float4 _BurnSecondColor;float4 _MainTex_ST;float4 _BumpMap_ST;float4 _BurnMap_ST;float _BurnAmount,_LineWidth;struct a2v {float4 vertex : POSITION;float3 normal : NORMAL;float4 tangent : TANGENT;float4 texcoord : TEXCOORD0;};struct v2f {float4 pos : SV_POSITION;float2 uvMainTex : TEXCOORD0;float2 uvBumpMap : TEXCOORD1;float2 uvBurnMap : TEXCOORD2;float3 lightDir : TEXCOORD3;float3 worldPos : TEXCOORD4;SHADOW_COORDS(5)};v2f vert( a2v v ) {v2f o;o.pos = UnityObjectToClipPos(v.vertex);//o.uvMainTex = v.texcoord*_MainTex_ST.xy + _MainTex_ST.zw;o.uvMainTex = TRANSFORM_TEX( v.texcoord,_MainTex);o.uvBumpMap = TRANSFORM_TEX( v.texcoord,_BumpMap);o.uvBurnMap = TRANSFORM_TEX( v.texcoord,_BurnMap);//副切线float3 binormal = cross(v.normal,v.tangent.xyz)*v.tangent.w;//从模型空间到切线空间的转换矩阵float3x3 rotation = float3x3(v.tangent.xyz,binormal,v.normal);//将光源位置减去顶点位置,这样就得到光照方向了 — 但是我们应该首先将顶点位置乘上光源的w分量,如果是平行光,w分量为0,得到的结果为0,说明顶点位置全变为(0.0, 0.0, 0.0)了,这样光照方向就是源 本的位置 (return objSpaceLightPos.xyz)。对于点光源,w为1,所以乘上顶点位置后,顶点位置无变化,这样计算的光照方向就是(return objSpaceLightPos.xyz – v.xyz)。float3 lightDir = mul(unity_WorldToObject,_WorldSpaceLightPos0).xyz - v.vertex*_WorldSpaceLightPos0.w;o.lightDir = mul(rotation,lightDir);o.worldPos = mul(unity_ObjectToWorld,v.vertex).xyz;//o.worldNormal = normalize( mul(v.normal,(float3x3)unity_WorldToObject));TRANSFER_SHADOW(o);return o;}/*将上面的函数拷贝进来*/half4 frag(v2f i) : SV_Target {fixed3 burn = tex2D(_BurnMap,i.uvBurnMap).rgb;clip(burn.r - _BurnAmount);float3 tangentLightDir = normalize(i.lightDir);//uppack normalfixed3 tangentNormal;fixed4 packedNormal = tex2D(_BumpMap,i.uvBumpMap);#if defined(UNITY_NO_DXT5nm)tangentNormal.xyz = packedNormal.xyz*2 -1;#else// --rgba -- xyzw //DXTnm 格式中a通道(即w分量)对应发现x分量,g通道(即y分量)对应发现y分量,//tangentNormal.xy = packedNormal.ag*2 -1;tangentNormal.xy = packedNormal.wy*2 -1;//tangentNormal=tangentNormal* _BumpScale;tangentNormal.z = sqrt(1.0-max(0,dot(tangentNormal.xy,tangentNormal.xy)));#endiffixed3 albedo = tex2D(_MainTex,i.uvMainTex).rgb;fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz*albedo;fixed3 diffuse = _LightColor0.rgb*albedo*max(0,dot(tangentNormal,tangentLightDir));fixed t = 1 - smoothstep(0.0,_LineWidth,burn.r - _BurnAmount);fixed3 burnColor = lerp(_BurnFirstColor,_BurnSecondColor,t);burnColor = pow(burnColor,5);UNITY_LIGHT_ATTENUATION(atten,i,i.worldPos);fixed3 finalColor = lerp(ambient+diffuse*atten,burnColor, t* step(0.0001,_BurnAmount));return fixed4(finalColor,1);}ENDCG}}FallBack "Diffuse"
}
效果图:
Shader消融特效相关推荐
- Laya Shader消融特效
说明&使用 项目仅用于测试交流, 如有侵权, 请联系我删除. 引擎版本: LayaAir2.10.0 Github地址: LayaEffect clone LayaEffect项目 → 打开 ...
- Unity shader护盾特效
身为小白的我看到某大神用 amplify shader editor 插件做了护盾特效,很酷. 蓝色是大神做的,红色那个是我的(感觉和大神的低了几个档次,哈哈) 大神的视频链接: https://ww ...
- 【Unity Shader 消融效果_案例分享】
1.实现逻辑 消融效果主要是利用了Shader中的clip()函数,也就是透明测试功能,在ASE中叫"Opacity Mask". 消融效果是基于一张"Noise&quo ...
- Shader消散特效(如回城)
在很多游戏中能够看到消散,燃烧等特效. 如: 所以今天写简单的消散特效的shader代码!!! (学习的庄懂的视频学到的,强烈新手学习庄懂视频) 第一步思考:我们能看到什么! 我们能够看到网格的消散, ...
- Shader——消融效果
一:使用两种颜色混合消融 Shader "Custom/Dissolve" {Properties{_MainTex ("Texture", ...
- 从零开始的unity2017笔记【shader与特效】
一.创建材质 Assets面板右键--creat--material创建一个新的材质球. ps:Rendering Mode(渲染模式)[opaque(不透明模式),cutout(镂空模式),fade ...
- Unity Shader屏幕特效基础OnRenderImage()函数
前言: unity shader中的pass是会顺序执行的,但是由于在图像处理中我们常常需要使用一个pass的处理结果作为另一个pass的输入,这个时候就需要用到OnRenderImage()函数了 ...
- Unity Shader 闪光特效
Unity Shader源代码如下: Shader "Custom/Flash" { Properties { _MainTex ("Texture", 2D) ...
- 【unity shader】unity游戏特效-简简单单的能量护罩
本文参考文章: [1]Unity shader护盾特效,作者:qq_16982323 [2]UnityShader--屏幕空间的能量罩(模拟守望先锋温斯顿的能量罩),作者:Porco_ 玩过崩坏3没? ...
最新文章
- 剖析boot.img的制作流程
- Vue使用axios提交表单数据
- 植树节html5游戏,植树节活动
- [J2ME]RSSOwlMidlet(RSS无线阅读器)设计说明
- thinkpad卡在logo界面_四大系列 一个品牌,超好用的商务伴侣Thinkpad
- 腾讯python面试题_面试题 | 腾讯数据分析面试题分享
- 算术运算导致溢出。_【S7200指令教程】数据运算指令ADD SUB MUL DIV
- android开发需要root吗,已经2017年了,Android手机还需要root吗?
- xe5 android sample 中的 SimpleList 是怎样绑定的
- Lua学习笔记3. 函数可变参数和运算符、转义字符串、数组
- 标准模块 os.stat
- html画布arc,绘制弧线将线性渐变html5画布(Draw arc will linear gradient html5 canvas)
- Chrome辅助工具-JSONView
- nas存储服务器磁盘阵列失效数据恢复过程
- 鸿蒙处理器985相当于内核多少,麒麟985处理器相当于骁龙多少_麒麟985处理器性能测评...
- 概率论复习笔记【1基本概念】
- 图形学常见概念与算法-纹理过滤
- Django企业开发实战--by胡阳,学习记录1015
- 图的存储结构——邻接表法
- 错误使用 load ASCII 文件的行号 1 中的文本未知“MATLAB“。