41
GPG Study 1.13 | 1.14 Devrookie 권승진 1.13 실시간 통계와 게임 내 디버깅 1.14 실시간 게임 내 프로파일링

Gpg 1.13 ~ 1.14

  • Upload
    sj-k

  • View
    544

  • Download
    0

Embed Size (px)

Citation preview

GPG Study 1.13 | 1.14

Devrookie

권승진

1.13 실시간 통계와 게임 내 디버깅

1.14 실시간 게임 내 프로파일링

들어가기 전에…

실시간 통계와 게임 내 디버깅

목차

• 게임 내 디버깅이 무엇인가?

• 왜 사용하는가?

• 실제 사용 예

• 장, 단점

게임 내 디버깅이 무엇인가?

하하~! 몬스터가 플레이어

의 접근을 감지하는 기능

을 만들었어!!!

이제 한번 실행시켜볼까?

주인공

게임 내 디버깅이 무엇인가?

뭐야!!!왜 걸렸는데 날 쳐

다보지 않는거지??

게임 내 디버깅이 무엇인가?

아~! 타겟은 재대로 잡았는데,

위치를 잘못 얻어오네!?

게임 내 디버깅이 무엇인가?

아~! 타겟은 재대로 잡았는데,

위치를 잘못 얻어오네!?

게임 내 디버깅이 무엇인가?

이렇게 하는 방법입니다.

왜 사용하는가?

• 디버깅 시간 절약

– 알트탭 시간이 의외로 만만치 않다.• 알트탭 할 일이 없다.

– 간단한 수치 조정은 화면 안에서 바로 가능하다.

• 컴파일 시간 & 로딩 시간이 확연히 줄어든다.

– 바뀐 결과가 바로 눈에 보인다.

• 집중력 유지

실제 사용 예

• 미리 만들어진 stat.h,cpp 파일을 간단히 사

용해보고,

• 실시간 게임 내 디버깅 툴이 어떤 형식을 갖

추고 있는지 알아보자.

구조

CStatBase

CStatPage

CStatPage

CStatPage

.

.

.

CStatEntry

CStatEntry

.

.

CStatEntry

CStatEntry

.

.

<Static Class>

실제 사용 예

실제 사용 예

<프로그램 시작 시> 초기화 하고

<프로그램 업데이트 시>

키보드 상태 삽입해주고,

출력한다.

(내용을 담을 문자배열) : 여기에 출력될 모든 내용이 들어가게 된다.

실제 사용 예

사용하고 싶은 곳에서 등록만 하면 끝

실제 사용 예

실제 사용 예

실제 사용 예

아무것도 없는 곳에서

stat.h 추가하고 한 줄 추가하면

끝이다.

창에 띄우는건 됐는데…

이게 끝?

변경 안하고, 첨부된 파일 stat.h, stat.cpp

그대로 쓰실 생각이라면…..

F12 : 창 켜기/끄기

F11 : 값 에딧 기능 켜기/끄기

에딧 기능이 켜져 있을 때

+키 : 수치 증가

- 키 : 수치 감소

Shift키 : 누르고 있을 때 수치 * 10

Ctrl키 : 누르고 있을 때 수치 * 100

Up키 : 편집할 Entry 변경 위로

Down키 : 편집할 Entry 변경 아래로

PageUp : 페이지 앞으로

PageDown : 페이지 뒤로

변경 안하고, 첨부된 파일 stat.h, stat.cpp

그대로 쓰실 생각이라면…..

F12 : 창 켜기/끄기

F11 : 값 에딧 기능 켜기/끄기

에딧 기능이 켜져 있을 때

+키 : 수치 증가

- 키 : 수치 감소

Shift키 : 누르고 있을 때 수치 * 10

Ctrl키 : 누르고 있을 때 수치 * 100

Up키 : 편집할 Entry 변경 위로

Down키 : 편집할 Entry 변경 아래로

PageUp : 페이지 앞으로

PageDown : 페이지 뒤로이것 외에도 여러가지 기능을

개별로 추가해서 사용하시면 됩니다.

몇 가지 주의 할 점

• stat화면에서 변하는 변수 값을 적용하려면 포인터로 해야 한다는 당연한 이야기.

• Update시마다 갱신되는 변수 값은 바뀌어도 적용되지 않을 수 있다.

• 여러 개 찍어내야 하는 클래스(몬스터라거나)들의변수은 static으로 선언한 변수를 가지면 안된다.

장점

• 장점

– 어느 코드에서나 쉽게 변수 추가가 가능하다.

– 간략한 코드로 쉽게 디버깅 할 수 있다.

– 페이지 단위로 여러 정보를 볼 수 있다.

– 수치 변화를 실시간으로 볼 수 있다.• 범위 지정도 가능

단점

• 단점

– 필요한 변수형태를 직접 제작해야 한다.

실시간 게임 내 프로파일링

목차

• 프로파일링이란?

• 실제 사용 예

• 구현 원리

프로파일링이란?

코드의 병목 지점을 빠르게 찾을 수

있도록 하는 기법

프로파일링이란?

오! 맙소사 FPS가 왜이

렇게 떨어진거지??

프로파일링이란?어디가 문제인지 모르겠군!!

함수호출을 하나씩 끄면서

확인해봐야겠어!

물리 업데이트 함수 꺼보고

컴파일 & 실행

GUI업데이트 함수 꺼보고

컴파일 & 실행

.

.

.

.

1시간이 지나고..

3시간이 지나고...

.

프로파일링이란?어디가 문제인지 모르겠군!!

함수호출을 하나씩 끄면서

확인해봐야겠어!

물리 업데이트 함수 꺼보고

컴파일 & 실행

GUI업데이트 함수 꺼보고

컴파일 & 실행

.

.

.

.

1시간이 지나고..

3시간이 지나고...

.

프로파일링이란?

실시간으로 함수들의 호출

시간이 얼마인지 알아내는 기법

실시간으로도,

맨 끝에 로그로 남기기도

실제 사용 예

• 미리 만들어진 profile.h, profile.cpp파일을

보고,

• 프로파일링 도구라는 것은 어떤 기능을 갖

추고 있는지 알아보자.

실제 사용 예

Start와 End로 프로파일링 하고

싶은 범위만 지정하면 됩니다.

초기화 하고,

실제 사용 예

<결과를 계산하여 버퍼에 저장하는 코드>

사용자의 렌더링 환경에 맞게 변경 가능

실제 사용 예

• 결과물평균수행 비율 (전체에서 몇 %인가?)

최소수행 비율 (전체에서 몇 %인가?)

최대수행 비율 (전체에서 몇 %인가?)

한프레임당 호출 횟수

함수 이름몬스터는 2마리인가봐요.

실제 사용 예

• 결과물

들여쓰기 -> 내포 관계

MainLoop안에서 GUI Update코드를 호출

MainLoop안에서 Player Update코드를 호출

실제 사용 예

• 결과물

GUI 업데이트는

한 프레임에서 13.9%를 차지한다.

몬스터의 상황 업데이트는

한 프레임에서 1.4%를 차지한다.

실제 사용 예

• 결과물

한 프레임에서

GUI, Player, Creep업데이트

이외의 것들은 83.4%를 차지한다.

장점

• 함수의 부하 정도를 한눈에 알 수 있다.

– 논리적인 버그를 미리 잡을 수 있다.

– 병목 지점을 쉽게 찾을 수 있다.

간단한 구현 원리

• 코드 첨부

참고자료

• GPG 1권 내용과 예제코드