Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

50,334 views

Published on

KSIA 내부 강연회를 위해 작성한 발표 자료. 게임 프로그래밍을 시작하려고 하는 지망생들에게 하고 싶었던 이야기를 간단히 정리해 봤다.

Published in: Technology

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

  1. 1. 게임 프로그래밍 기초 공부법 옥찬호
  2. 2. 강연자 소개 • 옥찬호 • 히어로 코리아 수석 엔지니어 • KAIST 전산학과 석사과정 재학 • 경북대학교 컴퓨터학부 졸업 • 페이스북 그룹 C++ Korea 대표 • 에이콘출판사 Translator • 게임샐러드로 코드 한 줄 없이 게임 만들기 (2013) • 유니티 Shader와 Effect 제작 (2014) • 2D 게임 프로그래밍 (2014) • 인디게임 제작팀 Xpecial / Mine Scroll 팀장
  3. 3. 목차 • 학력이 낮으면 게임 회사에 들어갈 수 없을까? • 게임 프로그래머는 수학을 배워야 할까? • 게임 프로그래머는 어떤 일을 할까? • 게임 프로그래머가 되려면 무엇을 공부해야 할까? • 게임은 혼자 만드는 것이 아니다. • 정리
  4. 4. 학력이 낮으면 게임 회사에 들어갈 수 없을까?
  5. 5. 네니오
  6. 6. 그렇기도 하고, 아니기도 합니다. • 1990년대 말에서 2000년대 초반에는, 학력이 그다지 중요하지 않았음 • 그 뒤로, 게임산업이 급속도로 발전하면서 거대 게임기업들이 등장 자연스레 게임회사에 입사하려는 지원자들이 엄청나게 늘어남 • 필터링하는 과정에서 ‘학력’이라는 요소가 나타날 수밖에 없었음 • 몇 년 전부터 학력을 보지 않는 기업들이 늘어나기 시작함 • 하지만, 학력은 무시할 수 없는 항목!
  7. 7. 그렇기도 하고, 아니기도 합니다.
  8. 8. 그렇기도 하고, 아니기도 합니다.
  9. 9. 그렇기도 하고, 아니기도 합니다.
  10. 10. 그렇기도 하고, 아니기도 합니다.
  11. 11. 먼저, 게임 개발을 할 수 있는 능력을 만들 것 (독학, 아카데미, 게임 전문 대학원 등)
  12. 12. 그러고 나서, 포트폴리오를 만들 것! (실무에서 바로 활용할 수 있는 능력을 보여줄 것)
  13. 13. 게임 프로그래머는 수학을 배워야 할까?
  14. 14. 네!
  15. 15. 걸을 수 있는 지역 걸을 수 없는 지역 = 0 = 1
  16. 16. bool CollisionCheck() { int color = GetColor(playerX, playerY); if (color == 1) { return true; } return false; }
  17. 17. 수학을 쓰는 이유? 많은 문제의 정답을 구하는 방법이 이미 존재하기 때문!
  18. 18. 평면의 뒤쪽에 광원이 있고 우리가 평면의 앞쪽에서 평면을 바라볼 때, 평면은 검정색으로 보인다.
  19. 19. 텍스처 컬러만 렌더링했을 때 라이팅 계산을 포함한 여러 이펙트가 적용된 최종 결과
  20. 20. 게임 프로그래머는 어떤 일을 할까?
  21. 21. 클라이언트 프로그래머 (서버 프로그래머는 생략) • 물리 프로그래머 • 사운드 프로그래머 • 렌더링 프로그래머 • 툴 프로그래머 • AI(인공지능) 프로그래머 • 애니메이션 프로그래머
  22. 22. 물리 프로그래머 • 현실 세계와 같은 물리 현상을 게임 플레이에 접목 • 강체(Rigidbody)를 주로 다루고, 충돌 검출(Collision Detection), 랙돌(Ragdoll) 효과 등 다양한 시뮬레이션을 담당하는 프로그래머 • 필요에 따라 유체역학(Fluid Mechanics)을 적용해 물, 연기, 눈 등을 표현함 • 물리 현상을 구현하기 쉽게 하기 위한 물리 엔진 ODE(Open Dynamic Engine), BulletEngine, Box2D, PhysX를 개발하며, 게임에 따라서 튜닝 작업을 함
  23. 23. 사운드 프로그래머 • 사운드를 출력하기 위한 사운드 엔진을 작성하거나, (개발팀에 따라) 게임에서 특정 이벤트의 조건이 충족됐을 때 사운드를 플레이하는 로직을 작성 • 게임에서 사용되는 배경음이나 사운드 처리를 담당, 3D 포지셔널 사운드와 같은 고급 기술들을 사용해 오디오 프로그래밍을 함 • 기획한 컨셉에 따라 효과음 사용법, 음의 무게, 음량의 대소를 결정하고 적절한 위치에 효과음이 나오도록 하는 작업을 담당함
  24. 24. 렌더링 프로그래머 • 화면에 나오는 모든 업무를 담당 • DirectX와 OpenGL을 이용해 그래픽 디자이너가 만든 모델링 데이터를 화면에 그려주는 작업, 텍스처, 라이팅 계산 처리 등을 담당 • 게임 엔진의 그래픽에 관련된 기능들을 구현하고, 구현된 그래픽 기능들이 게임에서 잘 돌아갈 수 있도록 최적화 작업을 진행 • 정확히 말하면 “그래픽스 엔진 프로그래머”, 그래픽스 렌더러를 개발하고 수정하는 프로그래머 (테크니컬 아티스트(TA)와는 역할이 조금 다름)
  25. 25. 툴 프로그래머 • 텍스처와 모델을 만들기 위해 포토샵, 맥스, 마야 등 콘텐츠 제작툴을 사용하는데, 이러한 툴로 만든 데이터를 게임에서 바로 사용할 수 없음 • 따라서 게임회사마다 게임에 맞게 맵 툴, 애니메이션 툴 등을 이용해서 게임의 콘텐츠를 개발 • 그래픽 디자이너, 프로그래머, 프로듀서와 밀접하게 관련해서 일하며 이들이 게임을 완성하는 데 필요한 도구들을 제작
  26. 26. AI(인공지능) 프로그래머 • 지능적인 캐릭터를 만드는 데 필요한 모든 것들을 담당 • 게임에서 사용하는 AI 모듈로는 길찾기(A*), 룰 베이스 시스템, FSM, 신경망, 유전 알고리즘 등이 있음 • 이 중에서도 FSM(Finite State Machine)은 게임에서 굉장히 많이 사용됨 • 인공지능 뿐만 아니라 애니메이션 시스템에서도 많이 사용함 • 언리얼 엔진의 경우 블루프린트(Blueprint)를 이용해 게임 전체를 코드 없이 구현할 수 있음
  27. 27. 애니메이션 프로그래머 • 애니메이터가 캐릭터의 동작을 만들고 이를 게임에서 사용하기 위해 애니메이션 프로그래머가 로직을 작성 • 예를 들어, 애니메이터가 캐릭터의 걷는 동작과 뛰는 동작을 만들었다고 가정 • 게이머가 조작하는 조이스틱의 방향에 따라 캐릭터가 걷거나 뛰는 동작을 취함 • 이 때, 애니메이션 블렌딩(Blending)을 하면, 걷기와 뛰기의 중간 형태의 결과를 얻을 수 있음
  28. 28. 게임 프로그래머가 되려면 무엇을 공부해야 할까?
  29. 29. 프로그래밍 언어 • 본인이 생각하고 있는 것을 로직으로 작성할 수 있고, 그 결과를 알아볼 수 있기만 하면 프로그래밍 언어는 무엇이든 상관 없음 • 어떤 언어를 선택했다면 3년 이상은 써보는 게 중요! • 게임 개발의 주류 언어인 C++, C#, Java 등을 추천 • 주의할 점은 C++을 어렵게 사용해서는 안됨 • 현업에서 C++을 어렵게 사용하는 사람은 매우 드물고, 보편화된 문법이나 패턴들을 사용함
  30. 30. 컴퓨터 구조 • 프로그래머 = 컴퓨터 소프트웨어를 만드는 사람 • 컴퓨터라는 물건이 어떻게 동작하는지 내부적으로 알아야 함 • 내부적으로 어떻게 컴퓨터가 동작하는지 몰라도 작성하는데 무리가 없지만, 동작 원리를 알고 나면 컴퓨터 소프트웨어를 작성하는 데 많은 도움이 됨 • 특히 콘솔 게임 개발자라면 해당 게임기(PS4, Xbox One 등)의 최고 성능을 끌어내기 위해 하드웨어에 대한 이해가 필수
  31. 31. 수학 • 고등학교 수학 수준으로는 게임 개발에 한계가 있음 • 대수학, 삼각함수, 미적분, 선형 대수학, 확률과 통계 등 • 수학자가 될 정도의 지식은 필요없으며, 수학이라는 도구를 언제 어떻게 써먹는지 정도만 알아도 충분
  32. 32. 자료구조, 알고리즘 • 데이터를 어떻게 표현하는가에 따라 프로그램의 성능이 좌우되는 경우가 많음 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
  33. 33. 라이브러리, API • Win32API란 윈도우 운영체제에서 프로그램을 개발하기 위해 Microsoft에서 제공하는 함수들의 모임 • 게임이 동작할 머신의 종류에 따라 제공되는 API도 다르고 사용할 수 있는 라이브러리도 다름 • PC, Xbox용 게임을 개발하기 위해서는 DirectX 사용 • Mac이나 PS4는 OpenGL 사용 • PC에서 일반 응용 프로그램을 개발하기 위해 Win32, MFC 사용법을 배우고 Mac에서는 Cocoa를 배움
  34. 34. 컴퓨터 그래픽스 • 게임은 모니터에 무언가를 그려야 하므로 DirectX, OpenGL 둘 중에 하나는 알아야 함 • 라이브러리를 사용하는 것뿐만 아니라 원리를 알기 위해서는 컴퓨터 그래픽스를 공부해야 함 • 내부 원리를 알고 라이브러리를 사용하는 것과 모른 채로 사용하는 것은 많은 차이가 있음
  35. 35. 게임은 혼자 만드는 것이 아니다.
  36. 36. 예전에는, 혼자 만들었다. 카라테카(Karateka) 신검의 전설
  37. 37. 지금은…
  38. 38. 아티스트 프로그래머기획자
  39. 39. 아티스트가 프로그래머와 대화할 때 • 구체적인 수치와 예시로 대화할 것 • 프로그래머는 C언어와 수학으로 단련되었기 때문에 확실한 결과를 추구하는 사람들 • “조금 더 예쁘게, 조금 더 크게 해주세요”가 아니라 “20% 정도 크게 해주세요” • 오타에 불같이 화내는 프로그래머를 이해할 것 • 작은 문제에 민감하게 반응하는 프로그래머가 난감하겠지만, 오타 하나에 버그나 났을까 2시간 동안 코딩을 체크하는 프로그래머는 더 난감함
  40. 40. 프로그래머가 아티스트와 대화할 때 • 친절하게 설명할 것 • 아티스트가 요구하는 기능이 구현이 안된다면 왜 안되는지 차근히 설명해 줄 것 • 아티스트는 프로그래머가 아니기 때문에 잘 모름 • 아티스트가 한 픽셀에 집착해도 이해해줄 것 • 프로그래머가 오타에 민감하듯이, 아티스트들도 한 픽셀이 그림을 다르게 만든다고 생각함 • 숫자와 전문용어보다는 보편적인 언어로 대화할 것 • 매일 스크립트와 숫자를 접하는 프로그래머들은 익숙하지만, 대부분의 아티스트들은 HTML 태그도 모름 • 아티스트가 구체적인 수치로 이야기한다면, 프로그래머들은 ‘이 그림 조금 더 밝게 만들어 주세요’라고 말할 것
  41. 41. 아티스트가 기획자와 대화할 때 • 작업하기 전에 기획문서 꼼꼼히 읽을 것 • 게임의 자세한 설정은 기획자가 하나하나 글로 구현함 • 작업에 착수하기 전에 기획서를 읽고 게임에 대해 확실히 숙지하고 있어야 잔업이 줄어듬 • 피드백을 받았을 때, 구체적으로 질문할 것 • 기획자들도 종종 추상적인 요구를 함. ‘빨간색으로 바꿔주세요’하면, ‘왜 빨간색으로 바꾸고 싶으세요’라고 되물어 기획자의 의도를 파악할 것. 가끔 기획자가 원하는 건 검은색일 때가 있음 • 기획자의 생각을 믿을 것 • 기획자의 머리 속에는 작업하는 게임에 대한 전반적인 정보가 다 들어 있음 • 무조건 의지하면 안 되지만, 대체로 기획자를 믿고 작업하면 됨
  42. 42. 기획자가 아티스트와 대화할 때 • 아티스트에게 기획을 설명해 줄 것 • 아티스트는 게임의 전체적인 기획을 모르는 경우가 많음 • 수시로 게임의 비전과 컨셉에 대해 설명 • 아티스트를 적당히 방임할 것 • 너무 틀에 맞추면 잘 나올 그림도 안나옴. 여러가지 업무를 주고, 아티스트가 스스로 업무 순서를 짜서 작업할 수 있도록 배려 • 원하는 이미지의 느낌을 정확하게 설명할 것 • ‘까만 머리에 양복을 입은 남자’라고 한정짓기보다는 ‘눈빛이 은근하고 싸늘한 분위기가 흐르는 남자’처럼 구체적인 분위기를 전달할 것 • 아티스트는 그쪽 분야의 전문가이기 때문에 생각보다 더 좋은 결과가 나올 수 있음
  43. 43. 중요한 건 커뮤니케이션!
  44. 44. 슬랙(SLACK)을 이용한 그룹 채팅
  45. 45. 트렐로(TRELLO)를 이용한 작업 관리
  46. 46. GITHUB를 이용한 프로젝트 버전 관리
  47. 47. “힘의 균형은 유지되어야 한다!”
  48. 48. 정리
  49. 49. 게임 프로그래머가 하고 싶나요?
  50. 50. 왜요? 이 말에 대답할 수 있나요?
  51. 51. 대답할 수 있다면, 기본적인 것부터 시작하세요
  52. 52. THANK YOU! QUESTION? UTILFOREVER@GMAIL.COM UTILFOREVER@KAIST.AC.KR HTTP://WWW.FACEBOOK.COM/UTILFOREVER
  53. 53. 출처 • 디스이즈게임, 문기영, 게임 프로그래머의 길 http://www.thisisgame.com/webzine/series/nboard/212/?series=99 • TOPCIT, NC소프트 서정훈 차장, 게임 개발자의 구조와 역할 http://blog.naver.com/PostView.nhn?blogId=2011topcit&logNo=220174150285&parentCategory No=&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 Benchmark http://www.extremetech.com/computing/84556-directx-11-and-the-heaven-benchmark/8

×