unity 馬賽克shader

Shader "PengLu/Unlit/MosaicVF" {  
Properties {  
    _MainTex ("Base (RGB)", 2D) = "white" {}  
    _MosaicSize("MosaicSize", int)=5  
}  
  
SubShader {  
    Tags { "RenderType"="Opaque" }  
    LOD 100  
      
    Pass {    
        CGPROGRAM  
            #pragma vertex vert  
            #pragma fragment frag  
         
             
            #include "UnityCG.cginc"  
  
            struct appdata_t {  
                float4 vertex : POSITION;  
                float2 texcoord : TEXCOORD0;  
                  
            };  
  
            struct v2f {  
                float4 vertex : SV_POSITION;  
                float2 texcoord : TEXCOORD0;  
              
              
            };  
  
            sampler2D _MainTex;  
            float4 _MainTex_ST;  
            half4 _MainTex_TexelSize;  
            int _MosaicSize;  
            v2f vert (appdata_t v)  
            {  
                v2f o;  
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);  
                o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);  
                  
                return o;  
            }  
              
            fixed4 frag (v2f i) : SV_Target  
            {  
               //float2 uv = (i.texcoord*_MainTex_TexelSize.zw) ;//將紋理坐標映射到分辨率的大小  
      //         uv = floor(uv/_MosaicSize)*_MosaicSize;//根據馬賽克塊大小進行取整  
      //         i.texcoord =uv*_MainTex_TexelSize.xy;//把坐標重新映射回0,1的范圍之內  
      //         fixed4 col = tex2D(_MainTex, i.texcoord);  

                float2 uv = i.texcoord * float2(1000,1000) ;  
                uv = floor(uv/_MosaicSize)*_MosaicSize;
                i.texcoord =uv* float2(0.001,0.001) ;  
                fixed4 col = tex2D(_MainTex, i.texcoord);  
              
                //UNITY_OPAQUE_ALPHA(col.a);  
              
                return col;  
            }  
        ENDCG  
    }  
}  
  
}  

如果用于屏幕特效,則是全屏都是馬賽克

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容