일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Unreal Engine Error
- staticmesh mobility
- redirector crash
- UnrealEngine
- register component
- splinemeshcomponent scale
- unreal engine redirection crash
- UE
- ue4 error
- tscriptinterface
- 랜덤 맵 생성
- LittleNightMare
- Ai
- unreal engine skill
- Unreal Engine 4
- UE5
- deltaTime
- 리디렉션 크래쉬
- 13iew
- 언리얼
- Unreal Engine 5
- unreal engine
- skill system
- UE4
- redirection crash
- change textblock color
- Random Map Generator
- 리디렉터 크래쉬
- ue4 Crash
- unity
- Today
- Total
Class GameDev* SheepAdult
[Unreal Engien 5] Optimization - Skeletal Mesh 병합을 통한 Draw Call(드로우 콜) 감소 본문
[Unreal Engien 5] Optimization - Skeletal Mesh 병합을 통한 Draw Call(드로우 콜) 감소
SheepAdult 2024. 5. 18. 09:16드로우 콜은 현재 프레임에 CPU가 무엇을 그릴지 결정하고 GPU에게 오브젝트를 그리라고 명령하는 것을 말한다. 이때 드로우 콜 발생 조건은 Mesh가 1개, 머티리얼이 1개라면 드로우 콜은 1회 발생한다. Mesh 1개에 여러 머티리얼을 사용하면 그 개수만큼 드로우 콜이 발생한다. 다시 말해, 하나의 메쉬에 여러 머티리얼이 적용되거나 하나의 오브젝트에 여러 메쉬가 붙어 있다면 그만큼 CPU의 성능에 영향을 미치고 병목 현상이 발생할 수 있다.
많은 게임에 존재하는 캐릭터 커스터마이징 기능이 이러한 문제점에 직면할 수 있다. 만약 여러 메시를 하나의 메시에 Attach하여 커스터마이징한 후, 이를 그대로 게임에 적용시킨다면, 특히 이게 많은 캐릭터가 몰리는 MMORPG라면 CPU 병목 현상이 발생할 확률이 클 것이다. 이를 해결하기 위한 방법이 여러 가지 있겠지만, 스켈레탈 메쉬를 병합하는 방식으로 어느 정도 이를 해결할 수 있지 않을까 생각하여 작성해봤다.
먼저 Skeletal Merging 플러그인을 Plugins에서 다운로드한다.

아래와 같이 몸이 분리가 되어 있는 액터를 하나 준비한 후 머티리얼은 통일 시켜 주었다.

머티리얼을 통일 시킨 이유는, 메쉬를 병합시켰을 때 머티리얼 수의 총합은 그대로 여서 드로우 콜 횟수가 그대로이기 때문에 이를 방지하고자 같은 머티리얼을 사용했다(그래서 분명 더 좋은 방법이 무조건 있을 것이라고 생각한다).
그리고 위의 플러그인을 사용하여 블루프린트를 작성했다. 성능 비교용으로 delay를 넣어 준 후 Skelatal Mesh Merge Params Type 변수를 생성하고 Set Members In SkeletalMesh Merge Params 함수의 매개변수로 넣어 준다. 다른 매개변수로는 병합할 메쉬들을 모두 넣어준다. 그리고 Merge Meshes함수로 메쉬를 병합한 후 Set SkeletalMesh Asset으로 하나의 메쉬에 적용해 준다.

그 후 병합된 메쉬들은 모두 Set Hidden In game 함수로 보이지 않게 처리해 준다.

해당 함수를 BeginPlay에서 실행해 주면 기준 메쉬를 제외한 모든 메쉬가 보이지 않게 되며 기준 메쉬는 병합되어 하나의 메쉬로 나타난다. 이렇게 되면 드로우 콜 횟수가 줄어들 것이다.
아래는 결과이다. 게임 시작 7초 후 string 출력 이후 화면 아래쪽의 Mesh draw calls 수치가 낮아지는 것을 볼 수 있다.
'Unreal Engine' 카테고리의 다른 글
[Unreal Engine 5] Actor가 Spawn되기 전에 Actor 정보 세팅하기 (0) | 2024.08.04 |
---|---|
[Unreal Engine 5] Interface Execute_ 시 Debug Break 에러 (0) | 2024.07.15 |
[Unreal Engine 5] 멀티 플레이 환경에서의 Game Ability System을 활용한 자기장(bluezone)기능 구현 - gas를 활용한 데미지 (0) | 2023.12.25 |
[Unreal Engine 5] fresh_cooked_tweens 플러그인을 사용해보자! - Tick이 아닌 곳에서 Tick 기능 사용하기 (0) | 2023.09.26 |
[Unreal Engine 5] TSubclassOf (0) | 2023.08.01 |