Unity urp渲染管线下,动态修改材质球surfaceType

在项目中遇到了需要代码动态修改材质球的surfaceType,使其动态切换是否透明的需求。

urp渲染管线下,动态修改材质球的surfaceType,查了大部分帖子,都有一些瑕疵,可能会造成透明后阴影投射有问题。

其次在webgl平台上,可能还会造成透明物体仍会发生镜面反射的问题,进而出现模型曝光,与编辑器中展示效果差别过大

下面的方法解决了这类问题

cs 复制代码
 private void setTransparent(Material mat, bool isTransparent)
    {
        if (isTransparent)
        {
            //修改surfacetype为Transparent
            mat.SetFloat("_Surface", 1.0f);

            mat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
            mat.SetInt("_DstBlend",(int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
            mat.SetInt("_ZWrite", 0);

            mat.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
            mat.DisableKeyword("_ALPHAPREMULTIPLY_ON");
            mat.SetShaderPassEnabled("ShadowCaster", false);
        }
        else
        {
            mat.SetFloat("_Surface", 0.0f);
            mat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
            mat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
            mat.SetInt("_ZWrite", 1);

            mat.renderQueue = -1;
            mat.DisableKeyword("_ALPHAPREMULTIPLY_ON");
            mat.SetShaderPassEnabled("ShadowCaster", true);
            
        }
    }
相关推荐
绀目澄清13 分钟前
Unity 的AI Navigation 系统详细总结
人工智能·unity·游戏引擎
绀目澄清2 小时前
Unity3D AI Navigation 详解:从基础概念到实战应用
unity·游戏引擎
weixin_409383122 小时前
cocos shader流光文字 不显示透明部分
游戏引擎·cocos2d
绀目澄清3 小时前
Unity3D AI导航系统完全指南:从核心概念到动画耦合
人工智能·unity
__water3 小时前
RHK《模型贴图自由更换位置》
unity·贴图·模型贴图·移动不丢失
JIes__3 小时前
Unity(二)——3D数学
unity·游戏引擎
淡海水3 小时前
【节点】[RandomRange节点]原理解析与实际应用
unity·游戏引擎·shadergraph·图形·randomrange
weixin_4242946719 小时前
在Unity中,摄像机移动时出现“残影”或“闪烁”是常见问题,主要原因和处理方法。
unity·游戏引擎
孟无岐19 小时前
【Laya】Browser 使用说明
typescript·游戏引擎·游戏程序·laya
天人合一peng19 小时前
unity 3d 通过游戏对象的名子查到其对象
游戏·unity·游戏引擎