2017-10-19 5 views
0

Ce travail de shader sur mobile, mais dans l'éditeur, il a montré en rose. Auparavant, il fonctionne bien, mais de toute façon, après avoir construit sur le mobile, alors il commence à montrer comme rose. Pas d'erreur mais ça me donne un avertissement. J'utilise Unity 2017.2.Blur shader (Grab pass) a montré rose dans l'éditeur, mais travailler dans le mobile

J'essaie également de rouvrir le projet. mais toujours pareil.

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

cause de cela, le matériau à garder la réinitialisation et je ne peux pas voir et tester dans Unity Editor.

Répondre

0

Retirez simplement le #pragma target 4.0 et cela fonctionnera bien.

Ainsi,

#ifndef SHADER_API_D3D11 
     #pragma target 3.0 
#endif 

cible pragma 4.0 fonctionne pas avec Mac. (J'utilise IMac)