현재 졸업작품 프로젝트에서 Unreal로 개발을 진행하고 있다.
포스트 프로세싱을 활용한 아이템과 캐릭터의 상호 작용에 대해 관련한 자료가
한국어로는 많이 없는 것 같아서 정리 겸 작성해보려고 한다.
1. Outline Material 개발
새로운 Material을 만들어 'M_Outline' 이라는 이름을 지어주고
디테일 - 머터리얼 - 머터리얼 도메인을 'Post Process'로 바꿔준다.
바꿔주면 이미시브 컬러만 활성화가 되어있을 것이다.
- 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를 활용하면 된다는 것 같다.