프로그래밍 공부
작성일
2023. 7. 20. 23:03
작성자
WDmil
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