模糊着色器(Grab pass)在编辑器中显示粉红色但在移动设备上工作

时间:2017-10-19 05:48:38

标签: unity3d hlsl cg

这个着色器适用于移动设备,但在编辑器中显示为粉红色。以前它工作正常,但不知何故,我建立在移动设备上,然后它开始显示为粉红色。没错,但它给了我警告。我正在使用Unity 2017.2。

我也尝试重新打开项目。但仍然相同。

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

因此,材料不断重置,我无法在Unity Editor中查看和测试。

1 个答案:

答案 0 :(得分:0)

只需删除#pragma target 4.0,即可正常使用。

所以,

#ifndef SHADER_API_D3D11
      #pragma target 3.0
#endif
  

pragma target 4.0无法使用mac。 (我正在使用IMac)