3X3 ÄÁ¹ú·ç¼Ç( convolution ) ÇÊÅ͸¦ ÀÌ¿ëÇØ ¿Ü°û¼±À» °ËÃâÇØ º»´Ù. À±°û¼±( Edge)À» °ËÃâÇϱâ À§Çؼ´Â ¼Òº§( Sobel) ¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù.
ÁÂ¿ì ¿Ü°û¼± °ËÃâ ¼³¸í : Áß¾ÓÀ» Áß½ÉÀ¸·Î 3 X 3 Çȼ¿ÀÇ ¸ðµç°ªÀÌ µ¿ÀÏÇÏ¸é °á°ú °ªÀº 0ÀÌ´Ù. »óÇÏ ¿Ü°û¼± °ËÃâ ¼³¸í ÁÂ¿ì ¿Ü°û¼± °ËÃâ°ú ºñ½ÁÇÑ ¿ø¸®ÀÌ´Ù. lx¿Í lyÀÇ ±â¿ï±â Å©±â¸¦ ±¸ÇÑ´Ù. ÇÁ·Î±×·¥À» °£°áÇÏ°Ô ÇÒ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù. L = |lx| + |ly| Æнº ¼³Á¤ColorConversion.rfx ÆÄÀÏ¿¡ À±°û¼± °ËÃâ ÆнºÀÎ Edge Æнº¸¦ Ãß°¡ÇÑ´Ù. Sepia Æнº¿¡¼ ¿À¸¥ÂÊ ¹öÆ°À» ´·¯ Copy¸¦ ¼±ÅÃÇÑ´Ù. Sepia Æнº´Â µðÁîºí ½ÃŲ´Ù. Àü¿ª º¯¼ö Ãß°¡Àü¿ªº¯¼ö gPixelOffsetÀ» Ãß°¡ÇÑ´Ù. float2 gPixelOffset ·»´õ¸ùÅ°¿¡¼ [Add Variable - Float - Float2]¸¦ Ãß°¡ÇÑ´Ù.
Çȼ¿ ½¦ÀÌ´õ
struct PS_INPUT
{ float2 uv : TEXCOORD0; }; float3x3 convX = { -1, 0, 1, -2, 0, 2, -1, 0, 1}; float3x3 convY = { 1, 2, 1, 0, 0, 0, -1, -2, -1}; float2 gPixelOffset; sampler2D SceneSampler; 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.uv + offset).rgb; float luminace = dot(tex, float3( 0.3, 0.59, 0.11)); lx += luminace * convX[y+1][x+1]; ly += luminace * convY[y+1][x+1]; } } float l = sqrt(( lx*lx) + (ly*ly)); return float4( l.xxx, 1); } ¸¶½ºÅ©¸¦ 3 X 3 Çà·Ä·Î ¼±¾ðÇÑ´Ù. float3x3 convX = { -1, 0, 1,
-2, 0, 2, -1, 0, 1}; float3x3 convY = { 1, 2, 1, 0, 0, 0, -1, -2, -1}; ÇöÀç Çȼ¿À» Áß¾Ó¿¡ µÎ°í 3 X 3 Çà·ÄÀ» -1¿¡¼ 1±îÁö ¹Ýº¹ÇÑ´Ù. for(int y = -1; y <= 1; ++y)
{ for(int x = -1; x <= 1; ++x) { x, y¿¡ µû¶ó Çȼ¿ÀÇ ¿ÀÇÁ¼ÂÀ» ±¸ÇÑ´Ù. float2 offset = float2(x, y) * gPixelOffset;
float3 tex = tex2D( SceneSampler, input.uv + offset).rgb; ¸í¾ÏÀÇ Â÷ÀÌ·Î À±°û¼±À» ã´Â´Ù. Ä®¶ó¸¦ Èæ¹éÀ¸·Î º¯È¯ ½ÃŲ´Ù. float luminace = dot(tex, float3( 0.3, 0.59, 0.11));
¼Òº§ ¿¬»êÀÚÀÇ ¸¶½ºÅ© °ª°ú ¸í¾ÏÀ» ´õÇÑ´Ù. lx += luminace * convX[y+1][x+1];
ly += luminace * convY[y+1][x+1]; ±â¿ï±â¸¦ ±¸ÇÑ´Ù. float l = sqrt(( lx*lx) + (ly*ly));
¸í¾ÏÀÇ º¯È°¡ ¾ø´Â°÷Àº °ËÀº»ö, Àִ°÷Àº ÇϾá»öÀ» ¹ÝȯÇÑ´Ù. return float4( l.xxx, 1);
´Ù¿î·Îµå : ColorConversion_edge.rfx fieldstone_SM.tga Âü°í)
|