Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 贴花着色器在设备上不工作_Android_Unity3d_Mobile_Shader - Fatal编程技术网

Android 贴花着色器在设备上不工作

Android 贴花着色器在设备上不工作,android,unity3d,mobile,shader,Android,Unity3d,Mobile,Shader,我是个新手,这是我第一次为unity手机游戏编写着色器。 这是一个着色器,在编辑器上运行良好,但在我的android设备上不起作用: Shader "Decal" { Properties { _Skin("Skin (RGB)", 2D) = "white" {} _Dirt("Dirt (RGBA)", 2D) = "black" {} _Outfit("Ou

我是个新手,这是我第一次为unity手机游戏编写着色器。 这是一个着色器,在编辑器上运行良好,但在我的android设备上不起作用:

                Shader "Decal" {
            Properties {
             _Skin("Skin (RGB)", 2D) = "white" {}
             _Dirt("Dirt (RGBA)", 2D) = "black" {}
             _Outfit("Outfit (RGBA)", 2D) = "black" {}
             _Painting("Painting (RGBA)", 2D) = "black" {}
             _Cheek("Cheek (RGBA)", 2D) = "black" {}
             _LipStick("LipStick (RGBA)", 2D) = "black" {}
             _Eye("Eye (RGBA)", 2D) = "black" {}
             _EyeLid("EyeLid (RGBA)", 2D) = "black" {}
             _ShadowHat("ShadowHat (RGBA)", 2D) = "black" {}
            }
            SubShader {
            Tags { "RenderType"="Opaque" }
            LOD 150

            CGPROGRAM
            #pragma surface surf Lambert noforwardadd

            sampler2D _Skin;
            sampler2D _Dirt;
            sampler2D _Outfit;
            sampler2D _Painting;
            sampler2D _Cheek;
            sampler2D _LipStick;
            sampler2D _Eye;
            sampler2D _EyeLid;
            sampler2D _ShadowHat;

            struct Input {
            float2 uv_Skin;
            };

            void surf (Input IN, inout SurfaceOutput o) {
            fixed4 c = tex2D(_Skin, IN.uv_Skin);
            fixed4 dirt = tex2D(_Dirt, IN.uv_Skin);
            fixed4 outfit = tex2D(_Outfit, IN.uv_Skin);
            fixed4 painting = tex2D(_Painting, IN.uv_Skin);
            fixed4 cheek = tex2D(_Cheek, IN.uv_Skin);
            fixed4 lipstick = tex2D(_LipStick, IN.uv_Skin);
            fixed4 eye = tex2D(_Eye, IN.uv_Skin);
            fixed4 eyelid = tex2D(_EyeLid, IN.uv_Skin);
            fixed4 shadowHat = tex2D(_ShadowHat, IN.uv_Skin);

            c.rgb = lerp (c.rgb, dirt.rgb, dirt.a);
            c.rgb = lerp (c.rgb, outfit.rgb, outfit.a);
            c.rgb = lerp (c.rgb, painting.rgb, painting.a);
            c.rgb = lerp (c.rgb, cheek.rgb, cheek.a);
            c.rgb = lerp (c.rgb, lipstick.rgb, lipstick.a);
            c.rgb = lerp (c.rgb, eye.rgb, eye.a);
            c.rgb = lerp (c.rgb, eyelid.rgb, eyelid.a);
            c.rgb = lerp (c.rgb, shadowHat.rgb, shadowHat.a);

            o.Albedo = c.rgb;
            o.Alpha = c.a;
            }
            ENDCG
            }

            Fallback "Mobile/VertexLit"
            }
所以任何帮助都是非常受欢迎的:),还有一件事需要澄清,我不确定这个着色器的性能对于移动设备是否足够好

非常感谢

据此,OpenGL ES 2.0仅支持单个着色器中最多8个纹理。 此外,如果您转到编辑>图形仿真菜单并选择OpenGL ES 2.0,您可以看到它的着色器警告

我不确定这个着色器的性能是否适合移动设备

在单个着色器中使用了太多的采样器2D。此外,还应避免着色器代码中使用昂贵的数学函数。你的着色器对于移动设备来说很昂贵


你可以阅读更多关于移动优化和应用的信息。

所以现在我觉得我做得不对。此着色器用于角色自定义,我的着色器技能接近0,因此我将放弃此解决方案


最后,我认为最好在运行时合并所需的纹理,并将结果应用于移动着色器。

您的设备支持的图形API是什么?在my Unity的playerSettings上,图形API设置为OpenGLES2Oh ok,这就是着色器无法在设备上工作的原因!谢谢,谢谢你的链接!