서울게임아카데미 교육과정 6개월 C++ ~ DirectX2D
59일차. DirectX_11 BlurTexture
WDmil
2023. 7. 20. 23:03
728x90
DirectX의 Shader을 적용하여, 화면을 지정된 규칙하에 바꾸어주는 작업이다.
TextureBlur기법으로, 하나의 픽셀을 기준으로 3X3의 주변픽셀을 함께 뭉개서 이미지를 흐릿하게 해주는 기법이다.
이 작업을 n번 반복하면, 반복한 횟수만큼 더 흐릿하게 상이 나타난다.
위와 같이, 이미지 픽셀을 1- 20 번 반복하였을 때의 픽셀 블러 정도가 달라진다.
float4 PS(PixelInput input) : SV_Target
{
float4 color = _sourceTex.Sample(_samp, (float2) input.uv);
// 주변 픽셀들
float2 arr[8] =
{
float2(-1, +1), float2(+0, +1), float2(+1, +1),
float2(-1, +0), /* 기준 정점 */ float2(+1, +0),
float2(-1, -1), float2(+0, -1), float2(+1, -1)
};
// 블러 카운트 만큼 반복
for (int blur = 1; blur < _blurCount; blur++)
{
// 주변 픽셀들에 대해 반복
for (int i = 0; i < 8; i++)
{
// 입력 텍스처에서 샘플링할 주변 픽셀들의 상대적인 위치를 계산
float x = arr[i].x * (float) blur / _imageSize.x;
float y = arr[i].y * (float) blur / _imageSize.y;
// 새로운 uv 좌표 계산
float2 uv = input.uv + float2(x, y);
// 입력 텍스처에 색상을 추가로 샘플링하여 누적
color += _sourceTex.Sample(_samp, uv);
}
}
// 블러 반복 횟수
int blurInterations = _blurCount - 1;
// 오프셋 개수
int offsetCount = 8;
// 전체 샘플링 개수
int totalSamples = blurInterations * offsetCount + 1;
return color /= totalSamples;
}
위와 같은 방법으로 화면의 uv를 다르게 나타내어 줄 수 있다.
728x90