2017-12-06 3 views
0

私は本当に初心者です。これは初めての私がユニティモバイルゲーム用のシェーダを書いたことです。デカールシェーダがデバイス上で動作していない

   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" 
      } 

だから任意のヘルプは非常に歓迎:)となり、また、一つのことは、私はこれのパフォーマンスわからないんだけど、明確にする:ここで はよくエディタ上ではなく、私のAndroidデバイス上で作業し、シェーダですシェーダはモバイル用に十分ですか?

ありがとうございました!

+0

お使いのデバイスでサポートされているGraphics APIは何ですか? – Shaman

+0

私のユニティのplayerSettingsで、グラフィックAPIがOpenGLES2に設定されています –

答えて

1

このによれば、OpenGL ES 2.0は、1つのシェーダで最大8つのテクスチャのみをサポートしています。 また、編集>グラフィックエミュレーションメニューに移動し、OpenGL ES 2.0を選択すると、シェーダの警告が表示されます。

私はこのシェーダの性能がモバイルにとって十分であるとは確信していませんか?

sampler2Dのを1つのシェーダに使用しています。また、シェーダコードでは高価な数学関数を使わないでください。あなたのシェーダはモバイル用に高価です。

モバイル最適化herehereについて詳しく読むことができます。

+0

ああ、それはシェーダーがデバイス上で動作していない理由です! ありがとう、リンクありがとう! –

0

だから私は間違ったやり方だと思っています。このシェーダは文字のカスタマイズのために実行され、シェイダーのスキルは0に近いので、私はこの解決策をあきらめます。

最後に、実行時に必要なテクスチャをマージし、その結果をモバイルシェーダに適用する方がよいと思います。

関連する問題