2DSprite的实时阴影

看AliveGameStudio的视频发现他的2D场景的阴影好像是实时的

 经UP大神指点 主要参考这个帖子 

http://forum.unity3d.com/threads/sprites-bumped-diffuse-shader-and-transparent-cutout-bumped-diffuse-with-shadows.217827/

果然是实时阴影 

其实只要打开SpriteRneder的Shadow开关就能渲染阴影了

void OnEnable()
    {
        
        transform.GetComponent<SpriteRenderer>().renderer.receiveShadows = true;
        transform.GetComponent<SpriteRenderer>().renderer.castShadows = true;
        
    }

但是 2DSprite 用的默认的Material  Sprites-Deafult 的Shader是不受光照影响的 没有光照当然没有阴影 所以还要把Shader换成受光照的漫反射Shader  但是换成系统的 Default-Diffuse 会发现贴图的透明通道也被渲染上去了  所以还要进行透明通道的裁剪. 下过来的Shader的渲染队列是Transparent 这样会导致 Deferred模式下的非平行不能照亮物体,没有起到光照的作用 所以渲染队列改成Geometry

Shader "Custom/SpriteDiffuse"
{
    Properties
    {
        _MainTex("Albedo (RGB)", 2D) = "white" {}
		_Color("Color Tint",Color)=(1,1,1,1)
		_AlphaCut("AlphaCut",Range(0,1))=1
     }

    SubShader
    {
        Tags { "RenderType"="TransparentCutOut" "Queue"="Geometry" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Lambert addShadow alphatest:_AlphaCut

        sampler2D _MainTex;
        fixed4 _Color;
		


        struct Input
        {
            float2 uv_MainTex;
			fixed4 color:COLOR;
        };

        void surf(Input IN, inout SurfaceOutput o)
        {
            half4 c = tex2D(_MainTex, IN.uv_MainTex)*IN.color*_Color;

            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}


把材质球换成这个Shader后物体就能渲染2D阴影了  




  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值