首页 >Unity3D频道 >【Unity3D研究院之游戏开发】 > URP打开半透明阴影(一百二十七)
2021
09-11

URP打开半透明阴影(一百二十七)

在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决定是否启动半透明阴影

    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。

URP打开半透明阴影(一百二十七) - 雨松MOMO程序研究院 - 1

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

URP打开半透明阴影(一百二十七) - 雨松MOMO程序研究院 - 2

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

URP打开半透明阴影(一百二十七)》有 2 条评论

  1. 说:

    大佬在2020 2021测试,会出现有阴影,但是物体透明了

留下一个回复

你的email不会被公开。 必填项已用 * 标注。