纹理坐标不一致

时间:2018-03-13 18:40:36

标签: android unity3d graphics opengl-es

我尝试在四元组中平铺纹理坐标以进行一些调试。

在桌面上它没有问题但是在android(旧平板电脑)上我看到纹理坐标不一致(下面的图像链接显示结果)。
当我们从0.0,0.0到1.0,1.0时,纹理坐标变得不一致。 随着平铺值上升,不一致性增加,图像中的结果为60,160。

我的设备的Android版本是5.0,GPU支持opengl es 2.0而不是3.0。

所以我想知道为什么这会在我的平板电脑上发生,而不是在我的桌面上发生,我会很感激有关gpu中正在发生的事情的信息。

我使用的着色器 -

Shader "Unlit/uvdisplay"
{
    Properties
    {
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

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

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = fixed4(frac(i.uv*fixed2(60.0,160.0)),0.0,1.0);
                return col;
            }
            ENDCG
        }
    }
}

texcoord at origin
texcoord at the opposit end

1 个答案:

答案 0 :(得分:1)

并非所有Android设备都支持片段着色器中的highp,一些较旧的设备仅限于mediump。

在Unity术语中,基于these定义,就好像您在片段着色器中要求float精度,但精度为half

除了尝试将值保持在原点附近以最大限度地减少错误之外,您可以做的不多。

此外,在一些仅支持半精度的设备上,只要您对纹理进行采样(即在使用纹理坐标之前不进行修改或调整),驱动程序/ GPU就可以使用纹理采样的全部精度。