闲暇时看纸鱼实况,看到游戏中有个这样的效果:
视频链接,UP主:薄海纸鱼
卧槽,放慢再看一遍:
可以看到,玩家在惹怒Boss后,所有的椅子瞬间消失,Boss战还未开打就已经逼格拉满了。给玩家留下震撼的印象以及实力差所带来的压抑和绝望。
太帅了!这个效果我也想要!
实现思路
仔细观察椅子消失瞬间:
想要实现这个效果有三个要求:
一是要剔除片元来达到物体消融的效果。
二是在剔除片元的操作里设定剔除的条件。
三是在剔除的边缘上颜色高亮
看完了冯乐乐女神的书,我们就知道解决第一个问题需要用到的就是clip函数,该函数可以剔除指定的片元
clip(x)
///相当于下面这句
if(x < 0)
{
discard;
}
ok,上代码:
Shader "Unlit/DirectionalDissolve"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {
}
_DissolveDirection ("消融方向",Vector) = (0,0,0,0)
}
SubShader
{
Tags {
"RenderType"="Opaque" }
LOD 100
Pass
{
Cull off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float3 objPos : TEXCOORD1;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
half4 _DissolveDirection;
v2f vert (appdata v)
{
v2f o;
//v.vertex.xyz += v.normal * saturate(sin(_Time.w)) * 10;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.objPos = v.vertex;//mul(unity_ObjectToWorld,v.vertex).xyz;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
half3 dis = i.objPos.xyz - _DissolveDirection