我是个新手,这是我第一次为unity手机游戏写着色器。这是一个着色器,在Editor上运行良好,但在我的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"
}因此,任何帮助都将是非常受欢迎的:),还有一件事需要澄清,我不确定这个着色器的性能对于移动设备是否足够好?
非常感谢!
发布于 2017-12-08 08:20:03
根据该Unity Manual,OpenGL ES 2.0在单个着色器中仅支持最多8个纹理。此外,如果转到编辑>图形仿真菜单并选择OpenGL ES 2.0,则可以看到有关它的材质球警告。
我不确定这个着色器的性能在移动设备上是否足够好?
您在单个着色器中使用了太多Sampler2D的。另外,你应该避免在着色器代码中使用昂贵的数学函数。您的着色器对于移动设备来说是昂贵的。
发布于 2017-12-08 16:39:58
所以现在我觉得我做错了。这个着色器是为角色定制而做的,我的着色器技能接近于0,所以我将放弃这个解决方案。
最后,我认为最好是在运行时合并所需的纹理,并将结果应用于移动着色器。
https://stackoverflow.com/questions/47677250
复制相似问题