Shader--模型从上到下消失

####前言####
今天在蛮牛上面看到一个帖子,问怎么把一个模型从上到下消失,研究了一下,这里把结果记录一下供以后参考。
####思路####
根据模型空间的y坐标与阈值的差值进行Clip操作。
####正文####

Shader "Unlit/DisappearShader"
{
	Properties
	{
		_MainTex ("Texture", 2D) = "white" {}
		_DisappearOffset ("Disappear Offset",Range(-0.5,0.5)) = 0.5
	}
	SubShader
	{
		Tags { "RenderType"="Opaque" }


		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"

			struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct v2f
			{
				float3 uv : TEXCOORD0;
				float4 vertex : SV_POSITION;
			};

			sampler2D _MainTex;
			float4 _MainTex_ST;
			float _DisappearOffset;
			
			v2f vert (appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				//输出的uv中xy存储uv值,z存储用于Clip的参数值
				o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex);
				//因为模型空间中y值范围为(-0.5,0.5),所以还需要进行偏移以保证裁剪的正确
				o.uv.z = _DisappearOffset - v.vertex.y;
				return o;
			}
			
			fixed4 frag (v2f i) : SV_Target
			{
				clip(i.uv.z);
				// sample the texture
				fixed4 col = tex2D(_MainTex, i.uv.xy);
				return col;
			}
			ENDCG
		}
	}
}

####结果####
调节_DisappearOffset的值从0.5到-0.5即可实现模型从上到下消失的效果:
Shader--模型从上到下消失_第1张图片
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kK2H9DTH-1574674974021)(https://img-blog.csdn.net/20171017154441749?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzQ0Njk3MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]
Shader--模型从上到下消失_第2张图片

你可能感兴趣的:(unity3d)