2023. 8. 18. 02:59ㆍ언리얼이 리얼보다 쉬웠어요
마침내! 임포스터 베이커가 UE5부터 정식 플러그인으로 합류했다. 게다가 UE5.1의 릴리즈 노트에 의하면 나나이트에 임포스터 빌드 옵션이 추가되었다는 언급(r.Nanite.Builder.Imposters)이 있었다. 우선 이번 글에선 기존 임포스터에 대해 알고 있던 것들과 임포스터 베이커의 사용법에 대해서 남겨두고자 한다.
임포스터
한줄 요약하자면, 물체가 항상 카메라를 바라보게 하는 빌보드 기법의 파생 기술이다. 단순한 판때기를 프랍처럼 보이게 하는 일종의 트릭이라고 할 수 있다. 이를 활용하면 버텍스 수를 효과적으로 절약할 수 있기 때문에 최적화에 있어 굉장히 든든한 친구다.
물론 어디까지나 트릭에 불과하기에 한계가 존재한다. 멀리서 볼 땐 그럴싸하지만 가까이서 보면 대놓고 우글우글 티가 나기 때문에 주로 원경 최적화에 쓰인다.
팔면체 임포스터와 임포스터 베이커
임포스터 자체는 언리얼에 꽤 전부터 존재했다. 하지만 편리성이나 활용도에도 꽤나 애로사항이 많아서 그리 쓰이지 않는 편이었다. 그러다 등장한 것이 여러 문제가 개선된 임포스터 베이커다. 당시엔 제작자의 개인 블로그에서 플러그인 형태로 배포되었는데, UE5에서 마침내 정식 플러그인으로 들어온 것이다.
뉴 임포스터의 특징은 이렇다.
1. 최대한 왜곡이 적은 균일한 매핑을 위해 팔면체 / 반팔면체를 사용한다. 참고 링크
2. 단순히 가장 가까운 프레임을 표시하는 것이 아니라 가중치를 계산하여 인접한 3개의 프레임을 블렌딩시켜 표시한다. 이는 뷰가 변화할 때 스프라이트의 전환이 튀는 현상을 해결하기 위함이다.
임포스터 베이커의 사용법
UE5부터는 기본 내장 플러그인이 됐기 때문에 따로 받아올 필요는 없다. 우선 ImpostorBaker를 활성화한다.
스태틱 메시를 준비한다. 테스트를 위해 트라이앵글 수 26,150, 버텍스 수 13,924개를 지닌 든든한 비로자나불상을 모셔왔다.
프레임을 캡처하기 위해 원본 메시의 머티리얼에도 사전 작업이 필요하다.
1. 기존에 연결된 노드를 MakeMaterialAttributes로 옮긴다.
2. ImposterCaptureSwitch 노드를 추가한 후 MakeMaterialAttributes의 output 핀에 연결한다.
2. Details > Use Material Attributes 옵션을 체크한 후 ImposterCaptureSwitch 노드와 결과 노드를 연결한다.
임포스터용 스프라이트를 촬영하기 위한 스튜디오로 이동한다.
Generate_Impostor_Map 레벨이 보이지 않으면 Settings > Show Plugin Content가 활성화되어 있는지 확인한다.
미리 배치되어 있던 샘플용 스태틱 메시 액터를 제거하고 임포스터로 만들 붓다를 원점에 올려놓는다.
그 후 아웃라이너에서 BP_Generate_ImposterSprites를 클릭하고, Details > Default > Static Mesh Actor를 재지정해준다.
디테일 패널엔 임포스터 생성에 관련된 다양한 옵션이 존재한다.
Clear RTs: 초기화
Render Frames: 임포스터 생성
Create Static Assets: 생성한 텍스처와 머티리얼 인스턴스를 파일로 저장
Overwrite Existing Assets: 생성한 텍스처와 머티리얼 인스턴스를 기존 파일에 덮어씌우기
Frames XY: 아틀라스로 캡처할 XY 프레임의 수
Use Distance Field Alpha: 더 고품질의 실루엣 블렌딩 허용
New Asset Path: 생성된 파일이 저장될 경로
New Asset Texture Prefix: 생성될 텍스처의 파일 이름
New Asset MIC Name: 생성될 머티리얼 인스턴스의 파일 이름
Maps To Render: 구울 머티리얼 맵
Impostor Type: 캡처 타입(상반 반구, 구체, 단순 빌보드)
Render Frames를 눌러 임포스터 붓다가 탄생한 모습이다.
기존 LOD 세팅을 통한 임포스터 활용법
임포스터는 주로 원경이 되는 LOD 레벨에 지정되는 방식으로 자주 활용되었다. 나나이트에 제약이 아직 많은 현재에도 이 방식은 아직 유효할 것으로 보여 LOD 방식대로 원본 붓다의 마지막 LOD로 임포스터 붓다 모델을 추가시켜서 실제 적용되는 모습까지 정리해보았다.
임포스터가 생성된 상태에서 Create Static Assets를 눌러 머티리얼 인스턴스와 아틀라스 텍스처를 저장한다.
그 후 BP_Generate_ImposterSprites > ProceduralMesh > Procedural Mesh > Create StaticMesh를 클릭하면 임포스터가 스태틱 메시의 형태로 저장된다. 사실 이 모델은 한번 뽑아두면 나중엔 매번 새로 저장할 필요 없이 머티리얼만 교체하면서 재활용 가능하다.
갓 만들어진 스태틱메시는 머티리얼 슬롯에 미리보기용으로 생성되었던 다이나믹 머티리얼 인스턴스가 박혀 있어서 정상적인 저장이 되지 않을 것이다. 미리 저장했던 머티리얼 인스턴스로 교체해주면 정상적으로 저장된다.
LOD 모델로 임포트시켜주기 위해 한번 FBX 익스포트를 거친다.
원본 붓다로 돌아와서 방금 저장한 FBX 모델을 새로운 LOD 레벨로 임포트시켜준 뒤, 새로 생성된 머티리얼 슬롯에 미리 생성해둔 머티리얼 인스턴스를 지정해준다.
선택사항으로 자연스러운 전환을 위해 Auto Compute LOD Distances 체크를 해제하고 LOD가 전환될 스크린 사이즈를 직접 입력해주면 완성이다.
결과물
다섯 자리 수였던 트라이앵글과 버텍스가 단숨에 한 자리 수로 변하는 기적을 보여주는 모습이다. 물론 메모리 등 부가적인 비용이 들긴 하지만 그만큼 두드러지는 렌더링 속도의 향상을 보여준다.
아무튼 멀리서 보아야 예쁘다. 임포스터 붓다도 그렇다. 새로 추가된 나나이트의 임포스터 빌드 옵션도 Octahedron 기준인 것까진 확인했는데, 애초에 나나이트랑도 아직 서먹서먹한 사이라서... 차차 찍어먹어보면서 알아낸 게 쌓이면 새로 정리해보려 한다.
'언리얼이 리얼보다 쉬웠어요' 카테고리의 다른 글
[UE5] Garbage Collection (0) | 2023.08.31 |
---|---|
[UE5] 언리얼 인사이트로 안드로이드 프로파일링하기 (0) | 2023.08.21 |
[UE4/UE5] Replication Graph - GridSpatialization2D Node (0) | 2023.08.08 |
[UE4/UE5] Replication Graph (0) | 2023.07.22 |