sunshine56 2016-07-08 08:52 采纳率: 0%
浏览 2513
已结题

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

这是我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条回答 默认 最新

  • zqbnqsdsmd 2017-03-13 00:12
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度