UE5

[언리얼5.3] 에셋 최적화

jiwoonmin 2025. 3. 12. 13:41
 

몬스터 최적화 일지

*사이즈* 32 64 128 256 512 1024 2048 4096 --체크리스트--- 텍스처맵 밉맵 여부 알파 여부 srgb(언리얼 자동) (현재 플젝전용)우들체크,우들체크커밋해도 적용이 안됨.. 머터리얼 슬롯 수 인스턴스화 http

velog.io

 

에셋 최적화 체크리스트
텍스처맵 [32 / 64 / 128 / 256 /512 / 1024 / 2048 / 4096]
밉맵, 알파, srgb(언리얼 자동)
드로우콜
머티리얼 인스턴스화

 

텍스쳐맵

A(512x512)1장과 B(256x256)4장의 이미지맵을 로드 할 때, 하드디스크 안의 주소를 찾아서 로드 해야하기 때문에 A보다 B가 로딩이 더 길어집니다. 메모리 차지 양은 같다고 합니다.

노멀맵의 경우 픽셀 한개당 폴리곤 한개의 노멀을 표현하기때문에 256x256의 노멀맵은 65536개를 초과하는 폴리곤표현이 불가능하다고 합니다.

참고 블로그 - 텍스쳐 매핑 소스의 해상도 원리와 방식

 

1024와 512, 512와 256의 차이는 큰 변화가 없었습니다.  스크린샷처럼 가까이서 볼 일이 없으므로 과감히 256으로 결정했습니다.

노멀맵은 차이가 눈에 잘 들어왔고 1024정도면 충분할 것 같아 그렇게 했습니다.

베이스맵과 노멀맵은 최대한 같은사이즈를 지키고, 다른 맵은 가능한 한단계 작게 진행했습니다.

 

이런 방식으로 모든 텍스쳐를 손봐주려고 했지만 머터리얼 슬롯 수가 많은게 신경쓰여서 드로우콜 먼저 최적화하기로 작업흐름을 변경했습니다.

 

머티리얼

머티리얼 병합을 통해 머터리얼 슬롯 최적화 →  드로우콜을 최적화
이를 위해 텍스쳐를 한장에 병합하게 됩니다. 이를 아틀라스화 라고 하는 것 같습니다.

한장에 텍스쳐 여러개를 넣을때 신경 쓸 부분은 해상도가 낮아진다는 점 입니다.

 

일단은 언리얼 엔진에서 제공하는 액터 병합 기능을 사용할 수 있습니다.

정사각에 4장이 들어간다면 효율이 좋겠지만 7개나 홀수로 병합 되었을 때 낭비되는 자리가 많이 불편했습니다.

그리고 리깅된 에셋은 머티리얼 병합이 활성화 되지 않았습니다.

리깅 에셋에 머티리얼 병합 작동 시 오류 메세지 " insufficient mesh components found for merging"

오류에 대해 찾아보니 "If you have one or fewer meshes selected, you will see a yellow warning near the bottom of the window stating" 라는 이유가 나오는데 해결하지는 못했고, 수작업이 더 빠를 수 있겠다고 판단했기 때문에 그냥 넘어갑니다. 아마 리깅 되어있어서 그런건가 하는 생각만 남겼네요.

에픽문서 - 언리얼 액터 병합
참고 블로그 - 액터병합

UV재배치를 해줬습니다. 오류없이 한번에 끝내고 싶었기 때문에 플랜을 이용하여 정렬했습니다.
UV를 배치하고 있으니 트림시트 작업이랑 다를게 없네요.

 

텍스처맵들도 포토샵에서 재배치 했습니다. 겸사겸사 인스턴스화를 위해 채널순서도 프로젝트 마스터 머티리얼 채널 순서인 ORM에 맞추어 정리해주었습니다. 

좌 : 512~1024로 적당히 하나하나 조정한 텍스처맵이 12장 머터리얼 드로우콜은 4개
우 : 1024로 통합한 텍스처맵 3장 머터리얼 드로우콜은 1개

 

자세한 프로파일을 할줄 모르기 때문에 디스크 사이즈 비교정도만 했습니다. 이후 모든 몬스터를 같은 방식으로 진행해줬습니다.

 

LOD

스태틱메시 에디터에서 LOD단계를 적당히 지정해주고 자동거리를 해제 합니다. 변경 적용도 눌러주세요.

그러면 후에 단계 설정을 변경해도, 기존의 설정을 유지 하면서 추가하거나 제거할 수 있게됩니다.
LOD그룹은 현재 프로젝트에서는 세팅해주지 않았습니다.

에픽문서 - LOD
참고 유튜브 - LOD와 컬리전

 

스태틱메시 에디터 뷰포트 상단의 LOD 보기 상태를 변경하면 해당 보기의 디테일 옵션이 활성화 됩니다.

 

Percent TrianglesLOD단계별 tris를 퍼센트단위로 세팅할 수 있습니다.

그리고 LOD세팅을 저장두었다가 다른 에셋에 같은 세팅을 적용할 수 있습니다. 하지만 일괄 세팅이라는 것이 값이 일괄인거이며 적용된 비주얼로 봤을때는 일괄적이지 않았기 때문에 하나 하나 직접 세팅해주었습니다.

사담..
프로젝트 진행 시 LOD를 열어보기 전이었기 때문에 몬스터의 tris를 블렌더에서 직접 줄이는 과정이 있었습니다.
몬스터에셋은 구매한 에셋이었기 때문에 최적화를 나중에 하려고 했기 때문이죠.
메시를 수정하면서  UV좌표가 당연히 튀고 원본 uv와 100% 일치할 수 없게 되었습니다. 그냥 적당히 원본 모작하듯 언랩 후 트림시트 처럼 조각 맞추기 과정을 거쳤습니다. 허허! 언리얼의 LOD세팅에서 간단히 tris줄이는 옵션이 있는 것을 알았더라면, 몬스터 5마리에 대한 2일의 작업 기간은 없었을텐데 말이죠!

어찌되었든, 만든 에셋이든 구매한 에셋이든 엔진에 올리는 순간 함께 최적화 작업을 해줘야 겠다는 교훈을 얻을 수 있었습니다.

 

라이트

라이트맵 해상도를 관리해주었습니다.

몬스터와 같은 동적 에셋은 기존 세팅 방식과는 다르게, 동적 라이팅 세팅의 영향을 받는다고 합니다.

그리고 라이트 세팅에서 ContactShaow를 off 했습니다.
디펜스 게임이라 몬스터가 다량 출몰하기도 하고, 근접 그림자까지의 묘사는 필요 없을거라 판단했습니다.

에픽문서 - 컨택트섀도