WinCNT

Edge Detect Filter 본문

게임 프로그래밍(학습 내용 정리)/게임 수학

Edge Detect Filter

WinCNT_SSS 2022. 6. 28. 14:38

외곽선을 그리는 기법

캐릭터를 그릴 때 가장 많이 사용한다

장점 : 1픽셀의 외곽선을 정확하게 따준다

두께는 블러를 적용한 것

블러의 강도를 조절하면 깜박거리는 느낌을 줄 수 있다

 

Edge Detect Filter의 예시

 

값이 급격하게 변하는 곳이 윤곽선으로 만드는 기법

값이 급격하게 변하는 곳은 필터로 찾는다

Sobel Filter

가장 유명한 필터

주변 픽셀에 필터 값을 곱한 뒤 더한다

Laplacian Filter

또 다른 필터

적용 예시

법선 벡터(노멀 벡터)에 필터링을 적용하는 이유

백버퍼의 값에 필터를 적용한 경우
노멀 벡터에 필터를 적용한 경우

 

노멀 벡터는 경계 부분에서 노멀 값이 급격하게 바뀐다

따라서 노멀 벡터에 필터를 적용하면 깔끔하게 딸 수 있다

 

반대로 일반적인 버퍼에 바로 필터링을 적용하면

카메라의 각도에 따라서 외곽선이 안 보이는 경우가 생기기도 한다

Edge Detect Code

// 외곽선 추적
float4 psEdgeDetect( float2 texCoord : TEXCOORD0 ) : COLOR0
{
    
    float mask[9] = 
        { -1, -1, -1, 
          -1,  8, -1, 
          -1, -1, -1 }; // Laplacian Filter
           
    float coord[3] = { -1, 0, +1 };
    float4 c0 = 0;
    
    for( int i = 0 ; i < 9 ; i++ )
        c0+= mask[i] * ( tex2D( SamplerSrc0, texCoord + float2( coord[i%3]*vScreenSize.z, coord[i/3]*vScreenSize.w) ) );

    return c0*2; // 2배 진하게 출력
}

 

SSS

'게임 프로그래밍(학습 내용 정리) > 게임 수학' 카테고리의 다른 글

Texture Technique  (0) 2022.07.12
Illusion  (0) 2022.06.28
Light Shaft  (0) 2022.06.28
Vignetting  (0) 2022.06.28
DOF(Depth Of Field)  (0) 2022.06.21