Skip to content

Latest commit

ย 

History

History
109 lines (83 loc) ยท 2.79 KB

File metadata and controls

109 lines (83 loc) ยท 2.79 KB

์™ธ๊ณฝ์„  ์ฐพ๊ธฐ์™€ ์–‘๊ฐํšจ๊ณผ

์™ธ๊ณฝ์„  ์ฐพ๊ธฐ

์ปจ๋ฒŒ๋ฃจ์…˜ wiki: Convolution ํ˜„์žฌ ํ”ฝ์…€์„ ์ค‘์‹ฌ์œผ๋กœ ํ•ด์„œ ๊ทธ ์ฃผ์œ„์— ์žˆ๋Š” ํ”ฝ์…€๋งˆ๋‹ค ๊ฐ€์ค‘์น˜๋ฅผ ๊ณฑํ•œ ๋’ค, ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’์œผ๋กœ ํ˜„์žฌ ํ”ฝ์…€์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์—ฐ์‚ฐ
์ปค๋„ kernel ํ–‰๋ ฌ ํ˜•๋Œ€๋กœ ์ €์žฅํ•œ ๊ฐ€์ค‘์น˜์˜ ์ง‘ํ•ฉ

์†Œ๋ฒจ ์—ฐ์‚ฐ์ž์˜ ์ปค๋„

์ขŒ์šฐ ์™ธ๊ณฝ์„  ๊ฒ€์ถœ
     | -1  0 +1 |
Kx = | -2  0 +2 |
     | -1  0 +1 |

์ƒํ•˜ ์™ธ๊ณฝ์„  ๊ฒ€์ถœ
     | +1 +2 +1 |
Ky = |  0  0  0 |
     | -1 -2 -1 |

์ปจ๋ฒŒ๋ฃจ์…˜ ๊ฒฐ๊ณผ
L = sqrt(Lx * Lx + Ly * Ly)

shader

struct PS_INPUT
{
   float2 mUV : TEXCOORD0;
};

sampler2D SceneSampler;
float2 gPixelOffset;

float3x3 Kx = { -1,  0, +1,
                -2,  0, +2,
                -1,  0, +1};

float3x3 Ky = { +1, +2, +1,
                 0,  0,  0,
                -1, -2, -1};

float4 ps_main(PS_INPUT Input) : COLOR
{
   float Lx = 0;
   float Ly = 0;

   for (int y = -1; y <= 1; ++y)
   {
      for (int x = -1; x <= 1; ++x)
      {
         float2 offset = float2(x, y) * gPixelOffset;
         float3 tex = tex2D(SceneSampler, Input.mUV + offset).rgb;
         float luminance = dot(tex, float3(0.3f, 0.59f, 0.11f));

         Lx += luminance * Kx[y + 1][x + 1];
         Ly += luminance * Ky[y + 1][x + 1];
      }
   }

   float L = sqrt((Lx * Lx) + (Ly * Ly));
   return float4(L.xxx, 1);
}

์–‘๊ฐํšจ๊ณผ

๋Œ€๊ฐ ์—ฃ์ง€ ๊ฒ€์ถœ

     |  0 +1 +2 |
K\ = | -1  0 +1 |
     | -2 -1  0 |

     | -2 -1  0 |
K/ = | -1  0 +1 |
     |  0 +1 +2 |

๊ธฐํƒ€ ๊ณ ๊ธ‰ ํฌ์ŠคํŠธ์ดํŽ™ํŠธ ๊ธฐ๋ฒ•

  • ์ƒ‰์ƒ๋ณด์ •
  • HDR
  • vignette
  • Depth Of Field
  • SSAO: Screen Space Ambient Occlusion
  • motion blur: ์นด๋ฉ”๋ผ๊ฐ€ ์›€์ง์ด๋Š” ์ •๋„์— ๋”ฐ๋ผ ์ €๋ฒˆ ํ”„๋ ˆ์ž„๊ณผ ํ˜„์žฌ ํ”„๋ ˆ์ž„์„ ๋ธ”๋ Œ๋”ฉ.

๊ณ ๊ธ‰ ์‰์ด๋” ๊ธฐ๋ฒ• ์ฐพ๊ธฐ

  • gpg gems
  • ShaderX / GPU Pro
  • SIGGRAPH
  • GDC(Game Developers Conference)
  • Gamefest