블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (57)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (51)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
03-29 07:22

아무리 재미있고 뛰어난 그래픽의 게임을 만들어도 너무 고사양의 PC를 요구하거나 고사양의 PC로 돌리고 있음에도 최적화 되지 않은 문제로 유저가 제대로 게임을 즐길수 없다면 시장의 외면을 받기 쉬워지죠.

하지만 어떻게 최적화가 잘 되어있는지 판단하는 것도 문제입니다.

요즘 잘나가는 사양의 PC를 전산팀에 요청해 받은 뒤 게임 클라이언트를 실제로 돌려보며 확인하는 방법도 있겠지만 좀 더 스마트한 방법을 찾아보도록 하겠습니다.(정말 스마트한 방법은 프로그래머가 클라이언트 내부에 메모리 사용량과 Frame을 기록해주도록 한 뒤 Bot이 돌아다니며 데이터를 수집하는 방식을 사용하더군요. -_-b)

아마도 이 방법은 개발팀의 지원이 어려울 경우 Test팀이 사용 할 수 있는 최선이지 않을까 싶습니다;

준비물
Fraps -  Frame 측정 및 기록하는데 꼭 필요합니다.



perfmon - 윈도우 성능 모니터링 도구. XP부터 7까지 모두 윈도우에 기본으로 탑재되어 있습니다.

 
Excel - 최고의 테스트 Tool 이며 친구입니다. 테스트를 한다면 Excel은 꼭 배워둡시다.


Test 진행

a. Fraps 준비

1. Fraps에는 동영상 녹화로 많이 쓰이지만 그 외에 스크린샷 촬영, Frame 기록 기능이 붙어 있습니다. Test 시에 사용되는 것은 Frame 기록 기능과 일정 시간마다 스크린샷을 촬영하는 기능입니다.
2. FPS 탭페이지에서 FPS 체크해 줍니다.


3. Screenshot 탭페이지에서 파일 포맷을 jpg로 선택해주고 일정 시가마다 스크린샷을 남겨주는 기능을 체크해줍니다. 시간은 10초 정도로 주면 됩니다.


4. 참고로 fraps는 구매해야 위 기능을 모두 쓸수있습니다. 가지고 있음 유용한 프로그램이니 떼를 써서라도 회사에 구매해 달라고 해봅시다.
5. 주의사항 단축키로 주로 쓰이는 F11, F10 같은 펑션키는 게임 클라이언트내에서도 무언가의 단축키로 쓰일 수 있습니다. 최대한 게임 내 단축키와 겹치지 않도록 설정합니다.
 
B. perfmon 준비

1. 우선 게임 클라이언트를 실행시켜 둡니다. 그 이유는 나중에 나옵니다. 그 다음에 Win - R 단축키를 누르면 실행 창이 뜹니다. perfmon 이라 쓰고 확인을 눌러주면 성능 모니터 도구가 실행됩니다.


2. 우선은 Win7 기준으로 설명 드리겠습니다. 메뉴 이름은 XP나 Vista나 비슷비슷하니 찾아보시면 금방 아실 수 있습니다. "데이터 수집기 집합 > 사용자 정의" 를 들어가신 뒤 오른쪽 공백페이지에서 오른 클릭을 하시면 "새로 만들기 > 데이타 수집기 집합"을 선택 하실 수 있습니다.


3. 선택하시면 새 데이터 수집기 집합을 만들기 위한 실행창이 뜹니다. 우선 이름을 정해줍니다. 이름은 직관적으로 적습니다. "게임명_메모리사용량_확인" 정도면 될 것 같습니다. 템플릿과 수동을 선택 할 수 있습니다만 수동을 선택합니다.

4. 다음을 선택하시면 "데이터 로그 만들기" 에서 "성능 카운터"를 체크하고 다음으로 넘어갑니다.

5. 성능 카운터를 추가 하는 페이지입니다. 추가 버튼을 누르면 윈도우에서 사용하는 리소스들의 리스트를 볼 수 있습니다. 이중에서 선택할 것은  "Process > Private Bytes" 입니다. 맨처음 화면에는 Processor 만 보이는데 그 바로 위에 Process 가 있습니다. 헤메지 마세요.

6. Private Bytes를 선택했으면 그 바로 아래 개체 인스턴스를 선택하는 곳이 있습니다. perfmon을 실행시키기 전에 클라이언트를 먼저 실행시키는 이유는 그래야 이곳에 client의 인스턴스가 나오기 때문입니다. 클라이언트 인스턴스를 선택한 후 추가 버튼을 누르면 오른쪽에 클라이언트의 메모리 사용량 카운터가 추가 됩니다.


7. 확인을 누르면 다시한번 카운터가 추가된 것을 확인 할 수 있습니다. 하단에 샘플간격 단위를 정할 수 있는데 1초로 합니다.

8. 다음을 누르면 로그 데이터를 남길 폴더를 선택합니다. 적당히 좋아하는 폴더를 설정해주고 마침을 누릅니다.

9. perfmon 의 준비도 완료되었습니다.

C. 시나리오 준비

● 테스트를 시작하기전 시나리오를 준비하는 것이 좋습니다. 시나리오에는 다음과 같은 요소를 정리합니다.

a. 테스트 PC Spec을 정리합니다. 가능하다면 고사양/중사양/저사양 PC와 게임 내에서 설정 가능한 그래픽 옵션을 맞춰서 정리해주는 것이 좋습니다. PC Spec의 고려는 다나와 사이트의 PC방 PC 스펙과 STEAM의 통계 페이지를 참고합니다. (http://store.steampowered.com/hwsurvey )

b. 테스팅 시간 : 30분에서 1시간 정도의 진행 시간을 잡습니다. 다른 요소에 맞춰 정하는게 가장 좋습니다만 1시간 이상 넘어가면 데이터 가공 및 확인에 어려움이 생기니 최대 1시간 정도가 좋습니다. 그 이상 해야될 경우에는 1시간 단위로 테스트를 끊어서 중간중간 데이터를 취합해가며 진행합니다. (왠만하면 쉬면서 합시다...)

c. 진행 루트 : 게임 내에서 이동할 필드의 루트를 정합니다. 오브젝트가 많은 곳, NPC가 많은 곳등 특징적인 장소를 정하거나 사전 프로그램팀의 의견을 얻어 확인되면 좋을 장소를 선정합니다.

d. 시나리오 : 테스팅 동안 수행할 액션들을 시간별로 정리합니다. 비쥬얼이 화려한 스킬을 사용한다던지 각자 따로 움직이던 테스터들을 정해진 시간에는 모여서 PK를 한다던지 클라이언트에 부하가 될만한 액션들을 놓으면 됩니다.

e. 짝짓기 : 게임 내에서 같이 이동할 테스트 파트너를 정합니다. 최소한 2명 이상은 같은 지역을 이동하며 시나리오를 진행해야 서로 다른 PC에서의 데이터 비교가 가능합니다. 같은 지역을 다니더라도 누구는 과부하가 생길 수 있고 누구는 안생길 수 있는 법입니다. 비교 대상이 있어야만 이와 같은 문제 상황을 찾을 수 있습니다.

D. 테스팅 진행
 
1. 이제 테스트 준비가 되었다면 시작합니다. 시나리오 시작 전 프랩스의 FPS 기록과 스크린샷 기록 기능을 단축키로 활성화 해준 뒤 perfmon 도 데이터 수집기 집합에서 만들어 놓은 카운터를 상단의 실행 버튼으로 활성화 시켜 줍니다.

 
2. 자 이제 테스트가 시작되었습니다. 준비해 놓은 시나리오대로 잘 진행하면 됩니다.

3. 몇 가지 주의사항
a. 테스트란게 만사형통으로 잘되었으면 좋겠지만 그게 쉽지만은 않죠. 분명 테스트 진행 중 클라이언트 혹은 서버 crash 가 발생할 수 있습니다. 진행된 곳까지의 기록은 남으니 해당 기록물들을 한폴더 모아 압축해 정리해 놓고 집착하게 다시 테스트를 진행합니다.
b. 서버 crash나 클라이언트 crash 상황이 특정한 재발생 스텝이 있을 경우 최적화 테스트를 하는 동안에는 해당 액션을 피하도록 합니다. 물론 해당 문제는 따로 보고가 되야 합니다.

4. 테스트가 완료되면 각 테스터들은 perfmon, fps, 스크린샷 파일들을 모아 압축 파일로 만들어 진행자에게 전달합니다. 압축 파일명은 사전에 통일 시켜주는 것이 좋습니다. "홍길동_시나리오1.zip" 혹은 crash가 있던 결과물은 "홍길동_시나리오1_crasf.zip" 이런식으로 말이죠.

E. 결과물 정리하기

1. 드디어 결과물들을 정리할 시간이 되었군요. 테스터들은 모두 가버리고 진행자인 당신만 남았습니다. 그럼 기분을 가라 앉히고 파일들을 열어 봅시다. 우선 perfmon 입니다. 설정에서 선택한 폴더에 가면 DataCollector01.blg 파일이 있을 겁니다. 실행시키면 자동으로 모니터링 도구가 실행되며 보고서 그래프를 볼 수 있습니다. 엑셀에서도 이 그래프를 볼 수 있을 것입니다. 그래프 화면에서 오른 클릭 후 "데이터를 다른 이름으로 저장"을 선택 합니다. 그리고 파일형식을 쉼표 구분의 csv 파일로 선택하여 저장 합니다.

2. 저장된 csv 파일을 열어봅시다.

A열이 시간이고 B열은 사용된 메모리 값입니다. 표만봐도 시간이 지날 수록 메모리 사용량이 늘었음을 알 수 있군요.
자 이제는 Frame 입니다.

3. fraps의 저장 폴더를 따로 설정하지 않았다면 fraps 설치 폴더 내에 Benchmarks 라는 폴더가 생겼을 겁니다. 그 폴더 내에 역시 csv 확장자 파일이 있습니다. 열어보도록 하겠습니다.

떨렁 A열에 숫자만 잔뜩 있는 문서가 열릴 것입니다. 저 숫자들이 초당 Frame 값입니다. A열 선택 후 복사한 뒤 perfmon 결과 문서에 합칩니다.

엑셀 내용을 좀 종리했습니다. 시간은 년월일은 제거하고 시분초만 남겼고 FPS를 C열에 붙여넣었습니다. 이제 그래프로 만들겠습니다.

4. Excel 2007 부터 그래프 만들기가 참 쉬워졌습니다. 위의 A,B,C 열을 모두 선택한 뒤에 리본 메뉴의 삽입에서 그래프 "꺾은선형"을 선택하면 바로 그래프가 만들어 집니다.

예제의 Excel은 2010 같기도 하지만 어차피 리본메뉴는 같습니다. 리본메뉴 없는 Excel을 쓰신다면 네이버에서 그래프 만드는 법을 검색해보시기 바랍니다. 아니면 회사에 Excel 2007 이상은 사달라고 쫄라봅시다.

5. 그래프는 만들어 졌는데 메모리 사용량은 나오는데 FPS는 그래프에 보이지 않습니다. 메모리 사용량과 FPS의 값 단위가 너무 나서 그렇습니다. 조정을 좀 해주겠습니다.

축 옵션에 들어가서 최대값과 주 단위를 좀 조정해 준 뒤 표시단위는 백만으로 선택합니다. 그러면 단위값이 변경되며 하단에 FPS 그래프가 바닥에 붙어서 나오게 됩니다. 

바닥의 껌딱지를 오른 클릭한 뒤 데이터 계열 서식을 선택 합니다. 계열옵션에 보면 보조 축을 선택할 수 있는데 선택화면 오른쪽에 FPS 축이 따로 생기면 껌딱지가 발딱 일어납니다. 기운차군요(.....)

6. 너무 자세하게 쓰느라 슬슬 힘들기 시작하므로 그래프의 미세한 조정은 엑셀책을 보고 알아보시길 권하고 이제 문제점 찾기로 가보겠습니다.

F. 문제점 찾아보기



좀 정리된 그래프를 보도록 하겠습니다.
나름 깔끔한 그래프입니다. 메모리 사용량에서 특출나게 많이 잡아 먹는 경우도 없고 중간중간 누수없이 반환도 잘 되고 있습니다. Frame은 굴곡이 너무 심해보입니다. 잦은 Frame 변화는 유저의 시각적 피로도를 증가시키는 요소 입니다. 수직 동기화 옵션을 제공해서 최대한 60fps 정도를 유지해주는 것이 좋습니다.

갑작스럽게 Frame이 떨어지는 곳이 보입니다. 왜 그런지 유추해야겠죠. 먼저 집에간 테스터들을 괴롭혀 봅시다. 문제가 있는 그래프의 테스터에게 전화를 걸어 테스트 할 때 몇시 몇분에 무슨 상황이었냐며 물어봅시다. 기억을 못하면 그런것도 기억을 못하냐고 해봅시다. 자신이 쿨가이임을 느끼며 전화를 끊습니다. 는 농담이고.. 이제 스크린샷을 사용합니다. 스크린샷은 10초 단위로 찍도록 설정했기 때문에 해당 시간에 맞는 스크린샷을 열어서 확인해봅니다.

스크린샷을 통해 Frame이 떨어지는 곳의 장소와 상황을 알 수 있습니다. 어떤 스킬을 사용했더니 파티클로 인해 프레임이 떨어 질 수도 있고 해당 장소에 유저들이 잔뜩 모여 렉이 발생했을 수도 있습니다. 아니면 오브젝트가 잔뜩있는 장소일 수도 있구요.
Frame 뿐 아니라 메모리 사용량에 있어서도 그래프에 극심한 변화를 볼 수 있을 경우 스크린샷으로 해당 상황을 유추할 수 있습니다.

문제의 확인 시에는 다른 테스터들의 결과물도 도움이 됩니다. 꼭 비교 참조해서 전체적으로 발생하는 현상인지 하나의 PC에서만 나오는 현상인지도 확인하도록 합니다.

어떤 류의 문제가 생기는가에 대해 모든 상황을 언급해주기는 어렵습니다. 문제라 생각하고 얘기했는데 실은 아니더라라는 경우도 충분히 있을 수 있거든요. 가장 좋은건 그래프와 스크린샷을 통해 알아낸 결과물들을 정리 한 뒤 개발팀과 같이 확인 하는 것이라고 봅니다. 좀 더 확실한 문제의 이유를 찾을 수도 있고 자신의 경험 축적에도 도움이 될수 있을 것입니다.


p.s 오랫만에 긴 글을 작성할려니 힘들군요. 나눠쓰고 싶은 욕구가 강하였으나 테스트 진행 과정이 중간에 뚝 끊겨있으면 욕먹을것 같아서 그러지 않았습니다; 하지만 내용량 대비 시간을 들이지 못해서 부족하거나 이해 안가는 부분이 있을 수도 있을것 같습니다(......) 그런 부분은 질문 주시면 답변을 드리도록 하겠습니다. 감사합니다.

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

클라이언트 최적화 테스트하기 아프다 서비스(A/S) 입니다.


일요일에 클라이언트 최적화 테스트하기에 대한 글을 작성해 올렸습니다.

해당 내용 중 잘못된 내용이 있어 수정과 함께 제 마음이 아픈 아프다 서비스(A/S)를 드립니다.

잘못된 내용 부분은 Fraps의 fps 기록과 스크린샷 촬영 기능을 같이 켜준다. 라는 부분인데 같이 안된다라는 제보가 있어 확인해보았습니다.

안되더군요. =_=;;;

우선 변명을 드리자면 해당 내용은 제 경험과 함께 웹에서 조사한 툴 조합 시 얻을 수 있는 결과물에 대해 나름 고민해서 만든 테스팅 메뉴얼 입니다. 그런데 솔직하게 얘기드리자면 제가 대부분 15분,30분 단위의 테스팅을 진행해서  이때까지 1시간 가량의 장시간 테스팅을 할 기회는 없었습니다. (MMORPG 계열 보다는 FPS와 같은 단시간 게임 테스팅을 주로했다고 생각해주시면 될 것 같습니다.)

그러다보니 보통은 스크린샷보다 테스터의 피드백 수집으로 리포트 작성이 되더군요. (15분 30분 정도는 상황에 대해 테스터들도 기억을 합니다.)

스크린샷에 대한 내용은 1시간 이상 테스트가 지속될 경우를 예상해 도움이 되고자 넣은 내용인데 FRAPS에서 2가지 기능을 같이 사용 못한다는 제약이 있다는 걸 사전에 파악하지 못하고 글을 작성해 잘못된 내용을 올린것 같습니다. 이 부분 해당 게시물을 보신 모든 분들께 사과 드립니다.

그럼 A/S 나갑니다.

생각보다 특정 시간마다 스크린샷을 찍어주는 캡쳐 프로그램이 정말 없더군요. 저는 주로 리포트 작성용으로 오픈 캡쳐를 사용하고 있습니다만 오픈 캡쳐도 해당 기능은 없었습니다. (요청 피드백을 보내봐야 겠습니다. ^^)

우선 찾아낸 캡쳐 프로그램으로 안카메라라는 캡쳐 프로그램이 있었습니다.



인터페이스 참 단순하더군요. 저 중앙창을 스크린샷 찍으려는 영역에 맞춰 창크기를 조절하면 캡쳐 준비 끝입니다.
옵션에서 ms 단위로 시간을 조절 할 수 있으며 상단 2번째 아이콘으로 시간 캡쳐를 시작 할 수 있습니다.

프랩스와 안카메라3를 같이 사용하면 1시간 이상 테스트시 상황 기록에 대한 이슈는 해결 할 수 있을 것으로 보입니다. :)

프랩스에서 동시 기능을 지원해주는게 가장 깔끔할텐데 저도 아쉬움이 많이 남네요 :(

그럼 도움 되었기를 바라며 이만 글 줄이겠습니다.
감사합니다.

반응형
Posted by blueasa
, |