[UE5/C++] 액터 투명화 시스템 개발

Tony Kim·2023년 2월 4일
1

언리얼로 개발하기

목록 보기
3/16
post-thumbnail

Intro

디아블로4 출시일이 다가오고 있습니다. 기다리고 있는 분들이 꽤 있을 듯하네요. 저저번주쯤(?) 디아블로4 데모 영상의 액터 투명화 시스템을 간단히 구현해보았습니다. TA보다는 클라 작업에 가깝겠지만... 간략히 기록 차 올려봅니다. 회사 업무와 연관이 없지 않아 코드를 공개할 순 없음을 양해 부탁드립니다.

Example: Diablo IV

출처: https://youtu.be/vrjs782rxvY?t=970

How To

데모 영상을 봤을 때 단순히 카메라와 캐릭터 사이에 걸리는 배경 액터를 투명화하는 것 같지는 않았습니다. 그럼 레이를 쏘아서 걸리는 액터들을 투명하게 만드는 건 아닐테고, 특정 공간에 진입 시 특정 배경 액터들이 사라지도록 위치 기반 규칙이 존재해 보였습니다.

따라서 시스템의 기본 동작 방식은 트리거 볼륨을 설치하고 해당 볼륨에 들어갈 때 미리 선택된 스태틱 메시의 머테리얼들이 투명해지도록 만드는 방식으로 채택했습니다. 작업자가 볼륨 액터를 선택한 상태에서 디테일창에서 투명화할 스태틱 메시 액터들을 지정하고 (배열에 저장) 투명해지는데 걸리는 시간을 설정하면 해당 시간동안 스태틱 메시 액터들의 머테리얼들을 투명하게 만듭니다.

구조를 보면 트리거 볼륨 오버랩 시 지정된 스태틱 메시 액터의 갯수만큼 루프를 돌고 루프 내부에서 각 액터의 머테리얼 갯수만큼 루프를 돌며 기존 머테리얼들을 미리 만들어둔 Masked 머테리얼을 부모로 갖는 동일한 텍스쳐와 파라미터의 새로운 머테리얼의 다이나믹 머테리얼 인스턴스로 교체하는 것입니다.

이 Masked 머테리얼들은 Dither Temporal AA 노드의 Alpha Threshold 핀에 Opacity라는 파라미터를 연결해 두었습니다. 이 Opacity를 조절하면 머테리얼을 투명하게 만들 수 있습니다. 추가로 Shadow Pass Switch 노드를 사용하여 머테리얼이 투명해진 후에도 그림자를 그리도록 할 수 있습니다.

오버랩이 끝나면 Opacity를 다시 조정해서 다이나믹 머테리얼을 불투명하게 만들고 완전히 불투명해지면 원래 머테리얼로 재교체합니다.

Result

profile
게임 테크니컬 아티스트

0개의 댓글