[UE 5]Postprocess를 통한 2D 배경 구현
오늘은 Postprocess를 통해서 캐릭터를 제외한 부분을 2D 배경으로 처리해주는 방법에 대해서 알아볼 것이다.
Postprocess와 Stencil Depth를 이용해서 '캐릭터를 제외한 부분을 선택한 배경으로 덧씌우고, 캐릭터 부분은 온전하게 보이도록' 할 예정이다.
프로젝트에서 실제로 활용했던 기능 중 하나인데 다음 제약 사항이 있어 해당 방법을 고안하게 됐다.
목표 - '캐릭터를 제외한 부분을 선택한 배경으로 덧씌우고, 캐릭터 부분은 온전하게 보이도록'하기(해당 프로젝트에선 크로마키를 씌울 수 있도록 초록색 배경을 택했다. TextureParameter를 변경하면 다른 배경으로도 바꿀 수 있다)
1. 기존 오브젝트의 라이프 사이클을 건드리지 않을 것
2. 특정 액터(ex. 캐릭터)를 제외한 나머지 부분을 가려야함
3. 실제 카메라나 씬 구성을 바꾸는 것은 최소화해야함
해당 기능을 사용하려면 프로젝트 세팅을 바꿔야한다
Enable with Stencil로 변경한다.
그리고 노출시킬 대상의 Render CustomDepth Pass를 true로 체크, CustomDepth Stencil Value를 1로 변경한다.
Postprocess Volume을 생성한다
프로젝트 전체에 설정되도록 Unbound로 설정해준다. 만약 특정 구역에서만 적용시키고 싶을 경우엔 체크 해제한다.
이제 들어갈 Postprocess 머티리얼을 생성해줘야한다.
머티리얼 생성하고 Detail에서 Material Domain을 Postprocess로 변경한다.
이름은 PP_Material로 해줬다. 설정은 이렇게 하자. 자세한 내용은 따로 영상으로라도 찍고 싶은데 시간이 없다 ;ㅅ;
그러고 추가했던 Volume에 만든 Material 넣어주자
이렇게 하면 대상 매시와 배경 간의 경계가 자글자글하게 진동하는 현상이 있을 것이다.
이를 해결해주려면 Material의 디테일 란에서 Blendable Location을 변경해줘야한다
이를 통해 Postprocess를 통해 액터를 선택적으로 노출시켜 보았다. 해당 처리에는 다음과 같은 장단점이 있다.
장점
1. 씬 내 기존 액터의 라이프 사이클을 건드리지 않고 배경만 2D 이미지로 대체 가능하다.
2. 머티리얼 재작업 없이 후처리 머티리얼만 수정·적용하면 즉시 결과를 확인할 수 있다.
3. 여러 스텐실 ID를 활용해 복수 레이어(전경/중경/후경) 마스킹 가능하다.
4. 라이팅·쉐이더 등의 세부 설정과 별개로 동작하므로, 기존 씬 세팅 훼손을 최소화할 수 있다.
5. 캐릭터만 3D로 두고 배경을 2D 이미지로만 처리해도 되는 경우 씬 자체가 간소화되어있는 경우에 한해서는 렌더링 부담을 줄일 수 있다.
단점도 있다
기본적으로 기본적으로 기존에 있는 장면에 텍스처를 '덧씌우는' 것에 가깝기 때문에 다음과 같은 단점이 발생한다.
1. 카메라와 대상 캐릭터 사이에 물체가 존재한다거나 하면 캐릭터가 그 영향을 받게 되고, 상호작용에 의한 왜곡이나 가려짐 현상이 발생할 수 있다. (예를 들어 카메라와 캐릭터 사이에 '가려진 액터'가 끼어들면 매우 부자연스러워진다)
2. 1번과 마찬가지 이유로 있는 액터가 사라지거나 투명하게 된 것이 아니기 때문에, 라이트나 다른 액터의 영향을 그대로 받게 된다. 가린 액터가 캐릭터와 상호작용을 하는 종류의 오브젝트일 경우에는 연출이 어색해질 수 있다.
3. 반투명한 액터나 파티클의 경우 처리가 곤란하다.
4. 기존 씬은 그대로 두고 후처리를 하는 것이기 때문에 렌더링 비용이 추가로 발생할 수 있다. 후처리 기반 배경 치환은 렌더링 최적화 수단이라기보단 시각적 연출에 유리한 방식이다. 실제 퍼포먼스 개선을 원할 경우, 가려지는 오브젝트의 렌더링을 비활성화하거나 액터를 제거하는 등의 추가 작업이 필요하다.
나중에 이걸 기반으로 공포게임 연출같은 것도 만들 수 있을 것 같다. 개인 프로젝트에도 언젠가 한번 적용해보고 싶다.