海水shader问题,渐变效果出不来, 手机和PC上效果不同 1C

这是我shader

 Shader "Custom/SeaSimple_1"
{
    Properties
    {    _Color0("Water Color",Color) = (1,1,1,1)//水的颜色
        _Color1("Water Depth",Color) = (0,0,0,0)//水的深度的颜色
        _Alpha("Alpha",Range( 0,1))= 1//水面的正题透明度
        _ColorDepth("ColorDepth",Range( 0,1))= 0//水的深度
    }
    SubShader
    {
        Tags {"RenderType"="Transparent" "Queue"="Transparent"}
        zwrite off
        Pass
        {
            Blend SrcAlpha OneMinusSrcAlpha 
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct VertexOutput
            {
                float2 uv : TEXCOORD0;
                float4 pos : SV_POSITION;
                float4 scrPos : TEXCOORD1;
            };


            float4 _Color0;
            float4 _Color1;
            float _Alpha;//水的透明度
            float _ColorDepth;

            sampler2D _CameraDepthTexture;

            VertexOutput vert (appdata v)
            {
                VertexOutput o;

                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                o.scrPos = ComputeScreenPos(o.pos);//将返回片段着色器的屏幕位置
                COMPUTE_EYEDEPTH(o.scrPos.z);//计算顶点摄像机空间的深度:距离裁剪平面的距离
                return o;
            }

            fixed4 frag (VertexOutput i) : COLOR
            {
                //计算当前像素深度
                float  depth= tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.scrPos)).r;//UNITY_PROJ_COORD:深度值 [0,1]
                depth = LinearEyeDepth(depth);//深度根据相机的裁剪范围的值[0.3,1000],是将经过透视投影变换的深度值还原了
                depth -= i.scrPos.z;
                //计算水的透明度: 使用深度值
                float alpha = saturate( _Alpha*depth);

                //计算颜色深度:
                float colDepth = saturate(_ColorDepth*depth);
                colDepth = 1-colDepth;
                colDepth = lerp(colDepth, colDepth*colDepth*colDepth, 0.5);//调整深度,看个人喜好

                half3 col;
                col.rgb = lerp(_Color0.rgb, _Color1.rgb, colDepth);

                return float4(col.rgb, alpha );  
            }
            ENDCG
        }
    }
}

这是电脑上效果 ,目前安卓也可以了,就iphone不行
图片说明
这是iphone上效果
图片说明

求大神指点

2个回答

可能是计算精度丢失问题,把相机Near参数改大,比如5这样,然后在手机上打包试试

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问