Shader--模型从上到下消失

来源:互联网 发布:山歌伴奏软件 编辑:程序博客网 时间:2024/05/16 17:54

前言

今天在蛮牛上面看到一个帖子,问怎么把一个模型从上到下消失,研究了一下,这里把结果记录一下供以后参考。

思路

根据模型空间的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即可实现模型从上到下消失的效果:
这里写图片描述
这里写图片描述
这里写图片描述

原创粉丝点击