2017-04-22 6 views
0

Ich lerne, wie man Shader in Unity macht und ich habe eine Frage zu Shadern, die auf Sprites angewendet werden.Wie zeichne ich Außensprites-Grenzen mit Unity-Shadern?

Ich habe einen Shader, die einen Sprit eine Verzerrung Effekt zu erzeugen modifiziert:

cat with distortion effect

Aber, wie man auf dem Bild oben verlinkten sehen kann, mein Sprit auf den Grenzen des Sprites geschnitten wird.

Gibt es eine Möglichkeit, diesen Schnitt zu vermeiden und das fehlende Teil zu zeichnen?

Mein Shader:

Shader "Shader101/testShader" 
{ 
    Properties 
    { 
     _MainTex("Texture", 2D) = "white" {} 
     _DisplaceTex("Displacement Texture", 2D) = "white" {} 
     _Power("Power", Range(-0.4, 0.4)) = 0 
    } 

    SubShader 
    { 
     Tags 
     { 
      "Queue" = "Transparent" 
     } 

     Pass 
     { 
      Blend SrcAlpha OneMinusSrcAlpha 

      CGPROGRAM 
      #pragma vertex vert 
      #pragma fragment frag 

      #include "UnityCG.cginc" 

      struct appdata 
      { 
       float4 vertex : POSITION; 
       float2 uv : TEXCOORD0; 
      }; 

      struct v2f 
      { 
       float4 vertex : SV_POSITION; 
       float2 uv : TEXCOORD0; 
      }; 

      v2f vert (appdata v) 
      { 
       v2f o; 
       o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); 
       o.uv = v.uv; 
       return o; 
      } 

      sampler2D _MainTex; 
      sampler2D _DisplaceTex; 
      float _Power; 

      fixed4 frag (v2f i) : SV_Target 
      { 
       float2 distuv = float2(0, i.uv.y + _Time.x * 2); 

       float2 wave = tex2D(_DisplaceTex, distuv * 5 ).xy; 
       wave = ((wave * 2) - 1) * _Power - 0.25; 

       float4 color = tex2D(_MainTex, i.uv + float2(wave.y, 0)); 
       return color; 
      } 
      ENDCG 
     } 
    } 
} 

Sorry für mein schlechtes Englisch: |

Danke

Antwort

0

einen Blick auf die Szene Blick nehmen mit schattigen Drahtgitter-Modus auf.

Hier sollten Sie sehen, dass Ihr Shader die Eckpunktposition nicht ändert, sondern nur die gerenderten Pixelfarben im Fragment-Shader ändert. Daher kann es nicht außerhalb des Netzes zeichnen.

Der einfachste Weg, um es zu beheben, wäre die Sprite-Textur mit transparenteren Bereichen um Ihre Katze zu ändern. (In Photoshop> Bild> Leinwandgröße ...)

+0

Vielen Dank für Ihre Antwort. Aber gibt es eine Möglichkeit, einen Offset um mein Sprite mit Shader hinzuzufügen? – Mulokun