float map_cx; //텍스처 크기 가로 float map_cy; //텍스처 크기 세로 sampler Sampler0; sampler Sampler1; float2 rcpres = { 0.0025, 0.0033333333333333333333333333333333 };
//텍스처 의 임의의 위치의 픽셀에 접근하귀 위한 좌표 ( 가로 방향) float2 PixelKernelH[13] = { { -6, 0 }, { -5, 0 }, { -4, 0 }, { -3, 0 }, { -2, 0 }, { -1, 0 }, { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, { 6, 0 }, }; //텍스처의 임의의 위치의 픽셀에 접근하기 위한 좌표 ( 세로 방향) float2 PixelKernelV[13] = { { 0, -6 }, { 0, -5 }, { 0, -4 }, { 0, -3 }, { 0, -2 }, { 0, -1 }, { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 5 }, { 0, 6 }, }; //미리 계산해 둔 가우스 필터의 마스크 값 float BlurWeights[13] = { 0.002216, 0.008764, 0.026995, 0.064759, 0.120985, 0.176033, 0.199471, 0.176033, 0.120985, 0.064759, 0.026995, 0.008764, 0.002216, }; float4 PSBlur( float2 Tex : TEXCOORD ) : COLOR { float4 Color = tex2D( Sampler0, Tex ); Color = pow( Color, 32 ); float4 Color2 = -0.84; for( int index = 0; index < 13; ++index ) { Color2 += tex2D( Sampler0, Tex + ( PixelKernelH[ index ] * rcpres ) ) * BlurWeights[ index ]; Color2 += tex2D( Sampler0, Tex + ( PixelKernelV[ index ] * rcpres ) ) * BlurWeights[ index ]; } Color2 *= 0.48; float4 Color3 = tex2D( Sampler1, Tex ); return Color + Color2 + Color3; } technique GOneBloom { pass P0 { CullMode = CCW; PixelShader = compile ps_3_0 PSBlur(); } } |