【Shader】UnityShader那些莫名其妙的bug

目录

一、iOS环境

1、编辑器环境

①渲染超大贴图8192尺寸时,渲染情况异常

2、真机环境

二、安卓环境

1、编辑器环境

②渲染粒子特效小贴图时,渲染异常。(可能iOS环境也存在问题!)

三、PC环境


一、iOS环境

1、编辑器环境

①渲染超大贴图8192尺寸时,渲染情况异常

具体问题:一个粒子特效,渲染粒子贴图时透明混合无效了,就像是alpha值没有了一样,shader是简单的顶点片元着色器,采样了摄像机深度图和计算投影空间的自身深度进行基于深度的边缘检测,接着是各种混合贴图和噪声影响得到RGB,Alpha值最终取边缘检测值*一些乱七八糟的遮罩值等等输出,但就是透明混合跟没了一样。

解决方法:将贴图尺寸MaxSize改小 或 直接叫美术改小贴图

2、真机环境

暂无

二、安卓环境

1、编辑器环境

②渲染粒子特效小贴图时,渲染异常。(可能iOS环境也存在问题!)

具体问题:和iOS环境的①一样情况,当我将贴图转为小贴图时,可能也会出现同样的问题,即alpha值无效了!原因是iOS平台下的摄像机深度纹理并没有自动设置。

解决方案:获取摄像机组件camera,接着设置为深度贴图模式,具体代码如下,必须在渲染之前设置好这个参数。(注意可能设置了也无效,重启Unity试试看)

    private void OnEnable()
    {
        //设置摄像机的depthTextureMode,这样摄像机就会将摄像机计算出的屏幕深度纹理传递到Shader
        camera.depthTextureMode |= DepthTextureMode.Depth;
    }

三、PC环境

暂无

猜你喜欢

转载自blog.csdn.net/qq_39574690/article/details/115100218