최근에 회사에서 프로그래밍외에 인사업무를 하게되서(신입 서류,기술 면접 담당)
지원자들을 보다가 문득 최근 게임프로그래밍에 뛰어드는 신입이 공부 할 것들을 정리해본다.
양이 좀 많아서 2부정도 생각해보는데 별로 도움안된다고 생각하면 2부는 스킵하겠음.
아 참고로 일반적인 게임프로그래밍 이라고 하면 클라이언트프로그래머를 뜻함.
신입의 상당수가 어디든 게임학원출신이고(유명한것 몇개 쥬신아카데미,서울게임아카데미,sbs게임아카데미,게임스쿨,게임아카데미(작년인가 사라졌다고함)
게임학원의 커리큘럼이 1년정도의 짧은시간안에 학생들에게 엑기스를 주입시킨다고 보면됨.
학원마다 차이는 있지만 보통 쿼터를 나눔. 1~3쿼터 정도
보통 9~12개월짜리 코스임.
그리고 아래에 서술되는 커리큘럼은 지금은 사라진 한국콘텐츠 진흥원의 게임아카데미 방식임.
1쿼터.
1.C,C++(문법습득,활용,간단한 콘솔창으로 게임제작 - 테트리스,타자게임,텍스트기반 알피지등등)
2.윈도우 API(역시 간단한 기초지식습득후 게임제작해봄- 보통 슈팅게임)
3.MFC - 이건 요샌 가르치지 않는데도 있음. 툴자체를 C#으로 제작하는추세라서.
#위의 1~3번과 병행하면서 가르치는것들
1.자료구조(스택,큐,리스트,트리 등등의 원론적인 구현방법 설명
- 원리는 잘 배운다음에 실제로는 각회사에서 쓰는 엔진(자체엔진포함)의 자료구조를 쓰게될것임.- 직접 저런 스탠다드 자료구조 구현하는경우는 신입에게는 없다고 본다.)
-다만 자료구조라는게 꼭 저런 스탠다드형 자료구조말고도 각 게임에 맞게 자료를 구성하는 시스템을 만드는 행위자체도 자료구조의 일종이라고 봄.
2.알고리즘(정렬,검색,Astar등등)
-이건 일종의 로직훈련이라고 보면될듯
3.네트워크
-이건 학원마다 좀차이있음
-다만 소켓프로그래밍의 기초정도는 일반적으로 가르치더라고
-10인접속되는정도의 슈팅게임 제작(정말 간단하게 입장,채팅,슈팅되는정도)
4.게임기획
-실제 게임회사에서는 기획문서를 가지고 프로그래밍을 하기때문에
기획이 어떤식으로 이루어지는지를 간단하게나마 이해하기 위해서..
5.게임기초 수학
-행렬,벡터,삼각함수 등등
-왜하냐면 2쿼터를 위해서 함. (3d공간)
그리고 1쿼터안에 2d프로젝트를 팀과 협업해서 수행함
게임아카데미의 경우는 기획,프로그래밍,아트가 모두 있었기 때문에 파트별 협업으로 프로젝트 완성함.
일반적인 다른 학원들은 프로그래밍끼리 알아서 그래픽자료 긁어와서 한다.
2쿼터
그래픽스API(쉽게 말해 다이렉트x,opengl)
근데 사실 요즘엔 워낙 엔진프로그래밍 시대다보니 스킵하고 바로 유니티같은걸로 넘어가는데도 있긴함
하지만 내생각엔 저런 로우레벨 api가지고 자체엔진(이라고 쓰고 프레임워크)제작 해보는게 나중을 생각하면 훠얼씬 도움됨
결국 자체엔진을 허접하게나마 띄워본사람은 상용엔진에 대한 이해도가 확연하게 차이가남.
보통은 다이렉트9(아직도 9다..)를 가지고 자체 프레임워크를 제작함
쉽게 말해 미니엔진 프로그래밍이라고 보면됨
여기서부터는 1쿼터랑 달리 거의 스스로 만들어가는 과정이라고 보면됨
간단히 나열해보자면
1.C++을 가지고 기본 게임업데이트 루프를 제작함
2.Scene구조(레벨구조)확립
3.3d공간에 대한 이해
-행렬,벡터 - 수학수업은 계속된다..
- 월드->뷰->프로젝션으로 이어지는 3d공간에 물체를 투사하는 과정에 대한 깊이있는 이해.
-결국 로우레벨 api가 하는일은 점(vertex)사이의 선(line)을 그리는게 전부라는 사실을 이해.
4.렌더링파트
-기본적으로 api함수들을 가지고 화면에 3d물체를 그리는 작업
-익숙해지면 렌더링 파이프라인에 대한 깊이있는 이해와 테크닉을 습득
-셰이더 연구
현재 게임들은 셰이더없이는 안돌아간다고 봐도 될정도.
dx9.0을 많이 쓰는 관계로 무려 셰이더 2.0을 가지고..수업함
프레임마다 그리고 지우는걸 반복하는 특성상
렌더링업데이트 순서를 잘 정의해서 프레임워크를 구성한다.
-이펙트는 보통 아예 따로 생각하는게 좋음
이펙트툴을 직접 제작하거나 안된다면 적어도 에셋을 쉽게 넣을수 있는 매니저구조라도 확립할것.
-애니메이션
상당히 토나오는 작업. 6번의 외부에셋포팅을 해결한 뒤에 수행한다.
아트팀에서 제작한 캐릭터들의 다양한 애니메이션을 재생할수 있는 시스템 구축.
5.입력(input)처리
마우스,키보드등의 이벤트를 처리하도록 매니저를 작성
기본적으로 directxinput을 쓰는데 가끔 패드게임 만드는 친구들은 xinput붙여서 패드도 구동하게 함(잘은 없음)
기본 클래스는 제공되지만 결국 사용자가 쓰기편하게 커스터마이징을 해야됨
6.외부에셋포팅(3d모델자료)일반적으로 3d게임을 만드려면 외부 모델링툴을 가지고 캐릭터,배경등을 만들고 그걸 엔진에서 읽어야함.
한국은 99%가 3dsMax를 사용(외국은 maya,blender등도)
결국 포팅을 하려면 3dsMax자체에 대한 이해도가 어느정도 수반되어야함.
max에서 제작한 파일들은 다양한 형태로 포팅이 되는데 업계표준은 보통 fbx를 사용.
다만 학원에 따라서는 학생의 공부차원에서 ase를 사용하기도함.(문자열 파싱에 대한 확실한 베이스를 다지기 위해)
결국 max에서 넘어오는 자료는 vertex의 좌표와 거기에 입혀진 텍스쳐의 좌표임
추가로 노말맵,알파맵등의 멀티 텍스쳐를 쓰는경우 파싱이 좀더 복잡해짐
이것들을 엔진에서 인식할수 있도록 바이너리로 저장하는 루틴이 필요함
7.사운드
보통은 directx사운드를 간단하게 써도 되지만
fmod같은 개인사용자에게 무료배포되는 상용라이브러리를 써도됨
8.충돌시스템
이부분은 물리시스템을 도입하지 않을경우 직접 구현해야함
AABB,OBB,Sphere,점과 면, 점과선,선과 구체 등등 다양한 경우의 충돌검사 루틴지정
추가로 Layer개념까지 도입하고 태그시스템까지 해놓으면 최적화부분에서 굿.
9.물리시스템
이건 선택임
다만 피직스X나 Bullet같은 외부 물리 라이브러리를 한번 붙여보는게 공부가 많이됨
필자는 Bullet을 한달동안 고생해서 낑낑데면서 붙인기억이 있는데 하고나니까
상용엔진의 물리시스템을 이해하는데 엄청나게 도움이 되었음.
(참고로 유니티,언리얼4엔진모두 피직스X를 사용)
10.각종툴제작
위에서 말한 렌더링파트는 특히 아트팀과 협업한다면 툴을 제작해보는게 좋음
아트가 자신이 작업한 fbx,ase파일을 열면 자동으로 파싱되서 월드에 해당 에셋이 뜨게 하고
버튼컨트롤등을 추가해서 셰이더를 변경하고
애니메이션을 키프레임별로 확인하고 하는 작업을 하게 해주면 아주 좋음(신입 면접때 아주 좋은 평가를 받음)
11.오브젝트풀,레퍼런스카운터 제작
알다시피 실시간 heap영역에 대한 메모리 할당은 최소화하는게 좋고
그래서 오브젝트풀,메모리풀등을 사용하는데 학생레벨에서는 오브젝트풀만 알아도 수준급임
그리고 C++의 특성상 메모리를 직접 관리하다보니 할당한 메모리를 깜박하고 해제 하지 않는 경우가 많음.
그래서 sharedpointer를 사용하거나 아니면 간단하게 레퍼런스카운트(참조숫자- 즉 내가 할당한 메모리가 현재 몇군데서 쓰이는지를 기록)를 가지고
메모리 사용이 끝난 객체를 자동해제되는 루틴을 심어두는 방식을 연구해보는게 좋음.
12.위 사항들을 토대로 게임아이디어(기획)을 가지고 게임제작
보통 1달혹은 2달까지의 시간을 주고 게임을 제작
몇가지 빼먹은것도 있지만 대충 다 쓴거 같음
여기까지가 상용엔진 사용전에 공부할것들이고
실제로 회사가면 유니티,언리얼4,크라이,게임브리오,그회사의 자체엔진,등등을 사용해서 게임을 만듬.
아예 엔진부터 제작해서 만드는 경우는 신입에게는 사실상 어렵다고 보면됨(신입에게 엔진제작을 안시키니까)
반응이 괜찮으면 다음편엔 상용엔진에 대해서 공부할것들을 써보겠음.
글쿠나
포트 폴리오 구성은 어떻게 해요?
ㄴ보통 자신이 직접 제작한 간단한 게임제출하고,코드의 일부를 제출함.
학식먹는 1학년도 이거 따라하면 취직 가능?
간단한 게임이면... 어느 정도가 간단한 수준..?
되서->돼서 (되어 = 돼임) [리듬 맞춤법 봇♬]
우물안올챙이//아니였->아니었 (아니었 아니에요 아니어도 아니어서는 예외) [리듬 맞춤법 봇♬]
저렇게 많은데 다 할수 있음? 해당 하는 거에 완성도가 어느정도됨? 아는정도임 아니면 완벽히 숙지하고 사용할 정도로 가르침?
저렇게 해서 얻는 결과물의 수준을 알고싶으면 유투브에 쥬신게임아카데미,서울게임아카데미,sba게임아카데미,kgc 등등을 검색하면 게임프로그래밍 학원들이 공개한 학생들 제작 포트폴리오를 볼수 있음. 그거보고 판단하면 됨.
아 그리고 당연하겠지만 개인별 편차가 있기 때문에 한두개만 봐서는 감이 안올수도 있으니 여러개 보면 대충 느낌이 올거임.
더써주세용
그래서 필자는 학원졸업하고 어디서 일함?
겜개발자될거면 서버공부해서 서버로 해라 뭐하러 힘들게 클라할려고해?
2부 안써주남요 매우 궁금궁금
유익하네요