상단여백
HOME 게임 취재
위메이드, ’이카루스M’으로 얻은 언리얼 개발 노하우 공유

15일 서울 삼성동 그랜드 인터콘티넨탈호텔 파르나스 서울에서 진행된 ‘언리얼 서밋 2019’ 행사에서 위메이드이카루스의 박진훈 파트장은 “쾌적한 ‘이카루스M’의 플레이를 완성한 언리얼 엔진 4 - 최적화 및 안정화, 기능 사용에 대한 사례 공유” 세션을 통해 ‘이카루스M’을 개발하며 얻은 경험을 전달하는 자리를 가졌다.

그는 쾌적한 게임 환경을 만들기 위한 목표 프레임 달성과 발열을 최소화하기 위해 진행했던 최적화 방법, 메모리 누수 경험 및 해결사례, 콘텐츠를 위해 사용한 엔진 기능, 자체 기능 구현 등에 대해 공유했다.

먼저 애니메이션 부분에서는, ‘이카루스M’ 개발 초창기부터 블루프린트를 사용했는데 기능적으로 잘 동작하니 별 문제가 없어 방치했더니 부하가 발생하는 것을 발견했다고 한다. 특히 블루프린트 업데이트 애니메이션에서 오버헤드가 발생했다고.

그래서 네이티브 업데이트 애니메이션을 사용하도록 수정과 최적화를 진행했고, 이후 최적화 전후 프로파일링 비교를 해보니 블루프린트 업데이트 애니메이션에서 5ms의 처리 시간이 줄어드는 것을 확인할 수 있었다고 한다. 여기에 더해 블루프린트 네이티브화를 활용하면 좋은 최적화를 할 수 있다고 한다.

그리고 URO(Update Rate Optimization)는 애니메이션 업데이트 주기 최적화 기능인데, 캐릭터의 프레임 스킵이 가능해 퍼포먼스 확보에 유리한 기능이다. 하지만 ‘이카루스 모바일’에서는 이 방법을 그대로 안 썼다고 한다. LOD(Level Of Detail)를 사용하지 않았고, 카메라와의 거리, 표시 중인 캐릭터 개수, 중요도에 따라 작동 여부를 결정하는 등 게임 상황에 맞게 적용시켰다고 한다.

또한 캐릭터가 출현할 때 메모리와 오브젝트가 증가하고 히칭 현상(프레임이 급격히 떨어지는 현상)이 발생했는데, 원인을 알아보니 애니메이션 블루프린트가 로드될 때 모든 애셋이 로드되는 현상을 발견했다는 것. 그래서 간접 프로퍼티 레퍼런싱을 적용해 애니메이션 노티파이가 호출될 때만 애셋을 로드하도록 바꿨다는 것. 그 결과 퍼포먼스가 40~46% 향상되고 메모리가 기존 대비 13~4% 감소했으며 오브젝트 개수 감소 등의 효과를 얻을 수 있었다고 한다.

UI 부분에서도 모바일 게임 특성상 스크롤 박스를 많이 사용하기에 커스텀 스크롤 박스를 만들기로 결정, 가상화를 지원해 위젯이 추가돼도 메모리나 퍼포먼스에 부하가 발생하지 않도록 했다. 이 같은 요소들을 ‘이카루스M’에 적용해 최적화를 이뤘다는 게 그의 설명이다.

게임의 안정화를 위해서는 엔진 수정이 필요한데, 여기에 룰을 정했다고 한다. Build.h에 엔진 수정에 대한 히스토리를 기록하게 함으로써 엔진이 버전업과 같은 여러 상황에 대응토록 했고, 추가나 수정 등에 따른 define 정의를 적용했다. 

사운드 오브젝트의 누수 대응에 대해서도 언급했다. ‘이카루스M’ 서비스 도중 사운드 오브젝트의 누수가 확인됐는데, 밤새 사냥하는 유저들로 인해 오브젝트의 개수가 최대치를 초과했고, 그로 인해 장시간 사냥이 불가능한 현상이 발생했다는 것. 

검사 결과 동시성 검사 관련 코드에서 오브젝트 누수 요소를 발견했고, 설정한 룰을 개발진이 신경쓰지 못해 오브젝트 삭제가 불가능해진 것이 원인이었다고 한다. 그래서 bAutoPlay를 추가하고 OnFinish를 보장해 동시성 룰에 의한 누수 현상을 해결했다고 한다. 그리고 업데이트마다 오브젝트 누수를 시간차를 두고 추적 및 기록해 보여지거나 출력하게끔 하고 있는데, 이와 관련한 툴을 제작할 예정이라고 한다.

구글의 정책 위반 사례도 공유했다. 게임 내 웹뷰에서 이벤트와 관련해 유튜브 영상이 재생되도록 했는데, 일부 특정 기기에서 대기모드나 백그라운드 상태에서도 재생이 계속되는 현상이 발생했고, 이것이 구글의 기기 및 네트워크 남용 정책을 위반했다며 연락이 왔다는 것. 그래서 웹브라우저 구조에 관련 함수를 추가했고 수정을 완료했다고 한다.

그리고 ‘이카루스M’에는 크기가 상당히 다른 펠로우들이 있기 때문에 탑승 애니메이션이 동일하면 다리가 캐릭터 속에 잠기는 현상이 발생했다고 한다. 그래서 펠로우마다 다른 캐릭터의 탑승 애니메이션이 필요했기에 FABRIK 기능을 적용했다고. 이 기능은 탑승 애니메이션은 물론 FPS의 총 종류에 따른 움직임이나 인터렉션 애니메이션 등에 활용하면 좋다고 조언했다.

박상범 기자  ytterbia@gamevu.co.kr

<저작권자 © 게임뷰, 무단 전재 및 재배포 금지>

박상범 기자의 다른기사 보기
icon인기기사
기사 댓글 0
전체보기
첫번째 댓글을 남겨주세요.
여백
여백
여백
여백
Back to Top