Unity里vertexShader里压扁模型来实现比较low的阴影

只有阴影pass,请自行合并,需要指定高度,忽略深度检测,需要控制好排序,或者去掉忽略,视情况而定,最后我觉得还是shadowmap好

 

Shader "Custom/MeshShadow" 
{
    Properties 
    {
        _ShadowOffset("ShadowOffset",vector) = (0,0,0,0)
        _ShadowHeight("ShadowHeight",float) = 0
    }
    SubShader 
    {
        Tags { "RenderType"="Opaque"  "Queue"="Transparent"}
        Pass
        {
            Name "MeshShadow"
            Tags {"LightMode" = "Always"}

            Blend One OneMinusSrcAlpha 
            ZWrite Off 
            ZTest Always

            Stencil 
            {
                Ref 2
                Comp NotEqual
                Pass Replace
            }
            
            CGPROGRAM
            #include "UnityCG.cginc"
            #pragma vertex vert
            #pragma fragment frag 

            float4 _ShadowOffset;
            float _ShadowHeight;
            
            struct v2f 
            {
                float4 pos : POSITION;
                float4 texcoord : TEXCOORD0;
            };
            
            v2f vert ( appdata_base v )
            {
                v2f o;
                float4x4 _RotMatrix = _Object2World;
                _RotMatrix[0][3] = 0;
                _RotMatrix[1][3] = 0;
                _RotMatrix[2][3] = 0;
                float3 tempPos = float3(_Object2World[0][3],_Object2World[1][3],_Object2World[2][3]);
                
                float4 vertexPos = mul(_RotMatrix,v.vertex);
                vertexPos.x += _ShadowOffset.x * vertexPos.y + _ShadowOffset.x;
                vertexPos.z += _ShadowOffset.y * vertexPos.y + _ShadowOffset.y;
                vertexPos.xyz += tempPos;
                vertexPos.y = _ShadowHeight;
                
                o.pos = mul(UNITY_MATRIX_VP, vertexPos);
                o.texcoord = v.texcoord;
                return o; 
            }
            
            fixed4 frag(v2f i) :COLOR 
            { 
                return fixed4(0,0,0,0.3);
            }
            ENDCG
        }
    } 

}
View Code

 

转载于:https://www.cnblogs.com/sitt/p/5171317.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值