Страница 1 из 1

Box Filter

СообщениеДобавлено: 22 окт 2010, 06:34
gnoblin
Шейдер, который размывает текстуру по алгоритму Box Filter.
Размер текстуры (1024х1024) захардкодил в коде шейдера, и надеюсь нигде не накосячил :).

Синтаксис:
Используется glsl
Shader "ImageProc BoxFilter" {
 Properties {
      _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader {
      Tags { "RenderType" = "Opaque" }
      CGPROGRAM
      #pragma surface surf Lambert

      struct Input {
          float2 uv_MainTex;
      };
     
      sampler2D _MainTex;
      void surf (Input IN, inout SurfaceOutput o) {
          float4 col = float4(0,0,0,0);
          //сам фильтр
          float4 samples[4] = {
                        -1.0, 0.0, 0, 0.25,
                        1.0, 0.0, 0, 0.25,
                        0.0, 1.0, 0, 0.25,
                        0.0, -1.0, 0, 0.25
                  };
         
          // Sample and output the box averaged colors
          for(int i=0;i<4;i++)
          {
                        col += samples[i].w*tex2D(_MainTex, IN.uv_MainTex + float2(samples[i].x/1024, samples[i].y/1024));
          }
                 
          o.Albedo = col;        
      }
      ENDCG
    }
    Fallback "Diffuse"
  }

Re: Box Filter

СообщениеДобавлено: 22 окт 2010, 19:36
gnoblin
Ура, теперь знаю как не задавать размер текстуры в коде (используя _TexelSize).

uniform sampler2D _BumpMap;
uniform float4 _BumpMap_TexelSize;

http://forum.unity3d.com/threads/57275- ... Resolution

Вопрос: чем помогает ключевое слово uniform?

Re: Box Filter

СообщениеДобавлено: 22 окт 2010, 22:30
Neodrop
Сдаётся мне, что это намёк на то, что текстура в степени двойки. (popcorn)
Но, может я и не прав.