원문 : https://treeofsavior.com/news/?n=785

 

 

안녕하세요.

 

저는 트오세에서 최적화를 담당하고 있는 프로그래머 'TypeBPenguin'이라고 합니다.

 

글을 시작하기에 앞서 여러분께 최적화에 관한 최근의 정보를 안내드리지 못하고, 최적화 업데이트 또한 늦춰진 점에 대해서 진심으로 사과드립니다.

 

저희는 여러 안정성 문제들로 인해 최적화 과정을 재고할 시간이 필요했습니다. 그 이후로 관련 문제들을 성공적으로 해결했고, 결과적으로 최적화 과정의 여러 다른 측면들이 개선되었습니다.

 

최적화 요청에 부응하여, 저희는 한 가지 목표를 설정했습니다: 100명의 유저가 한 스크린에 있어도 끄덕없이 돌아가는 게임을 만들기

 

몇몇 분들은 이미 알고 계시겠지만, 이 과정은 결코 쉽지 않습니다. 하지만 목표를 높게 잡았고 따라서 많은 시간과 노력을 여러분이 인식토록 투자할 것입니다.

 

또한 저희는 전문화된 테스트 환경을 마련했습니다. 밑에 있는 스크린샷에서 볼 수 있듯이 움직이고, 스킬을 시전하고, 점프하고, 기타 여러 활동들을 하는 캐릭터 100명이 있습니다. 이 상황이 최적화를 테스트하는데 이상적인 환경입니다.

 

 

 

 

 

최적화 과정

 

가장 먼저 해결해야 할 사안은 이전의 최적화 처리에서 비롯된 클라이언트 안정성 문제입니다.

 

수많은 테스트를 진행하는 동안 이전의 최적화 처리에서 기인한 여러 역효과들이 발견되었고, 후회스럽게도 안정성 때문에 개선책들을 포기할 수 밖에 없었습니다.

 

하지만 다른 최적화 처리들을 통해 안정성과 개선된 성능 두가지를 동시에 얻을 수 있었습니다.

 

 

1. 리소스 백그라운드 로딩과 데이터 풀(data pull)을 적용함으로써 리소스관리 시스템이 개선되었습니다. 즉 리소스 로딩에 낭비되는 시간을 줄이게 되었습니다.

 

 

밑에 있는 그래프는 리소스 관리 시스템을 적용하기 전과 후를 비교한 데이터입니다.

 

단위는 ms/frame, 빨간 그래프는 적용 전, 그리고 보라색 그래프는 적용 후를 나타냅니다.

 

테스트 환경은 위에 있는 스크린샷에서 보이듯이 동일합니다. 스파이크의 숫자와 지속시간에 주목해주시기 바랍니다.

 

이런 방안들을 적용함으로써 이전의 최적화 처리에서 볼 수 있었던 이익과 리소스 로딩을 통해 얻은 엄청난 시간단축을 동시에 얻을 수 있었습니다.

 

 

 

 

2. 처리 시간을 줄이기 위해 입자, 모델, 그리고 인게임의 여러 요소들을 처리하는 스레드를 따로 만들었습니다.

 

 

100명의 캐릭터가 한 스크린에 있을 때, 총 처리 시간의 대부분은 모델을 업데이트 하는 데 쓰입니다.

 

캐릭터가 스킬을 시전할 때, 자연적으로 파티클(particle)의 수는 증가합니다. 결과적으로 더 많은 시간이 파티클 이펙트에 쓰이게 됩니다.

 

여기에서 서로 다른 스레드로 다양한 요소들을 처리하는 방법을 찾게 되었습니다.

 

 

 

 

3.  렌더링 파이프라인을 개선하여 렌더링 시간과 드로우 콜의 수를 줄였습니다.

 

전에는 할 수 없었던 캐릭터 뎁스 MRT 처리와 다른 불필요한 렌더링 처리를 개선했습니다.

 

 

 

 

위 그래프는 테스트 환경에서 도출된 값이며, 특정 변수들이 고정된 리플레이 환경에서 나온 결과를 기초로 두고 있습니다.

 

또한 저번 때와 마찬가지로 예상치 못한 역효과를 다루기 위한 작업을 준비했습니다.

 

따라서 저희는 있을 법한 문제들을 찾아내기 위해 테스트와 재테스트를 수행하였고, 이 최적화 처리는 주요한 문제를 일으키지 않으면서 작동할 것입니다.

 

마찬가지로 더 나은 안정성을 보장하기 위해 몇 가지 성능을 희생할 수 밖에 없었습니다. 하지만 궁극적인 목표는 유저들에게 안전하고 쾌적한 게임플레이 환경을 제공해주는 것입니다.

 

 

인게임 테스트

 

아래 그래프는 리플레이 시나리오가 아닌 위 스크린샷들처럼 실제 게임 내 환경을 기반으로 도출된 값입니다.

 

빨간 그래프는 적용 이전을, 파란 그래프는 적용 이전을 뜻합니다. 첫 번째 그래프는 100명의 캐릭터들이 다양한 활동을 할 때 측정되었습니다. 두 번째 그래프는 캐릭터가 로딩되고 다양한 활동을 한 후에 측정되었습니다.

 

저희는 전반적인 처리 속도와 프레임 드랍의 축소에서 현저한 효과를 볼 수 있었습니다.

 

 

 

 

 

글을 마치며

 

위에서 언급한 프로세스들을 제외하고, 또한 저희는 유저들을 위해 비효율적인 알고리즘 구조 개선과 1ms라도 줄일 수 있는 기타 작업들에 열중하고 있습니다. 최적화 처리가 개선될 때까지 계속 노력할 것입니다.

 

항상 그렇듯이, 게임을 플레이하고 사랑해주시는 분들께 감사의 말씀을 드립니다. :D

-----------------------------------------------------------------------------------------------------------

 

추가사항

 

이 포스트에서 언급된 처리과정들 중 일부분은 이미 한국 트오세에 적용되었고, 스팀 트오세에는 빠르면 다음주(2017년 1월 3일)에 적용할 것으로 기대하고 있습니다.

 

다른 처리과정들은 게임에 도입하기 전에 미세조정을 거쳐야 하므로 계속해서 관련 작업에 착수할 것입니다. 그리고 가까운 미래에 더 많은 업데이트를 가져올 수 있을 것으로 보입니다.