개발일지/UNDEADER

[Unreal] Post Processing을 활용한 Material Outline에 관한 개발일지

서니션 2024. 9. 8. 22:28

현재 졸업작품 프로젝트에서 Unreal로 개발을 진행하고 있다.

포스트 프로세싱을 활용한 아이템과 캐릭터의 상호 작용에 대해 관련한 자료가 

한국어로는 많이 없는 것 같아서 정리 겸 작성해보려고 한다.

 


1. Outline Material 개발

 

새로운 Material을 만들어 'M_Outline' 이라는 이름을 지어주고

디테일 - 머터리얼 - 머터리얼 도메인을 'Post Process'로 바꿔준다.

바꿔주면 이미시브 컬러만 활성화가 되어있을 것이다.

 

M_Outline 노드

 

  • ScreenPosition 노드에서 픽셀 위치를 가져오고, Mask 노드로 R 채널을 추출
  • SceneTextureCustomDepth 노드에서 깊이 정보를 추출
  • Outline thickness 매개변수는 윤곽선의 두께를 조절
  • 두께 정보를 사용하여 픽셀 간의 거리 계산에 적용
  • 인접한 픽셀 간의 깊이 차이를 Subtract 노드로 계산하고, Abs 노드로 절대값을 구함
  • 이 값들을 더하여 윤곽선 강도를 계산
  • 계산된 값을 Divide 노드로 정규화하고 Clamp 노드로 값을 제한
  • Lerp 노드로 윤곽선 색상(녹색)과 원래 색상을 결합
  • 최종 결과는 머티리얼의 Emissive Color 출력으로 연결되어 화면에 적용

2. 캐릭터BP에 노드 작성

 

  • BP_OutlineChar(캐릭터)가 BP_ItemCube와 Overlap되면 Depth Buffer에 렌더링
  • 위의 과정에서 오브젝트의 Depth 정보를 저장하여 포스트 프로세싱 효과인 M_Outline이 생기도록 함

3. Map에 Post Process Material Array 추가 및 무한 규모 체크

 

  • map의 아웃라이너 안에서 PostProcessVolume 인스턴스를 찾아 디테일 창 Post Process Material 배열에 M_Outline을 추가
  • 전체적으로 포스트 프로세스 볼륨을 적용할 수 있도록 체크

4. 계단 현상 방지를 위한 안티 앨리어싱 체크

 

  • 기존의 계단 현상 해결을 위해 프로젝트 세팅에서 FXAA 선택
  • 더 빠르고 메모리 점유율이 더 낮으며, 픽셀이 흐릿해지는 현상이 일어나지 않음

5. 결과

 

캐릭터와 아이템이 닿았을 때 커스텀 뎁스 렌더가 true가 되어 

Outline이 보이는 것을 확인할 수 있다.

 


+ 캐릭터를 제외하고 싶다면 Stencil Buffer를 활용하면 된다는 것 같다.