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);
            
        }
    }
相关推荐
泡椒鸡脚10 小时前
AI室内设计风格融合:把布局、材质和光影参考分开写
人工智能·材质
FairGuard手游加固10 小时前
手游加固怎么做?SO、IL2CPP、AssetBundle 与运行时保护详解
安全·游戏·unity
三棵树园艺16 小时前
餐饮店秋色系仿真花艺造景:从选材到施工的完整落地方案
创业创新·材质
2601_9653011320 小时前
自邦商用洗地机采用全不锈钢机身材质解析
材质·自邦商用洗地机
阿松爱学习2 天前
【Unity开发】监听Scene场景事件
unity·c#
三棵树园艺2 天前
餐饮空间仿真植物软装选型指南:从材质参数到阻燃标准的技术方案
材质
xiaogai_gai2 天前
BOM 物料清单同步实战:金蝶云星空 → 四化智造 MES 修改场景深度拆解
unity·游戏引擎
淡海水2 天前
03-03-架构篇-SGen GC架构解析
unity·架构·c#·gc·sgen
/**书香门第*/2 天前
Cocos Creator 打螺丝游戏的实现
游戏引擎·cocos2d·螺丝·打螺丝
萌萌的提莫队长3 天前
Unity相机捕捉,图像识别,抠像+合成
opencv·unity