2017-10-19 3 views
0

Dieser Shader funktioniert auf Handy, aber im Editor zeigte es als rosa. Früher funktioniert es gut, aber irgendwie, nachdem ich auf Handy gebaut habe, Dann fing es an, als rosa zu zeigen. Kein Fehler, aber es gibt mir eine Warnung. Ich verwende Unity 2017.2.Blur Shader (Grab-Pass) zeigte rosa im Editor, aber arbeiten in mobilen

Ich versuche auch, das Projekt wieder zu öffnen. aber immer noch gleich.

Shader "TFTM/Blur" { 
    Properties { 
    _blurSizeXY("BlurSizeXY", Range(0,10)) = 0 
} 
SubShader { 

    // Draw ourselves after all opaque geometry 
    Tags { "Queue" = "Transparent" } 

    // Grab the screen behind the object into _GrabTexture 
    GrabPass { } 

    // Render the object with the texture generated above 
    Pass { 
     CGPROGRAM 
     #pragma debug 
     #pragma vertex vert 
     #pragma fragment frag 
     #ifndef SHADER_API_D3D11 

      #pragma target 3.0 

     #else 

      #pragma target 4.0 

     #endif 

     sampler2D _GrabTexture : register(s0); 
     float _blurSizeXY; 

     struct data { 
      float4 vertex : POSITION; 
      float3 normal : NORMAL; 
     }; 

     struct v2f { 
      float4 position : POSITION; 
      float4 screenPos : TEXCOORD0; 
     }; 

     v2f vert(data i){ 
      v2f o; 
      o.position = UnityObjectToClipPos(i.vertex); 
      o.screenPos = o.position; 
      return o; 
     } 

     half4 frag(v2f i) : COLOR 
     { 

      float2 screenPos = i.screenPos.xy/i.screenPos.w; 
      float depth= _blurSizeXY*0.0005; 

      screenPos.x = (screenPos.x + 1) * 0.5; 

      screenPos.y = (screenPos.y + 1) * 0.5; 

      half4 sum = half4(0.0h,0.0h,0.0h,0.0h); 
      sum += tex2D(_GrabTexture, float2(screenPos.x-5.0 * depth, screenPos.y+5.0 * depth)) * 0.025;  
      sum += tex2D(_GrabTexture, float2(screenPos.x+5.0 * depth, screenPos.y-5.0 * depth)) * 0.025; 

      sum += tex2D(_GrabTexture, float2(screenPos.x-4.0 * depth, screenPos.y+4.0 * depth)) * 0.05; 
      sum += tex2D(_GrabTexture, float2(screenPos.x+4.0 * depth, screenPos.y-4.0 * depth)) * 0.05; 


      sum += tex2D(_GrabTexture, float2(screenPos.x-3.0 * depth, screenPos.y+3.0 * depth)) * 0.09; 
      sum += tex2D(_GrabTexture, float2(screenPos.x+3.0 * depth, screenPos.y-3.0 * depth)) * 0.09; 

      sum += tex2D(_GrabTexture, float2(screenPos.x-2.0 * depth, screenPos.y+2.0 * depth)) * 0.12; 
      sum += tex2D(_GrabTexture, float2(screenPos.x+2.0 * depth, screenPos.y-2.0 * depth)) * 0.12; 

      sum += tex2D(_GrabTexture, float2(screenPos.x-1.0 * depth, screenPos.y+1.0 * depth)) * 0.15; 
      sum += tex2D(_GrabTexture, float2(screenPos.x+1.0 * depth, screenPos.y-1.0 * depth)) * 0.15; 

      sum += tex2D(_GrabTexture, screenPos-5.0 * depth) * 0.025;  
      sum += tex2D(_GrabTexture, screenPos-4.0 * depth) * 0.05; 
      sum += tex2D(_GrabTexture, screenPos-3.0 * depth) * 0.09; 
      sum += tex2D(_GrabTexture, screenPos-2.0 * depth) * 0.12; 
      sum += tex2D(_GrabTexture, screenPos-1.0 * depth) * 0.15;  
      sum += tex2D(_GrabTexture, screenPos) * 0.16; 
      sum += tex2D(_GrabTexture, screenPos+5.0 * depth) * 0.15; 
      sum += tex2D(_GrabTexture, screenPos+4.0 * depth) * 0.12; 
      sum += tex2D(_GrabTexture, screenPos+3.0 * depth) * 0.09; 
      sum += tex2D(_GrabTexture, screenPos+2.0 * depth) * 0.05; 
      sum += tex2D(_GrabTexture, screenPos+1.0 * depth) * 0.025; 

      return sum/2; 
     } 
     ENDCG 
    } 
} 

Fallback Off 
} 

enter image description here

enter image description here

Wegen es, das Material immer wieder zurückzusetzen, und ich kann in Unity Editor nicht sehen und zu testen.

Antwort

0

Entfernen Sie einfach die #pragma target 4.0 und es wird gut funktionieren.

So

#ifndef SHADER_API_D3D11 
     #pragma target 3.0 
#endif 

Pragma Ziel 4.0 nicht mit Mac arbeiten. (Ich verwende IMac)

Verwandte Themen