본문으로 바로가기

물체의 테두리(Outline) 그리기 ③ - 장면에 테두리 그리기

<이전글: 물체의 테두리(Outline) 그리기 ② - 테두리 추출하기

 

[Unreal Engine] 물체의 테두리(Outline) 그리기 ②

물체의 테두리(Outline) 그리기 ② - 테두리 추출하기 <이전글: 물체의 테두리(Outline) 그리기 ① - 접근 방법 [Unreal Engine] 물체의 테두리(Outline) 그리기 ① 물체의 테두리(Outline) 그리기 ① - 접근 방법

dev-sbee.tistory.com

이 전글에서 물체의 테두리를 추출하는 것 까지 다뤘다. 이번 글에서는 추출한 테두리를 장면에 그리는 것까지 다룬다.

4단계. 메시에 테두리(Outline) 그리기

선형보간함수 (Lerp)을 이용하면 장면에 원하는 테두리 색상을 출력할 수 있다.

  • 선형 보간 함수는 A 색상과 B 색상, Alpha값을 입력으로 받는다. 그리고 Alpha값이 0인 픽셀은(테두리가 아닌 경우) A(장면을 텍스처에 렌더링 결과)가 출력되고 1인 픽셀은(테두리인 경우) B의 색상이 출력된다.
  • 결과적으로 아래와 같이 Outline만 보라색으로 출력되고 나머지는 렌더링 결과 그대로 출력되는 결과물을 얻을 수 있다.

5단계. 다른 메시에 가려지는 부분 없애기

위 출력결과를 보면 다른 메시에 가려진 테두리까지 표현되고 있다. 물론 어떤 게임에서는 벽 뒤에 있는 적 위치를 표현하기 위해서 이런 연출을 의도할 수는 있지만, 다른 메시에 가려진 테두리는 표시하고 싶지 않을 수 있다.

  1. Custom Depth의 깊이 값에 Scene Depth의 깊이 값을 뺀다.
    • 가까이 있는 물체라면 깊이값이 작다. 그래서 양수일 경우 다른 물체에 가려진 것이고, 음수일 경우 다른 물체에 가려지지 않은 경우이다.
    • 정규화를 통해서 다른 물체에 가려진 경우 0, 가려지지 않은 경우 1이 되도록 만든다.
  2. 방금 계산한 값으로 마스킹 한 값을 출력한다. 그러면 다른 메시에 가려지지 않은 경곗값만 보라색으로 출력할 수 있다.

출력 결과

6단계. 두께 조절하기

Texel의 size에 상수 값을 곱하면 테두리의 두께를 더 두껍게 할 수 있다.

출력 결과 두 배 두꺼워진 테두리를 확인할 수 있다.

 

 

이상으로 언리얼 엔진에서 Post Process Material을 활용한 물체의 테두리 구현 설명을 마친다.