2017-04-22 67 views
0

我正在学习如何在Unity中制作着色器,并且有关于在着色器上应用着色器的问题。如何使用Unity的着色器绘制外部精灵界限?

我做了哪些修改精灵创建变形效果的着色器:

cat with distortion effect

但是,正如你可以在上面链接的图片中看到,我的精灵上切割精灵的边界。

有什么办法可以避免这种切割并画出缺失的部分?

我的着色器:

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

对不起,我的英文不好:|

谢谢

回答

0

看看你的场景视图上有阴影线框模式。

在这里您应该看到您的着色器不会更改顶点位置,但只会更改片段着色器中呈现的像素颜色。因此它不能在网格外面绘制。

解决这个问题的最简单方法是修改你的猫周围更透明区域的精灵纹理。 (在Photoshop>图像>画布尺寸...)

+0

感谢您的回答。 但是有没有办法在着色器周围添加我的精灵的偏移量? – Mulokun