URP打开半透明阴影unity技术分享

在URP下默认只有不透明才会有阴影,其实可以使用alpha test给shadowmap上画阴影, 物体本身则使用alpha blend这样也更加合理。
首先拷贝一下默认的Lit.shader,在Properties中添加一个Toggle变量来控制是否开启半透明阴影。
Properties
    {
        //....
 
        [Toggle]_TShadow("TShadow", Float) = 0
    }
    //....
    CustomEditor "MyLitShader"

在写一个shader面板,继承默认的BaseShaderGUI

private MaterialProperty tShadow;
    public override void FindProperties(MaterialProperty[] properties)
    {
        base.FindProperties(properties);
        litProperties = new LitGUI.LitProperties(properties);
        tShadow = BaseShaderGUI.FindProperty("_TShadow", properties, false);
    }

根据Toggle决定是否启动半透明阴影:参考:unity技术详解

public override void DrawSurfaceInputs(Material material)
    {
        base.DrawSurfaceInputs(material);
        LitGUI.Inputs(litProperties, materialEditor, material);
        DrawEmissionProperties(material, true);
        DrawTileOffset(materialEditor, baseMapProp);
 
 
        //绘制半透明阴影
        SurfaceType surfaceType = (SurfaceType)material.GetFloat("_Surface");
 
        if(surfaceType == SurfaceType.Transparent)
        {
            materialEditor.ShaderProperty(tShadow, "半透明阴影");
            material.SetShaderPassEnabled("ShadowCaster", (material.GetFloat("_TShadow") == 1.0));
        }
        else
        {
            material.SetShaderPassEnabled("ShadowCaster", true);
        }
    }
然后在面板中启动半透明阴影,如下图所示,启动半透明阴影,然后是Alpha Clipping,通过观察URP源码发现,如果不想影响到半透明渲染,只给阴影生效,也可以自己拓展一个Threshold变量在ShadowCaster中使用alpha Test,这里就关闭面板上的alpha clipping。

最终半透明物体可以产生阴影了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值