本文主要是介绍Unity urp渲染管线下,动态修改材质球surfaceType,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在项目中遇到了需要代码动态修改材质球的surfaceType,使其动态切换是否透明的需求。
urp渲染管线下,动态修改材质球的surfaceType,查了大部分帖子,都有一些瑕疵,可能会造成透明后阴影投射有问题。
其次在webgl平台上,可能还会造成透明物体仍会发生镜面反射的问题,进而出现模型曝光,与编辑器中展示效果差别过大
下面的方法解决了这类问题
private void setTransparent(Material mat, bool isTransparent){if (isTransparent){//修改surfacetype为Transparentmat.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);}}
这篇关于Unity urp渲染管线下,动态修改材质球surfaceType的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!