1. 程式人生 > >Shader--模型從上到下消失

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; } fi xed4 frag (v2f i) : SV_Target {1 clip(i.uv.z); // sample the texture fixed4 col = tex2D(_MainTex, i.uv.xy); return col; } ENDCG } } }

結果

調節_DisappearOffset的值從0.5到-0.5即可實現模型從上到下消失的效果:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述