模型渐显渐隐Shader

第一个:

Shader "Unlit/MyShader"

{

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.z;//调整这里来改变消失轴向

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

}

}

}


第二个:

Shader "Unlit/OneSideAlphaCut"

{

    Properties

    {

        _MainTex("Texture", 2D) = "red" {}

        _Cutoff("Alpha Cutoff", Range(-1,1)) = 0.51

    }

        SubShader

        {

            Tags { "Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "TransparentCutout" }

            LOD 100

            Pass

            {

                Tags { "LightMode" = "ForwardBase" }

                CGPROGRAM

                #pragma vertex vert

                #pragma fragment frag

                #pragma multi_compile_fog

                #include "UnityCG.cginc"

                #include "Lighting.cginc"

                struct appdata

                {

                    float4 vertex : POSITION;

                    float2 uv : TEXCOORD0;

                };

                struct v2f

                {

                    float2 uv : TEXCOORD0;

                    UNITY_FOG_COORDS(1)

                    float4 vertex : SV_POSITION;

                    float4 oPos : TEXCOORD1;

                };

                sampler2D _MainTex;

                float4 _MainTex_ST;

                fixed _Cutoff;

                v2f vert(appdata v)

                {

                    v2f o;

                    o.oPos = v.vertex; // 保存模型坐标空间的坐标位置

                    o.vertex = UnityObjectToClipPos(v.vertex);

                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);

                    UNITY_TRANSFER_FOG(o,o.vertex);

                    return o;

                }

                fixed4 frag(v2f i) : SV_Target

                {

                    fixed4 col = tex2D(_MainTex, i.uv);

                    clip(_Cutoff - i.oPos.x); // 主要是这个,根据高度裁剪

                    UNITY_APPLY_FOG(i.fogCoord, col);

                    return col;

                }

                ENDCG

            }

        }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容