게임 프로그래밍 기초 공부법

61
게임 프로그래밍 기초 공부법 옥찬호

Upload: -

Post on 15-Jul-2015

13.367 views

Category:

Technology


17 download

TRANSCRIPT

게임 프로그래밍기초 공부법

옥찬호

강연자 소개

• 옥찬호

• 히어로 코리아 수석 엔지니어

• KAIST 전산학과 석사과정 재학

• 경북대학교 컴퓨터학부 졸업

• 페이스북 그룹 C++ Korea 대표

• 에이콘출판사 Translator

• 게임샐러드로 코드 한 줄 없이 게임 만들기 (2013)

• 유니티 Shader와 Effect 제작 (2014)

• 2D 게임 프로그래밍 (2014)

• 인디게임 제작팀 Xpecial / Mine Scroll 팀장

목차

• 학력이 낮으면 게임 회사에 들어갈 수 없을까?

• 게임 프로그래머는 수학을 배워야 할까?

• 게임 프로그래머는 어떤 일을 할까?

• 게임 프로그래머가 되려면 무엇을 공부해야 할까?

• 게임은 혼자 만드는 것이 아니다.

• 정리

학력이 낮으면 게임 회사에 들어갈 수 없을까?

네니오

그렇기도 하고, 아니기도 합니다.

• 1990년대 말에서 2000년대 초반에는, 학력이 그다지 중요하지 않았음

• 그 뒤로, 게임산업이 급속도로 발전하면서 거대 게임기업들이 등장자연스레 게임회사에 입사하려는 지원자들이 엄청나게 늘어남

• 필터링하는 과정에서 ‘학력’이라는 요소가 나타날 수밖에 없었음

• 몇 년 전부터 학력을 보지 않는 기업들이 늘어나기 시작함

• 하지만, 학력은 무시할 수 없는 항목!

그렇기도 하고, 아니기도 합니다.

그렇기도 하고, 아니기도 합니다.

그렇기도 하고, 아니기도 합니다.

그렇기도 하고, 아니기도 합니다.

먼저, 게임 개발을 할 수 있는 능력을 만들 것(독학, 아카데미, 게임 전문 대학원 등)

그러고 나서, 포트폴리오를 만들 것!(실무에서 바로 활용할 수 있는 능력을 보여줄 것)

게임 프로그래머는 수학을 배워야 할까?

네!

걸을 수 있는 지역

걸을 수없는 지역

= 0

= 1

bool CollisionCheck(){

int color = GetColor(playerX, playerY);if (color == 1){

return true;}return false;

}

수학을 쓰는 이유?많은 문제의 정답을 구하는 방법이 이미 존재하기 때문!

평면의 뒤쪽에 광원이 있고 우리가 평면의 앞쪽에서평면을 바라볼 때, 평면은 검정색으로 보인다.

텍스처 컬러만 렌더링했을 때 라이팅 계산을 포함한여러 이펙트가 적용된 최종 결과

게임 프로그래머는 어떤 일을 할까?

클라이언트 프로그래머 (서버 프로그래머는 생략)

• 물리 프로그래머

• 사운드 프로그래머

• 렌더링 프로그래머

• 툴 프로그래머

• AI(인공지능) 프로그래머

• 애니메이션 프로그래머

물리 프로그래머

• 현실 세계와 같은 물리 현상을 게임 플레이에 접목

• 강체(Rigidbody)를 주로 다루고,충돌 검출(Collision Detection), 랙돌(Ragdoll) 효과 등다양한 시뮬레이션을 담당하는 프로그래머

• 필요에 따라 유체역학(Fluid Mechanics)을 적용해물, 연기, 눈 등을 표현함

• 물리 현상을 구현하기 쉽게 하기 위한 물리 엔진ODE(Open Dynamic Engine), BulletEngine, Box2D,PhysX를 개발하며, 게임에 따라서 튜닝 작업을 함

사운드 프로그래머

• 사운드를 출력하기 위한 사운드 엔진을 작성하거나,(개발팀에 따라) 게임에서 특정 이벤트의 조건이충족됐을 때 사운드를 플레이하는 로직을 작성

• 게임에서 사용되는 배경음이나 사운드 처리를 담당,3D 포지셔널 사운드와 같은 고급 기술들을 사용해오디오 프로그래밍을 함

• 기획한 컨셉에 따라 효과음 사용법, 음의 무게,음량의 대소를 결정하고 적절한 위치에 효과음이나오도록 하는 작업을 담당함

렌더링 프로그래머

• 화면에 나오는 모든 업무를 담당

• DirectX와 OpenGL을 이용해 그래픽 디자이너가 만든모델링 데이터를 화면에 그려주는 작업,텍스처, 라이팅 계산 처리 등을 담당

• 게임 엔진의 그래픽에 관련된 기능들을 구현하고,구현된 그래픽 기능들이 게임에서 잘 돌아갈 수 있도록최적화 작업을 진행

• 정확히 말하면 “그래픽스 엔진 프로그래머”,그래픽스 렌더러를 개발하고 수정하는 프로그래머(테크니컬 아티스트(TA)와는 역할이 조금 다름)

툴 프로그래머

• 텍스처와 모델을 만들기 위해 포토샵, 맥스, 마야 등콘텐츠 제작툴을 사용하는데, 이러한 툴로 만든데이터를 게임에서 바로 사용할 수 없음

• 따라서 게임회사마다 게임에 맞게 맵 툴,애니메이션 툴 등을 이용해서 게임의 콘텐츠를 개발

• 그래픽 디자이너, 프로그래머, 프로듀서와밀접하게 관련해서 일하며 이들이 게임을 완성하는 데필요한 도구들을 제작

AI(인공지능) 프로그래머

• 지능적인 캐릭터를 만드는 데 필요한 모든 것들을 담당

• 게임에서 사용하는 AI 모듈로는 길찾기(A*),룰 베이스 시스템, FSM, 신경망, 유전 알고리즘 등이 있음

• 이 중에서도 FSM(Finite State Machine)은게임에서 굉장히 많이 사용됨

• 인공지능 뿐만 아니라 애니메이션 시스템에서도 많이 사용함

• 언리얼 엔진의 경우 블루프린트(Blueprint)를 이용해게임 전체를 코드 없이 구현할 수 있음

애니메이션 프로그래머

• 애니메이터가 캐릭터의 동작을 만들고 이를 게임에서사용하기 위해 애니메이션 프로그래머가 로직을 작성

• 예를 들어, 애니메이터가 캐릭터의 걷는 동작과뛰는 동작을 만들었다고 가정

• 게이머가 조작하는 조이스틱의 방향에 따라캐릭터가 걷거나 뛰는 동작을 취함

• 이 때, 애니메이션 블렌딩(Blending)을 하면,걷기와 뛰기의 중간 형태의 결과를 얻을 수 있음

게임 프로그래머가 되려면 무엇을 공부해야 할까?

프로그래밍 언어

• 본인이 생각하고 있는 것을 로직으로 작성할 수 있고,

그 결과를 알아볼 수 있기만 하면 프로그래밍 언어는 무엇이든 상관 없음

• 어떤 언어를 선택했다면 3년 이상은 써보는 게 중요!

• 게임 개발의 주류 언어인 C++, C#, Java 등을 추천

• 주의할 점은 C++을 어렵게 사용해서는 안됨

• 현업에서 C++을 어렵게 사용하는 사람은 매우 드물고,보편화된 문법이나 패턴들을 사용함

컴퓨터 구조

• 프로그래머 = 컴퓨터 소프트웨어를 만드는 사람

• 컴퓨터라는 물건이 어떻게 동작하는지 내부적으로 알아야 함

• 내부적으로 어떻게 컴퓨터가 동작하는지 몰라도 작성하는데 무리가 없지만,동작 원리를 알고 나면 컴퓨터 소프트웨어를 작성하는 데 많은 도움이 됨

• 특히 콘솔 게임 개발자라면 해당 게임기(PS4, Xbox One 등)의최고 성능을 끌어내기 위해 하드웨어에 대한 이해가 필수

수학

• 고등학교 수학 수준으로는게임 개발에 한계가 있음

• 대수학, 삼각함수, 미적분,선형 대수학, 확률과 통계 등

• 수학자가 될 정도의 지식은 필요없으며,수학이라는 도구를 언제 어떻게써먹는지 정도만 알아도 충분

자료구조, 알고리즘

• 데이터를 어떻게 표현하는가에 따라 프로그램의 성능이 좌우되는 경우가 많음

int values[100][20];

int sum = 0;for (int y = 0; y < 100; ++y) {

for (int x = 0; x < 20; ++x) {sum += values[y][x];

}}

int sum = 0;for (int x = 0; x < 20; ++x) {

for (int y = 0; y < 100; ++y) {sum += values[y][x];

}}

BA

라이브러리, API

• Win32API란 윈도우 운영체제에서 프로그램을 개발하기 위해Microsoft에서 제공하는 함수들의 모임

• 게임이 동작할 머신의 종류에 따라 제공되는 API도 다르고사용할 수 있는 라이브러리도 다름

• PC, Xbox용 게임을 개발하기 위해서는 DirectX 사용

• Mac이나 PS4는 OpenGL 사용

• PC에서 일반 응용 프로그램을 개발하기 위해 Win32, MFC사용법을 배우고 Mac에서는 Cocoa를 배움

컴퓨터 그래픽스

• 게임은 모니터에 무언가를 그려야 하므로DirectX, OpenGL 둘 중에 하나는 알아야 함

• 라이브러리를 사용하는 것뿐만 아니라 원리를알기 위해서는 컴퓨터 그래픽스를 공부해야 함

• 내부 원리를 알고 라이브러리를 사용하는 것과모른 채로 사용하는 것은 많은 차이가 있음

게임은 혼자 만드는 것이 아니다.

예전에는, 혼자 만들었다.

카라테카(Karateka) 신검의 전설

지금은…

아티스트

프로그래머기획자

아티스트가 프로그래머와 대화할 때

• 구체적인 수치와 예시로 대화할 것

• 프로그래머는 C언어와 수학으로 단련되었기 때문에 확실한 결과를 추구하는 사람들

• “조금 더 예쁘게, 조금 더 크게 해주세요”가 아니라 “20% 정도 크게 해주세요”

• 오타에 불같이 화내는 프로그래머를 이해할 것

• 작은 문제에 민감하게 반응하는 프로그래머가 난감하겠지만,오타 하나에 버그나 났을까 2시간 동안 코딩을 체크하는 프로그래머는 더 난감함

프로그래머가 아티스트와 대화할 때

• 친절하게 설명할 것

• 아티스트가 요구하는 기능이 구현이 안된다면 왜 안되는지 차근히 설명해 줄 것

• 아티스트는 프로그래머가 아니기 때문에 잘 모름

• 아티스트가 한 픽셀에 집착해도 이해해줄 것

• 프로그래머가 오타에 민감하듯이, 아티스트들도 한 픽셀이 그림을 다르게 만든다고 생각함

• 숫자와 전문용어보다는 보편적인 언어로 대화할 것

• 매일 스크립트와 숫자를 접하는 프로그래머들은 익숙하지만,대부분의 아티스트들은 HTML 태그도 모름

• 아티스트가 구체적인 수치로 이야기한다면,프로그래머들은 ‘이 그림 조금 더 밝게 만들어 주세요’라고 말할 것

아티스트가 기획자와 대화할 때

• 작업하기 전에 기획문서 꼼꼼히 읽을 것

• 게임의 자세한 설정은 기획자가 하나하나 글로 구현함

• 작업에 착수하기 전에 기획서를 읽고 게임에 대해 확실히 숙지하고 있어야 잔업이 줄어듬

• 피드백을 받았을 때, 구체적으로 질문할 것

• 기획자들도 종종 추상적인 요구를 함. ‘빨간색으로 바꿔주세요’하면,‘왜 빨간색으로 바꾸고 싶으세요’라고 되물어 기획자의 의도를 파악할 것.가끔 기획자가 원하는 건 검은색일 때가 있음

• 기획자의 생각을 믿을 것

• 기획자의 머리 속에는 작업하는 게임에 대한 전반적인 정보가 다 들어 있음

• 무조건 의지하면 안 되지만, 대체로 기획자를 믿고 작업하면 됨

기획자가 아티스트와 대화할 때

• 아티스트에게 기획을 설명해 줄 것

• 아티스트는 게임의 전체적인 기획을 모르는 경우가 많음

• 수시로 게임의 비전과 컨셉에 대해 설명

• 아티스트를 적당히 방임할 것

• 너무 틀에 맞추면 잘 나올 그림도 안나옴. 여러가지 업무를 주고,아티스트가 스스로 업무 순서를 짜서 작업할 수 있도록 배려

• 원하는 이미지의 느낌을 정확하게 설명할 것

• ‘까만 머리에 양복을 입은 남자’라고 한정짓기보다는‘눈빛이 은근하고 싸늘한 분위기가 흐르는 남자’처럼 구체적인 분위기를 전달할 것

• 아티스트는 그쪽 분야의 전문가이기 때문에 생각보다 더 좋은 결과가 나올 수 있음

중요한 건커뮤니케이션!

슬랙(SLACK)을 이용한 그룹 채팅

트렐로(TRELLO)를 이용한 작업 관리

GITHUB를 이용한 프로젝트 버전 관리

“힘의 균형은 유지되어야 한다!”

정리

게임 프로그래머가 하고 싶나요?

왜요?이 말에 대답할 수 있나요?

대답할 수 있다면,기본적인 것부터 시작하세요

출처

• 디스이즈게임, 문기영, 게임 프로그래머의 길http://www.thisisgame.com/webzine/series/nboard/212/?series=99

• TOPCIT, NC소프트 서정훈 차장, 게임 개발자의 구조와 역할http://blog.naver.com/PostView.nhn?blogId=2011topcit&logNo=220174150285&parentCategoryNo=&categoryNo=17&viewDate=&isShowPopularPosts=false&from=postView

• 게임잡, [LOST ARK] 인재 모집http://www.gamejob.co.kr/List_GI/GIB_Read.asp?GI_No=94113

• 머니투데이, [NDC 13] 아티스트-기획자-프로그래머, 소통 노하우http://m.mt.co.kr/renew/view.html?no=2013042521108191949

• 위키페디아, 게임코디http://www.wikipedia.org, http://www.gamecodi.com

• ExtremeTech, DirectX 11 and the Heaven Benchmarkhttp://www.extremetech.com/computing/84556-directx-11-and-the-heaven-benchmark/8