Microsoft Robotics Developer Studio 고급 프로그래밍 과정 [Part 2] VPL 기초
게임 프로그래밍 기초 공부법
-
Upload
- -
Category
Technology
-
view
13.373 -
download
17
Transcript of 게임 프로그래밍 기초 공부법
강연자 소개
• 옥찬호
• 히어로 코리아 수석 엔지니어
• KAIST 전산학과 석사과정 재학
• 경북대학교 컴퓨터학부 졸업
• 페이스북 그룹 C++ Korea 대표
• 에이콘출판사 Translator
• 게임샐러드로 코드 한 줄 없이 게임 만들기 (2013)
• 유니티 Shader와 Effect 제작 (2014)
• 2D 게임 프로그래밍 (2014)
• 인디게임 제작팀 Xpecial / Mine Scroll 팀장
목차
• 학력이 낮으면 게임 회사에 들어갈 수 없을까?
• 게임 프로그래머는 수학을 배워야 할까?
• 게임 프로그래머는 어떤 일을 할까?
• 게임 프로그래머가 되려면 무엇을 공부해야 할까?
• 게임은 혼자 만드는 것이 아니다.
• 정리
그렇기도 하고, 아니기도 합니다.
• 1990년대 말에서 2000년대 초반에는, 학력이 그다지 중요하지 않았음
• 그 뒤로, 게임산업이 급속도로 발전하면서 거대 게임기업들이 등장자연스레 게임회사에 입사하려는 지원자들이 엄청나게 늘어남
• 필터링하는 과정에서 ‘학력’이라는 요소가 나타날 수밖에 없었음
• 몇 년 전부터 학력을 보지 않는 기업들이 늘어나기 시작함
• 하지만, 학력은 무시할 수 없는 항목!
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 둘 중에 하나는 알아야 함
• 라이브러리를 사용하는 것뿐만 아니라 원리를알기 위해서는 컴퓨터 그래픽스를 공부해야 함
• 내부 원리를 알고 라이브러리를 사용하는 것과모른 채로 사용하는 것은 많은 차이가 있음
아티스트가 프로그래머와 대화할 때
• 구체적인 수치와 예시로 대화할 것
• 프로그래머는 C언어와 수학으로 단련되었기 때문에 확실한 결과를 추구하는 사람들
• “조금 더 예쁘게, 조금 더 크게 해주세요”가 아니라 “20% 정도 크게 해주세요”
• 오타에 불같이 화내는 프로그래머를 이해할 것
• 작은 문제에 민감하게 반응하는 프로그래머가 난감하겠지만,오타 하나에 버그나 났을까 2시간 동안 코딩을 체크하는 프로그래머는 더 난감함
프로그래머가 아티스트와 대화할 때
• 친절하게 설명할 것
• 아티스트가 요구하는 기능이 구현이 안된다면 왜 안되는지 차근히 설명해 줄 것
• 아티스트는 프로그래머가 아니기 때문에 잘 모름
• 아티스트가 한 픽셀에 집착해도 이해해줄 것
• 프로그래머가 오타에 민감하듯이, 아티스트들도 한 픽셀이 그림을 다르게 만든다고 생각함
• 숫자와 전문용어보다는 보편적인 언어로 대화할 것
• 매일 스크립트와 숫자를 접하는 프로그래머들은 익숙하지만,대부분의 아티스트들은 HTML 태그도 모름
• 아티스트가 구체적인 수치로 이야기한다면,프로그래머들은 ‘이 그림 조금 더 밝게 만들어 주세요’라고 말할 것
아티스트가 기획자와 대화할 때
• 작업하기 전에 기획문서 꼼꼼히 읽을 것
• 게임의 자세한 설정은 기획자가 하나하나 글로 구현함
• 작업에 착수하기 전에 기획서를 읽고 게임에 대해 확실히 숙지하고 있어야 잔업이 줄어듬
• 피드백을 받았을 때, 구체적으로 질문할 것
• 기획자들도 종종 추상적인 요구를 함. ‘빨간색으로 바꿔주세요’하면,‘왜 빨간색으로 바꾸고 싶으세요’라고 되물어 기획자의 의도를 파악할 것.가끔 기획자가 원하는 건 검은색일 때가 있음
• 기획자의 생각을 믿을 것
• 기획자의 머리 속에는 작업하는 게임에 대한 전반적인 정보가 다 들어 있음
• 무조건 의지하면 안 되지만, 대체로 기획자를 믿고 작업하면 됨
기획자가 아티스트와 대화할 때
• 아티스트에게 기획을 설명해 줄 것
• 아티스트는 게임의 전체적인 기획을 모르는 경우가 많음
• 수시로 게임의 비전과 컨셉에 대해 설명
• 아티스트를 적당히 방임할 것
• 너무 틀에 맞추면 잘 나올 그림도 안나옴. 여러가지 업무를 주고,아티스트가 스스로 업무 순서를 짜서 작업할 수 있도록 배려
• 원하는 이미지의 느낌을 정확하게 설명할 것
• ‘까만 머리에 양복을 입은 남자’라고 한정짓기보다는‘눈빛이 은근하고 싸늘한 분위기가 흐르는 남자’처럼 구체적인 분위기를 전달할 것
• 아티스트는 그쪽 분야의 전문가이기 때문에 생각보다 더 좋은 결과가 나올 수 있음
THANK YOU!QUESTION?
HTTP://WWW.FACEBOOK.COM/UTILFOREVER
출처
• 디스이즈게임, 문기영, 게임 프로그래머의 길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