微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity法庭地图不适用于Android设备

我是一位经验丰富的原生iOS开发人员,通过Unity首次涉足Android.我正在尝试设置自定义着色器,但我在使用法线贴图时遇到了一些麻烦.我让它们在我的计算机上的Unity模拟器中完美运行,但是当我构建到实际设备(三星galaxy S8)时,法线贴图根本不起作用.

我正在使用火星作为我的测试用例.这是在我的计算机上的模拟器中运行的模型:

Computer version

这是我设备的截图,运行完全相同的代码.

Android device version

我做了很多研究,显然在Android上使用Unity的普通地图并不容易.有很多人都在询问它,但几乎我发现的每一个答案都表示诀窍是覆盖纹理导入设置,并强制它为“Truecolor”,根据Unity’s documentation,它似乎是“RGBA 32位”但是,这对我没有帮助.

一个线程建议将Asino Level降低到零,另一个建议关闭Mip Maps.我不知道其中任何一个是什么,但都没有帮助.

Texture Import Settings

这是我的着色器代码,简化但包含对法线贴图的所有引用:

void surf (Input IN, inout SurfaceOutputStandard o) {
        half4 d = tex2D (_MainTex , IN.uv_MainTex);
        half4 n = tex2D (_BumpMap , IN.uv_BumpMap);

        o.Albedo = d.rgb;
        o.normal = Unpacknormal(n);
        o.Metallic = 0.0;
        o.Smoothness = 0.0;
    }

我已经看到一些线程建议在着色器代码中替换“Unpacknormal()”函数,表明它可能不是在Android或移动设备上做的事情,但是没有任何建议的替换更改了更好的内容或者更糟糕的是:法线贴图继续在模拟器中工作,但不在设备上.

我甚至尝试从灰度高度图以编程方式制作我自己的法线贴图,以试图绕过我可能做错的任何导入设置.这是我使用的代码,它再次在模拟器中工作,但在设备上不起作用.

public Texture2D normalMap(Texture2D source, float strength = 10.0f) {
    Texture2D normalTexture;
    float xLeft;
    float xRight;
    float yUp;
    float yDown;
    float yDelta;
    float xDelta;

    normalTexture = new Texture2D (source.width, source.height, TextureFormat.RGBA32, false, true);

    for (int y=0; y<source.height; y++) {
        for (int x=0; x<source.width; x++) {
            xLeft = source.GetPixel (x - 1, y).grayscale * strength;
            xRight = source.GetPixel (x + 1, y).grayscale * strength;
            yUp = source.GetPixel (x, y - 1).grayscale * strength;
            yDown = source.GetPixel (x, y + 1).grayscale * strength;
            xDelta = ((xLeft - xRight) + 1) * 0.5f;
            yDelta = ((yUp - yDown) + 1) * 0.5f;
            normalTexture.SetPixel(x,y,new Color(xDelta,yDelta,1.0f,yDelta));
        }
    }
    normalTexture.Apply();

    return normalTexture;
}

最后,在构建设置中,我已将平台设置为Android,并且我已尝试使用纹理压缩设置为“不覆盖”和“ETC(认)”.前者是原始设置,后者似乎是Unity的名称和文档中的建议.

我确定只有一些我没有检查过的旗帜或者我没有翻过的开关,但是我不能为我的生活弄清楚我在这里做错了什么,或者为什么会有这么顽固模拟器和设备之间的差异.

任何人都可以帮助Unity新手,并告诉我这些该死的法线贴图应该如何在Android上运行?

解决方法:

检查下:

Edit -> Project Settings -> Quality

Android通常设置为Fastest.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐