SlideShare a Scribd company logo
1 of 61
Download to read offline
www.hanbit.co.kr
이것이
프로그래밍이다!
이것이 안드로이드다
진정한 안드로이드 개발자로
이끌어줍니다.
SDK 5.0 롤리팝 호환!
책만 보고,
동영상 강좌로도 만족하지 못했다면 Daum
카페 '슈퍼드로이드'에서 만나요
cafe.daum.net/superdroid
박성근 저 | 1,164쪽 | 45,000원
이것이 C언어다
세상에 없던 새로운
C언어 입문서 탄생!
삼성, LG에서 펼쳐졌던
전설의 명강의를 풀타임 동영상 강좌로!
이보다 더 확실한 방법은 없다, 칠판강의
전체 동영상 강좌 유투브 전격 공개!
http://goo.gl/tJK3Tu
서현우 저 | 708쪽 | 25,000원
이것이 자바다
가장 중요한 프로그래밍 언어를 하나
배워야 한다면, 결론은 자바다!
중급 개발자로 나아가기 위한 람다식,
JavaFX, NIO 수록
자바의 모든 것을 알려주는 인터넷 강의
궁금한 것은 카페에서!
cafe.naver.com/thisisjava
신용권 저 | 1,224쪽 | 30,000원
저자직강동영상 제공!
모던 웹을 위한
JavaScript +
jQuery 입문
www.hanbit.co.kr
지금은
모던 웹 시대!
HTML5 분야 부동의 1위 도서
HTML5 표준안 확정에 맞춘 완전 개정판의 귀환!
HTML5 권고안과 최신 웹 브라우저 환경 대응
윤인성 저 | 624쪽 | 30,000원
모던 웹 디자인을 위한
HTML5 +
CSS3 입문
자바스크립트에서 제이쿼리, 제이쿼리 모바일까지
한 권으로 끝낸다!
시대의 흐름에 맞춰 다시 쓴 자바스크립트 교과서
윤인성 저 | 980쪽 | 32,000원
페이스북, 월마트, 링크드인은 왜
Node.js를 선택했는가?
이 물음에 대한 답은 Node.js가 보여주는 빠른 처리 능력 때문이다.
윤인성 저 | 484쪽 | 25,000원
모던 웹을 위한
Node.js
프로그래밍
필요한 것만 배워
바로 현장에서 쓰는 HTML5
순서대로 읽으며 실습할 수 있는 HTML5 자습서
김상형 저 | 700쪽 | 32,000원
HTML5 +
CSS3 정복
게임을 움직이는 기술과 발상: 코드 한 줄 없이 익히는 게임 개발 리얼 다큐
초판발행 2015년 1월 2일
지은이 도마에 요시키 / 옮긴이 고승희 / 펴낸이 김태헌
펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부
전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124
등록 1999년 6월 24일 제10 – 1779호 / ISBN 978-89-6848-154-3 93000
총괄 배용석 / 책임편집 최현우 / 기획 이복연, 김상민 / 편집 김상수
디자인 표지 강은영, 내지 강은영, 조판 금미향
영업 김형진, 김진불, 조유미 / 마케팅 박상용, 서은옥 / 제작 박성우
이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로
알려주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다.
한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr
GAME WO UGOKASU GIJUTSU TO HASSO
Copyright © 2012 Yoshiki Domae
All rights reserved.
Original Japanese edition published by SB Creative Corp.
Korean translation rights © 2015 by Hanbit Media, Inc.ㅑ
Korean translation rights arranged with SB Creative Corp., Tokyo
through Botong Agency, Seoul, Korea
이 책의 한국어판 저작권은 보통에이전시를 통한 저작권자와의 독점 계약으로 한빛미디어가 소유합니다. 신 저작권법에
의하여 한국 내에서 보호를 받는 저작물이므로 무단전재와 무단복제를 금합니다.
지금 하지 않으면 할 수 없는 일이 있습니다.
책으로 펴내고 싶은 아이디어나 원고를 메일 (writer@hanbit.co.kr ) 로 보내주세요.
한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
게임은 나날이 진보를 거듭하여 영화에 버금가는 그래픽을 뽐내는 등 다양한 기술과 방법으로
게이머를 매료시키고 있습니다. 이러한 기술의 진보는 프로그래머에게 끊임없는 노력을 요구
합니다.
하지만 겉으로 복잡하고 화려한 영상을 갖춘 게임일지라도, 그 근간은 간단한 원리를 이용해
반복시킴으로써 움직이는 것이라는 점을 잊지 마세요. 게임기 역시 진화하며 점점 더 많은 기
능을 담아주길 요구하지만, 아무리 시대가 변하고 기술이 발전해도 기초를 탄탄하게 다지는 것
이 무엇보다 중요하다는 사실은 어느 분야에나 공통된 사실입니다.
특히나 최근의 게임 경향은 아름답고 정밀하기 때문에 제작하기에 상당히 어려울 것이라고 생
각할 수 있지만, 이 책에 담긴 작은 원리들을 이해하고 반복 및 연습으로 다양한 시도를 하다
보면 자신만의 멋진 게임을 만들 수 있을 것입니다.
이 책은 게임 제작에 효율적인 기능을 기초부터 하나하나 쉽게 풀어 설명하도록 했습니다. 총
10장으로 구성되어 있고, 크게 기초 메커니즘 소개와 실제 응용 및 처리 과정으로 이루어져
있습니다.
•1장_ 게임과 게임기에 대한 윤곽을 그려줍니다.
•2장_ 디스크와 메모리를 다루는 방법과 그 속에 녹아 있는 프로그래머의 의도를 다룹니다.
•3장_ CPU와 GPU의 기능을 알아봅니다.
•4장_ 컴퓨터의 특성과 제약을 살피며 정밀한 수치를 표현하는 방법을 배웁니다.
•5장_ 3D 그래픽에 필요한 수학적 지식을 살펴봅니다.
•6장_게임 프로그래밍에서의 애니메이션 처리 방법과 필요한 연구, 효율적인 애니메이션
데이터 형태를 알아봅니다.
•7장_ 폴리곤을 형성하기 위한 정점 구성에 대해 알아봅니다.
•8장_ 폴리곤, 픽셀, 텍스처의 특성과 취급법을 설명합니다.
•9장_ 셰이더의 기본적인 메커니즘과 고속화, 처리 부작용을 줄이는 방법을 알아봅니다.
•10장_ 움직임을 처리하는 물리학을 게임 프로그래밍에 응용해봅니다.
옮긴이의 말
4
게임 개발자가 목표인 사람은 물론 프로그래밍 분야에 생소한 사람일지라도 이 책을 통해 게임
을 움직이는 기본 원리를 이해할 수 있을 것입니다.
마지막으로, 작업 중간중간 소소한 문의에도 항상 친절하게 답해주시는 한빛미디어 김상민 님
과 마무리에 도움을 주신 이복연 님께 감사드립니다. 그리고 번역 문장 선택에 도움을 주신 고
은경 님, 언제나 큰 힘이 되어주시는 어머니 전정옥 님과 타지에서 응원해 주시는 윤주호 님,
그리고 나머지 가족들, 번역하는 동안 잘 버텨준 아들 윤시윤 군 모두 감사드립니다.
옮긴이_ 고승희
5
6
“게임 프로그래밍은 특이한 재능을 타고나야 가능한 일일 거야”
제가 어릴 적 게임 프로그래머에 대한 인상은 이랬습니다. 예전부터 게임을 좋아하고 자주 접하면
서, 완성도 높은 게임을 볼 때마다 머리가 매우 좋은 사람들이 만들었으리라 생각했습니다. 그래
서 ‘나도 게임을 만드는 일을 하고 싶지만, 아마 무리일 거야’라고 생각하며 아무것도 하지 않은 채
로 하루하루를 보냈습니다.
하지만 어떤 계기로 게임업계에 들어올 수 있었습니다. 처음에는 모르는 것이 너무 많아 좌절했지
만, 냉정을 찾으니 게임이란 간단한 것을 중복시켜 움직이는 것이라는 점을 깨닫게 되었습니다.
그로부터 10년 이상 지난 지금, 게임기도 점차 진화되고 있고 요구되는 것들이 많아지고 있습니
다. 그러나 무엇보다도 기초를 쌓는 것이 중요하다는 사실에는 과거에나 현재에나 변함이 없습
니다.
최근의 게임은 화려하고 정밀하기 때문에 만들기가 상당히 어려울 것으로 생각할 수도 있지만, 이
책이 설명하는 작은 아이디어와 기술에 익숙해진다면 도전 못 할 것도 없습니다. 독자 여러분이
이러한 자신감을 얻게 된다면 저 또한 보람될 것입니다.
지은이_ 도마에 요시키
지은이의 말
7
이번에 이렇게 처음으로 책을 출간하게 되었습니다. 물론 저 혼자서 한 일이 아니라 여러분들의
도움이 있었습니다. 성함만이라도 감사의 의미를 담아 소개하고자 합니다.
편집해주신 소프트뱅크 크리에이티브의 시나다 씨, 편집의 마하 씨. 기획의 계기를 만들어주신 미
나또 씨, 함께 상담해주신 다카하시 씨. 게임 그림을 제공해주신 카토우 씨, 나가타니 씨, 후지이
씨, 노리오 씨. 그리고 애니메이션에 관련해 조언해주신 하마스나 씨, 애니메이션 관련 개요도를
작성해주신 호시나 씨. 여러분 진심으로 감사드립니다.
그리고 현재 소속된 프로젝트의 팀원 여러분과 소속부서의 여러분. 알게 모르게 본업에 소홀하게
되었으리라 생각합니다. 폐를 끼친 점이 있다면 사과의 말씀을 드립니다. 앞으로 더욱더 열심히
일하여 보답하겠습니다.
Twitter에서도 상담해 주신 분이 있습니다. 집필 초기였기 때문에 마음에 격려가 되었습니다. 감
사합니다!
게임 프로그래머라는 즐거운 직업에 종사할 수 있도록 계기를 만들어주신 부모님, 그리고 본업과
집필 작업의 병행에도 힘든 내색하지 않고 응원해준 가족에게 깊은 감사의 말씀을 드립니다.
마지막으로 이 책을 읽어주시는 모든 분께도 감사의 인사를 드립니다. 대단히 감사합니다.
감사의 글
CONTENTS
		 옮긴이의 말 ������������������������������������������������������������������������������������������������������������������
4
		 지은이의 말�������������������������������������������������������������������������������������������������������������������
6
		 감사의 글����������������������������������������������������������������������������������������������������������������������
7
CHAPTER 1 기초 다지기
	 1.1	 게임기의 구성��������������������������������������������������������������������������������������������������������������
15
	 1.2	 모티브로 게임 소개�������������������������������������������������������������������������������������������������������
16
	 1.3	 메모리에 필요한 요소를 넣는다���������������������������������������������������������������������������������������
16
	 1.4	 플레이어를 움직인다�����������������������������������������������������������������������������������������������������
18
	 1.5	 적이 플레이어를 향해 공격하게 한다���������������������������������������������������������������������������������
19
	 1.6	 화면에 표시한다�����������������������������������������������������������������������������������������������������������
20
	 1.7	 일정한 간격으로 움직인다����������������������������������������������������������������������������������������������
21
	 1.8	 마무리������������������������������������������������������������������������������������������������������������������������
21
CHAPTER 2 메모리와 디스크
	2.1	 메모리란����������������������������������������������������������������������������������������������������������������������
23
	2.2	 메모리의 단위���������������������������������������������������������������������������������������������������������������
24
	2.3	 1바이트를 세세하게 나눈다���������������������������������������������������������������������������������������������
26
	2.4	 플레이어를 움직인다������������������������������������������������������������������������������������������������������
26
	2.5	 메모리의 최대수������������������������������������������������������������������������������������������������������������
27
	2.6	 어드레스����������������������������������������������������������������������������������������������������������������������
29
	2.7	 게임에서의 메모리 사용법�����������������������������������������������������������������������������������������������
31
	2.8	 상주와 비상주���������������������������������������������������������������������������������������������������������������
32
	2.9	 확보와 해제������������������������������������������������������������������������������������������������������������������
33
	2.10	메모리를 확보할 수 없는 요인������������������������������������������������������������������������������������������
36
8
2.11	단편화를 피하기 위한 방법����������������������������������������������������������������������������������������������
38
	2.12	메모리릭����������������������������������������������������������������������������������������������������������������������
43
	2.13 디스크에서 불러오기�����������������������������������������������������������������������������������������������������
44
	2.14 탐색이란���������������������������������������������������������������������������������������������������������������������
45
	2.15 데이터 정리 및 배치������������������������������������������������������������������������������������������������������
45
	2.16 필요한 데이터를 중복시킨다�������������������������������������������������������������������������������������������
47
	2.17	데이터를 하나의 파일로 정리한다�������������������������������������������������������������������������������������
48
	2.18	데이터 압축�����������������������������������������������������������������������������������������������������������������
49
	2.19 압축 데이터 복원����������������������������������������������������������������������������������������������������������
50
	2.20 장면 전환 작업�������������������������������������������������������������������������������������������������������������
52
	2.21 마무리������������������������������������������������������������������������������������������������������������������������
54
CHAPTER 3 CPU와 GPU
	3.1 	 CPU란�����������������������������������������������������������������������������������������������������������������������
55
	3.2 	 프로그램과 CPU����������������������������������������������������������������������������������������������������������
56
	3.3 	 메모리상의 프로그램�����������������������������������������������������������������������������������������������������
56
	3.4 	 오버레이���������������������������������������������������������������������������������������������������������������������
59
	3.5 	 메인 루프의 시작과 끝���������������������������������������������������������������������������������������������������
61
	3.6 	 수직동기와 프레임��������������������������������������������������������������������������������������������������������
63
	3.7	 30fps 선택������������������������������������������������������������������������������������������������������������������
66
	3.8	 GPU��������������������������������������������������������������������������������������������������������������������������
69
	3.9	 더블 버퍼��������������������������������������������������������������������������������������������������������������������
72
	3.10 GPU에 관한 처리과정���������������������������������������������������������������������������������������������������
75
	3.11 스레드������������������������������������������������������������������������������������������������������������������������
82
	3.12 멀티코어���������������������������������������������������������������������������������������������������������������������
84
	3.13 실제로 무엇을 병렬 처리시킬 것인가��������������������������������������������������������������������������������
85
	3.14 블록구성도������������������������������������������������������������������������������������������������������������������
88
9
3.15	게임기의 간단한 작동 과정���������������������������������������������������������������������������������������������
89
	3.16 캐시���������������������������������������������������������������������������������������������������������������������������
91
	3.17 VRAM과 eDRAM�������������������������������������������������������������������������������������������������������
96
	3.18 코프로세서������������������������������������������������������������������������������������������������������������������
99
	3.19 마무리����������������������������������������������������������������������������������������������������������������������
100
CHAPTER 4 수치표현과 연산
	4.1	 10진수와 2진수���������������������������������������������������������������������������������������������������������
103
	4.2 	 16진수���������������������������������������������������������������������������������������������������������������������
104
	4.3 	 덧셈, 뺄셈, 정수, 음수��������������������������������������������������������������������������������������������������
106
	4.4 	 비트시프트����������������������������������������������������������������������������������������������������������������
108
	4.5 	 소수�������������������������������������������������������������������������������������������������������������������������
112
	4.6 	 마무리����������������������������������������������������������������������������������������������������������������������
118
CHAPTER 5 3D 그래픽 수학
	5.1 	 3차원 공간의 좌표계���������������������������������������������������������������������������������������������������
119
	5.2 	 좌표와 벡터���������������������������������������������������������������������������������������������������������������
121
	5.3 	 매트릭스�������������������������������������������������������������������������������������������������������������������
124
	5.4 	 매트릭스에 의한 변환��������������������������������������������������������������������������������������������������
125
	5.5 	 W요소의 필요성���������������������������������������������������������������������������������������������������������
130
	5.6 	 매트릭스의 곱셈���������������������������������������������������������������������������������������������������������
132
	5.7 	 변환 순서������������������������������������������������������������������������������������������������������������������
134
	5.8 	 역 매트릭스���������������������������������������������������������������������������������������������������������������
135
	5.9 	 쿼터니언�������������������������������������������������������������������������������������������������������������������
138
	5.10	좌표계����������������������������������������������������������������������������������������������������������������������
139
CONTENTS
10
5.11	로컬 좌표계���������������������������������������������������������������������������������������������������������������
139
	5.12 월드 좌표계���������������������������������������������������������������������������������������������������������������
140
	5.13 카메라 좌표계������������������������������������������������������������������������������������������������������������
142
	5.14 카메라에 대해������������������������������������������������������������������������������������������������������������
143
	5.15 영상 좌표계���������������������������������������������������������������������������������������������������������������
147
	5.16 좌표계 변환을 간단히 하는 연구������������������������������������������������������������������������������������
148
	5.17 마무리����������������������������������������������������������������������������������������������������������������������
149
CHAPTER 6 애니메이션
	6.1 	 애니메이션의 기본원리������������������������������������������������������������������������������������������������
152
	6.2 	 애니메이션의 데이터 크기��������������������������������������������������������������������������������������������
153
	6.3 	 신체 움직임���������������������������������������������������������������������������������������������������������������
156
	6.4 	 관절에 데이터를 저장한다��������������������������������������������������������������������������������������������
157
	6.5 	 애니메이션 데이터의 유용��������������������������������������������������������������������������������������������
159
	6.6 	 관절 수와 표현력��������������������������������������������������������������������������������������������������������
162
	6.7 	 아이템 장착���������������������������������������������������������������������������������������������������������������
163
	6.8 	 부분적인 애니메이션���������������������������������������������������������������������������������������������������
163
	6.9 	 흔들리는 머리카락������������������������������������������������������������������������������������������������������
166
	6.10 관절의 부모자식 구조��������������������������������������������������������������������������������������������������
168
	6.11 관절의 부모자식 구조 계산�������������������������������������������������������������������������������������������
172
	6.12 IK처리����������������������������������������������������������������������������������������������������������������������
175
	6.13 스키닝����������������������������������������������������������������������������������������������������������������������
179
	6.14 보조관절�������������������������������������������������������������������������������������������������������������������
180
	6.15 애니메이션의 데이터 크기 줄이기����������������������������������������������������������������������������������
182
	6.16 골격 데이터로 크기 줄이기�������������������������������������������������������������������������������������������
183
	6.17 회전정보 압축으로 데이터 크기 줄이기���������������������������������������������������������������������������
187
	6.18 키 프레임과 시닝 처리로 크기 줄이기�����������������������������������������������������������������������������
189
11
6.19 애니메이션의 데이터 크기 압축 방법 총정리���������������������������������������������������������������������
192
	 6.20 모션캡처�������������������������������������������������������������������������������������������������������������������
193
	 6.21 마무리����������������������������������������������������������������������������������������������������������������������
193
CHAPTER 7 3D 그래픽 : 정점
	7.1 	 그림을 표시하는 처리 복습�������������������������������������������������������������������������������������������
195
	 7.2 	 해상도와 픽셀������������������������������������������������������������������������������������������������������������
197
	 7.3 	 RGBA���������������������������������������������������������������������������������������������������������������������
198
	 7.4 	 3D게임의 기본은 폴리곤����������������������������������������������������������������������������������������������
200
	 7.5 	 정점컬러�������������������������������������������������������������������������������������������������������������������
201
	 7.6 	 텍스처와 텍스처 좌표��������������������������������������������������������������������������������������������������
202
	 7.7 	 법선과 조명���������������������������������������������������������������������������������������������������������������
205
	 7.8 	 각 정점의 법선 정보����������������������������������������������������������������������������������������������������
209
	 7.9 	 평행광원과 점광원������������������������������������������������������������������������������������������������������
211
	 7.10 정점 정보 크기 줄이기�������������������������������������������������������������������������������������������������
213
	 7.11 움직이는 오브젝트와 움직이지 않는 오브젝트������������������������������������������������������������������
215
	 7.12 정점 정보 재검토��������������������������������������������������������������������������������������������������������
218
	 7.13 트라이앵글 스트립������������������������������������������������������������������������������������������������������
222
	 7.14 마무리����������������������������������������������������������������������������������������������������������������������
225
CHAPTER 8 3D 그래픽 : 폴리곤, 픽셀, 텍스처
	8.1 	 폴리곤을 그려보자������������������������������������������������������������������������������������������������������
227
	 8.2 	 반투명과 불투명���������������������������������������������������������������������������������������������������������
232
	 8.3 	 뎁스 버퍼와 뎁스 테스트����������������������������������������������������������������������������������������������
234
	 8.4 	 뎁스 버퍼의 크기��������������������������������������������������������������������������������������������������������
235
CONTENTS
12
8.5 	 스텐실����������������������������������������������������������������������������������������������������������������������
237
	 8.6 	 빌보드����������������������������������������������������������������������������������������������������������������������
239
	 8.7 	 픽셀의 종류���������������������������������������������������������������������������������������������������������������
241
	 8.8 	 2바이트 픽셀�������������������������������������������������������������������������������������������������������������
241
	 8.9 	 HDR������������������������������������������������������������������������������������������������������������������������
243
	 8.10 팔레트 텍스처������������������������������������������������������������������������������������������������������������
245
	 8.11 압축 텍스처���������������������������������������������������������������������������������������������������������������
248
	 8.12 DXT 압축�����������������������������������������������������������������������������������������������������������������
250
	8.13 픽셀 형식 총정리��������������������������������������������������������������������������������������������������������
254
	 8.14 마무리����������������������������������������������������������������������������������������������������������������������
255
CHAPTER 9 3D 그래픽 : 셰이더, 고속화
	9.1 	 정점 셰이더와 픽셀 셰이더�������������������������������������������������������������������������������������������
257
	 9.2 	 셰이더에 의한 라이팅(조명)�������������������������������������������������������������������������������������������
259
	 9.3 	 셰이더 이용 방법��������������������������������������������������������������������������������������������������������
261
	 9.4 	 셰이더의 단점������������������������������������������������������������������������������������������������������������
265
	 9.5 	 포스트 필터와 렌더 텍스처�������������������������������������������������������������������������������������������
269
	 9.6 	 글레어����������������������������������������������������������������������������������������������������������������������
270
	 9.7 	 피사계 심도���������������������������������������������������������������������������������������������������������������
274
	 9.8 	 화려한 연출을 위한 고속화�������������������������������������������������������������������������������������������
277
	 9.9 	 프레임 버퍼의 크기�����������������������������������������������������������������������������������������������������
278
	 9.10 렌더 텍스처를 사용해 처리 부담 줄이기 �������������������������������������������������������������������������
278
	 9.11 폴리건의 겉면과 뒷면��������������������������������������������������������������������������������������������������
280
	 9.12 LOD�������������������������������������������������������������������������������������������������������������������������
283
	 9.13 밉맵�������������������������������������������������������������������������������������������������������������������������
285
	 9.14 불투명 오브젝트의 렌더링 순서�������������������������������������������������������������������������������������
287
	 9.15 마무리����������������������������������������������������������������������������������������������������������������������
289
13
14
CHAPTER 10 게임 프로그래밍 물리학
	 10.1 좌표 단위와 좌표 다루기��������������������������������������������������������������������������������������������
291
	 10.2 현실 세계에서의 속도������������������������������������������������������������������������������������������������
292
	 10.3 게임 세계에서의 속도 재현�����������������������������������������������������������������������������������������
294
	 10.4 3D공간상의 속도�����������������������������������������������������������������������������������������������������
296
	 10.5 가속과 감속�������������������������������������������������������������������������������������������������������������
298
	 10.6 가속도��������������������������������������������������������������������������������������������������������������������
298
	 10.7 중력����������������������������������������������������������������������������������������������������������������������
301
	 10.8 중력 제어����������������������������������������������������������������������������������������������������������������
302
	 10.9 감속�����������������������������������������������������������������������������������������������������������������������
304
	 10.10 마찰력��������������������������������������������������������������������������������������������������������������������
306
	 10.11 충돌 판정����������������������������������������������������������������������������������������������������������������
310
	 10.12 반사�����������������������������������������������������������������������������������������������������������������������
313
	10.13 충돌 데이터�������������������������������������������������������������������������������������������������������������
317
	 10.14 원과 정점의 위치관계������������������������������������������������������������������������������������������������
318
	 10.15 원과 원의 위치관계���������������������������������������������������������������������������������������������������
320
	 10.16 원기둥과 정점의 위치관계������������������������������������������������������������������������������������������
322
	 10.17 충돌 데이터 총정리���������������������������������������������������������������������������������������������������
324
	 10.18 바운딩 박스와 바운딩 스피어��������������������������������������������������������������������������������������
326
	 10.19 영역 분할����������������������������������������������������������������������������������������������������������������
329
	 10.20 마무리��������������������������������������������������������������������������������������������������������������������
331
	 찾아보기����������������������������������������������������������������������������������������������������������������������������
332
CONTENTS
151장 - 기초 다지기
1.1 게임기의 구성
게임기는 다양한 전자기기의 복합체로 구성되어 있습니다. 예를 들어 플레이어를 조작하는 제
어기, CD-ROM이나 DVD를 읽는 드라이브, 게임 정보를 저장하는 메모리카드가 있고, 본체
내부에는 메모리나 CPU 등이 있습니다. 하나하나 자세히 다루는 것에는 한계가 있으므로, 이
장에서는 중요한 몇 가지 종류에 대해 추상적인 개념부터 설명하겠습니다.
CPU GPU
디스플레이
디스크
제어기
게임기 본체
메모리
먼저 게임 프로그램이나 게임 정보, 화면에 표시되는 그래픽 데이터가 들어 있는 디스크가 있
고, 이러한 데이터 중 필요한 것만을 저장하는 메모리, 이러한 메모리를 참조해 플레이어를 움
기초 다지기
CHAPTER 1
이 장에서는 게임이 움직이는 방식과 게임기의 구조에 대한 밑그림을 그려보겠습니다.
16 게임을 움직이는 기술과 발상
직이거나 적을 공격하게 하는 CPU(Central Processing Unit), 그래픽 데이터를 파악하고
화면에 필요한 정보를 표시하는 GPU(Graphics Processing Unit), 사용자User의 조작을 전
달하는 제어기, 게임 정보가 그림으로 출력되는 디스플레이가 있습니다.
실제는 더 복잡하지만, 이 정도의 범위 내에서 게임 동작을 살펴보겠습니다.
1.2 모티브로 게임 소개
먼저 게임 중에서 주류를 이루는 ‘3D 액션게임’을 소개해보겠습니다. 3D 액션게임에는 다음과
같은 요소가 포함됩니다.
●	사용자는 제어기를 조작하여 화면에 표시
되는 플레이어를 움직일 수 있다.
●	플레이어는 맵의 지면을 따라 이동할 수
있다.
●	공격 버튼을 눌러 적을 공격할 수 있다.
●	적은 플레이어를 향해 탄을 쏘거나 돌진
할 수 있다.
●	사용자는 제어기를 사용해 게임상의 카메
라를 임의로 회전할 수 있다.
●	플레이어, 맵, 적이 각각 표시된다.
이러한 사항에 대해 각 유닛은 어떻게 실행되고 있는지 살펴봅시다.
1.3 메모리에 필요한 요소를 넣는다
우선 게임에 사용할 프로그램이나 게임 정보, 그래픽 데이터 등을 메모리에 저장합니다. 예를
들어 게임기 전원을 켜고 디스크를 넣어 게임을 실행하면, 가장 먼저 프로그램이 메모리에 저
장됩니다. 그러면 프로그램은 각 상황에 필요한 데이터를 선택해 메모리에 저장합니다.
171장 - 기초 다지기
디스크 메모리
디스크의 모든 정보를 메모리에 넣고 싶겠지만, 메모리 크기에는 제한이 있으므로 디스크 내용
을 전부 넣을 수는 없습니다. 그러므로 ‘선택한다’, ‘버린다’의 작업을 반복합니다.
필요한 것을 옮긴다.
메모리
불필요한 것은
버린다.
디스크
다음 그림의 예는 3D 액션게임에 필요한 정보(프로그램, 플레이어나 적의 그래픽 데이터, 체
력이나 공격력 등의 게임 정보)를 디스크에서 불러와 메모리에 저장한 모습입니다.
프로그램
플레이어 그래픽 데이터
적 그래픽 데이터 ①
적 그래픽 데이터 ②
적 그래픽 데이터 ③
게임 정보
디스크 메모리
18 게임을 움직이는 기술과 발상
1.4 플레이어를 움직인다
플레이어를 움직이는 것은 제어기, CPU, 메모리입니다. 먼저 CPU는 제어기 입력에서 어떤
키를 눌렀는지를 판단합니다. 예를 들어 왼쪽 버튼을 누른 경우 CPU는 ‘왼쪽 버튼을 눌렀다’라
고 판단합니다.
CPU제어기
누른 버튼을
확인한다.
그리고 ‘왼쪽 버튼을 눌렀다’의 경우에 플레이어를 어떻게 동작시킬지도 CPU가 판단합니다.
즉, CPU가 메모리상의 프로그램을 참조해 플레이어의 정보를 갱신합니다.
CPU
프로그램
플레이어 그래픽 데이터
적 그래픽 데이터 ①
적 그래픽 데이터 ②
적 그래픽 데이터 ③
게임 정보
메모리
② 게임 정보 갱신
① 프로그램 참조
구체적으로 설명하면 ‘왼쪽 버튼을 눌렀다’의 경우 CPU는 ‘플레이어 좌표를 왼쪽으로 N단위
만큼 이동한다’를 메모리의 프로그램에서 판단하고, 메모리상의 플레이어 좌표에 N을 추가합
니다.
191장 - 기초 다지기
프로그램
플레이어 그래픽 데이터
적 그래픽 데이터 ①
적 그래픽 데이터 ②
적 그래픽 데이터 ③
게임 정보
① 왼쪽 버튼을
눌렀다고 판단한다.
메모리
② 왼쪽 버튼을 눌렀을 때의
처리를 인식한다.
③ 플레이어의 좌표를 갱신한다.
제어기
CPU
1.5 적이 플레이어를 향해 공격하게 한다
플레이어가 움직이면 주변의 적들도 따라 움직이고 공격을 합니다. 플레이어는 단 한 명이지
만 적들은 여럿이기 때문에, 그 각각의 정보(체력, 공격력, 좌표 등)는 메모리에 기재되어 있
습니다.
프로그램
플레이어 그래픽 데이터
적 그래픽 데이터 ①
적 그래픽 데이터 ②
적 그래픽 데이터 ③
플레이어 정보
적 정보 ①
적 정보 ②
적 정보 ③
게임 정보
메모리
동시에 플레이어의 정보도 메모리에 기재되어 있기 때문에, CPU는 플레이어나 다른 적의 정
보를 참조해 적마다 행동을 제어합니다. 즉, 플레이어를 향해 다가가거나, 공격하거나, 때로는
도망치게 합니다.
20 게임을 움직이는 기술과 발상
프로그램
플레이어 그래픽 데이터
적 그래픽 데이터 ①
적 그래픽 데이터 ②
적 그래픽 데이터 ③
플레이어 정보
적 정보 ①
적 정보 ②
적 정보 ③
게임 정보
메모리
① 프로그램에서 적이 어떻게
움직이는지 확인한다.
② 필요에 따라 플레이어의
정보를 참조해
적의 정보를 갱신한다.
CPU
1.6 화면에 표시한다
게임기 내부에서 게임이 작동된다 하더라도 실제로 눈으로 확인할 수 없다면 제대로 된 게임이
라고 할 수 없을 것입니다. 이처럼 디스플레이에 출력하는 것이 GPU입니다.
GPU
프로그램
플레이어 그래픽 데이터
적 그래픽 데이터 ①
적 그래픽 데이터 ②
적 그래픽 데이터 ③
플레이어 정보
적 정보 ①
적 정보 ②
적 정보 ③
게임 정보
메모리
① 디스플레이에 표시하기 위해
필요한 정보를 획득한다.
② 정보를 토대로 디스플레이에
게임의 그림을 출력한다.
위의 그림과 같이 GPU는 디스플레이에 출력하기 위해 필요한 정보를 메모리에서 참조합니다.
이러한 정보에는 플레이어, 맵, 적 등의 그래픽 데이터나 플레이어의 표시 좌표 등이 있으며,
GPU는 이러한 정보를 참조해 디스플레이에 출력하도록 동작합니다.
211장 - 기초 다지기
1.7 일정한 간격으로 움직인다
제어기로 플레이어를 움직이면 플레이어의 움직임에 따라 적이 움직이며, 메모리 내의 정보가
일정한 구간마다 조금씩 변화합니다. 이러한 변화가 일정한 간격으로 디스플레이에 출력되고
갱신되어 3D 액션게임을 즐길 수 있게 됩니다.
CPU
GPU
메모리
디스플레이
제어기
디스크
게임기 본체
1.8 마무리
지금까지 게임의 흐름을 간단히 살펴봤습니다. 게임기는 ‘디스크’, ‘메모리’, ‘CPU’, ‘GPU’, ‘제
어기’ 등으로 구성되어 있으며, 이들이 서로 정보를 처리 및 교환하면서 하나의 게임으로 완성
됩니다.
그런데 실제 교환되는 ‘정보’는 조금 더 복잡할 때도 있습니다. 예를 들어 적이 플레이어를 향해
이동하는 것만으로도 다음 그림과 같은 정보와 처리가 필요합니다.
22 게임을 움직이는 기술과 발상
적
플레이어
적의 상태가 정상인가 아닌가?
(만일 쓰러져 있다면 동작할 수 없다.)
플레이어의 상태를 파악한다.
플레이어의 방향과 거리를 파악한다.
자신의 위치를 기준으로
특정범위 내에 있는가?
적이 플레이어를 향해 이동하려면 플레이어의 위치에서 이동해야 할 방향을 산출해야 합니다.
여기에서는 sin이나 cos과 같은 ‘삼각함수’ 지식이 필요하며, 또한 거리가 어느 정도 떨어져 있
는지를 알려면 ‘피타고라스의 정리’도 알고 있어야 합니다.
먼저 적의 상태가 어떠한지를 파악해야 하는데, 예를 들어 현재 향하고 있는 방향 같은 것입
니다. 만약 플레이어가 뒤에서 다가오는 것을 알아차리지 못한다면 게임 속에서 체감할 수 있
는 현실성은 더 증가할 것입니다. 이것을 구현하기 위해서는 메모리에서 정보를 선택하고 적용
해야 합니다.
이러한 상세한 지식들은 다른 분야에도 적용됩니다. 다음 장에서 각각의 유닛이나 지식에 대해
더 자세히 살펴보겠습니다.
232장 - 메모리와 디스크
2.1 메모리란
게임을 구입할 때는 대부분 DVD나 CD-ROM 같은 디스크 형태로 구입할 것입니다. 이러한
디스크 내에는 게임을 구성하기 위해 필요한 정보, 예를 들어 플레이어나 적, 맵 등의 게임 정
보와 그래픽 데이터, 동영상, 음악, 프로그램이 내재되어 있습니다.
디스크
프로그램
게임 정보
동영상
그래픽 데이터
음악
디스크는 많은 데이터를 보관할 수 있는 장점이 있지만 데이터양이 많아지면 데이터 읽는 속도
가 느려지는 단점이 있습니다. 이러한 단점을 보완하기 위해 일시적으로 데이터를 저장하는 곳
이 메모리입니다.
게임을 실행하면 ‘NOW LOADING’ 화면이 중간 중간에 나올 것입니다. 로딩 화면이 나오는
동안에는 이전 화면에서 사용한 데이터는 메모리에서 폐기하고, 다음 장면의 데이터를 디스크
에서 불러내 메모리에 저장하는 처리를 합니다. 다음 그림은 게임기 전원을 켜면 타이틀 화면
이 표시되고, 메뉴 화면으로 이동하는 모습입니다.
메모리와 디스크
CHAPTER 2
게임기는 디스크에 담긴 게임 프로그램과 데이터를 메모리로 읽어와 게임을 실행합니다. 이 장에서는 디스크와
메모리를 효율적으로 다루는 방법을 생각해보고자 합니다.
24 게임을 움직이는 기술과 발상
2.2 메모리의 단위
메모리는 데이터를 저장하는 데 사용되며, 크기에 제한이 있습니다. 메모리를 설명하기에 앞서
우선 메모리의 최소 단위에 대해 살펴봅시다.
길이를 ‘◯미터’, 무게를 ‘◯그램’으로 세는 것과 같이 메모리에도 특정 단위가 존재합니다. 메모
리의 단위는 바이트(Byte)로 영단어의 첫 문자를 따서 ‘B’라고 표기합니다.
‘1바이트’에는 일정량의 정보가 들어있습니다. 1바이트로 표현할 수 있는 수치는 0 ~ 255로,
256단계를 표현할 수 있습니다.
타이틀 화면
로딩 중 화면
메뉴에 필요한 데이터를 읽어온다.
메뉴 화면
252장 - 메모리와 디스크
0~255
메모리
1바이트
1바이트는 산술적으로 0 ~ 255의 수치로 표현할 수 있습니다. 그렇다면 게임의 관점에서는 수
치의 범위를 어떻게 정해야 할까? 게임에는 정수나 소지금과 같은 정보가 존재하는데, 예를 들
어 소지금의 최대를 255RPG라고 볼 수는 없을 것입니다. 왜냐하면 정보의 종류에 따라서는 1
바이트로 충분히 표현할 수 있는 것도 있지만, 그렇지 않은 경우가 대부분이기 때문입니다.
이러한 경우에는 여러 개의 바이트를 모아 하나의 수치로 취급합니다. 예를 들어 2바이트로 수
치를 표현하는 경우를 생각해봅시다. 2바이트이므로 ‘256 +256’인 512단계로 생각하기 쉽지
만, 실제로는 ‘256×256’인 65,536단계가 됩니다. 수치로 말하자면 0 ~65,535입니다. 이것
으로 표현할 수 있는 최대수가 255에서 6만 이상으로 한 번에 증가했지만 소지금이나 경험치
의 수치로 설정하기에는 조금 부족할 것입니다.
다음으로 4바이트에 대해 살펴보겠습니다. 마찬가지로 ‘256×256×256×256’의 수치 범위
로 한층 확대되고 0~4,294,967,295의 범위를 표현할 수 있습니다. 이 정도의 범위로 확대하
면 게임 내에서의 소지금이나 경험치 등을 표현하기에 충분할 것입니다.
0~255
0~65,535
0~4,294,967,295
게임 처리에서는 위의 그림과 같이 1바이트, 2바이트, 4바이트를 기본단위로 메모리에 저장합
니다.
26 게임을 움직이는 기술과 발상
2.3 1바이트를 세세하게 나눈다
메모리의 최소단위는 ‘바이트’지만, 이것을 더욱 세세하게 나눌 수 있습니다. 그 단위를 비트
(bit)라고 하며, ‘1바이트 = 8비트’로 구성되어 있습니다. 1바이트는 0 ~ 255의 수치를 표현
할 수 있으며, 1비트는 ‘0 또는 1’의 수치로 표현할 수 있습니다. 여기서 ‘0 또는 1’이라는 수치
는 1비트로 YES/NO를 표현할 수 있어 상당히 유용합니다.
=
1바이트 8비트
0
1
또는
0
1
또는
0
1
또는
0
1
또는
0
1
또는
0
1
또는
0
1
또는
0
1
또는
‘바이트’와 같이 ‘비트’도 복수로 구성되어 있어 수치 표현의 폭이 넓습니다. 예를 들어 2비트는
0 ~ 3, 3비트는 0 ~ 7의 범위가 됩니다.
0 0 0 0 0 0 1 1 0 1 0 2 0 1 1 3
1 0 0 4 1 0 1 5 1 1 0 6 1 1 1 7
CPU는 비트보다 바이트를 판단하는 데 더 뛰어나며, 바이트로 처리하는 것이 더 빠릅니다. 그
러나 게임 저장 데이터 등의 정보량을 압축해 크기를 줄이고 싶은 경우에는 비트를 사용하기도
합니다.
2.4 플레이어를 움직인다
2.2절의 최소단위 설명 중에 3바이트에 대한 언급이 없던 것에 의문을 가진 독자도 있을 것입
니다. 여기에는 이유가 있습니다.
메모리를 취급하는 것은 주로 CPU지만, 게임기 광고나 사용방법을 보면 CPU에 ‘16비트’, ‘32
비트’ 등이 기재되어 있는 것을 볼 수 있을 것입니다. 이것은 CPU가 다루는 기본단위의 처리량
272장 - 메모리와 디스크
을 표시한 것으로, 이 처리량이 CPU가 처리할 수 있는 가장 적합한 크기를 말합니다. 그러므
로 ‘16비트’ CPU는 2바이트, ‘32비트’ CPU는 4바이트가 기본단위가 됩니다.
CPU는 ‘2’를 매우 좋아합니다. 최소단위의 비트는 ‘0 또는 1’의 2단계가 있어서 이러한 비트의 조
합으로 메모리가 완성되므로, CPU를 최적의 상태로 만들 수 있습니다. 또한 CPU는 1바이트는
물론 2바이트, 4바이트 등을 다루는 데 매우 뛰어납니다. 비트 수로 생각해보면,
1바이트 = 8비트 = 2 × 2 × 2비트
2바이트 = 16비트 = 2 × 2 × 2 × 2비트
4바이트 = 32비트 = 2 × 2 × 2 × 2 × 2비트
이며, 비트 수 표기를 모두 ‘2’로 표현할 수 있습니다. 그럼 3바이트의 경우는 어떨까요?
3바이트 = 24비트 = 2 × 2 × 2 × 3비트
1, 2, 4바이트와는 달리 비트 수 표기에 ‘3’이 들어가면 CPU를 최적의 상태로 만들 수 없기 때
문에 3바이트는 처리 단위로 사용하지 않습니다.
2.5 메모리의 최대수
게임기에 기록된 메모리 크기는 1바이트만 존재하는 것은 아닙니다. 엄청난 양의 바이트가 저
장된 메모리가 게임기 내에 탑재되어 있을 것입니다.
그러면 ‘단위’ 관점에서 살펴보겠습니다. ‘미터(m)’라는 길이 단위를 ‘킬로미터(Km)’로 나타내
면 같은 ‘1’이라도 1,000배가 됩니다. 이 두 단위의 차이는 ‘킬로(K)’, 다시 말해 ‘K’라는 접두어
가 붙으면 1,000배가 됩니다.
‘바이트’ 또한 같습니다. 바이트(B)에 어떤 접두사가 붙는지에 따라 크기가 달라집니다.
1KB(킬로바이트) = 1,024B(바이트)
1MB(메가바이트) = 1,024KB
1GB(기가바이트) = 1,024MB
1TB(테라바이트) = 1,024GB
28 게임을 움직이는 기술과 발상
근래에는 대용량의 하드디스크도 많이 출시되어 GB나 TB도 잘 알고 있을 것입니다. 단, 여기
에서 주목해야 할 것은 ‘K(킬로) = 1,000배’가 아닌 ‘K(킬로) = 1,024배’의 배율로 되어 있다
는 점입니다. CPU는 ‘2’를 좋아한다고 앞 절에서 설명한 것과 관계가 있습니다. ‘1,000’을 다른
형태로 나타내면 다음과 같습니다.
1,000 = 2 × 2 × 2 × 5 × 5 × 5
‘5’가 들어있기 때문에 CPU가 처리하기 힘든 수치라는 것을 알 수 있습니다. 이에 반해 ‘1,024’는
1,024 = 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2
와 같이 모두 ‘2’로 표현할 수 있으므로 ‘1,000’이 아닌 ‘1,024’를 사용하는 것입니다.
최근 게임기에는 대용량의 메모리가 탑재되어 있으며, 플레이스테이션 3이나 Xbox 360과 같
은 고급 게임기에서는 영화 같은 화면이 출력되고 있습니다. 이러한 게임기에는 수백 MB의
메모리가 탑재되어 있습니다. 예를 들어 메모리 용량이 200MB인 경우에는 4바이트 데이터
몇 개를 저장할 수 있을까요?
200MB = 200×1,024KB = 200×1,024×1,024B = 209,715,200B이므로
209,715,200B /4B = 52,428,800개
이와 같이 52,428,800개의 4바이트 정보를 갖습니다. 매우 큰 숫자라서 실감이 나지 않을 수
도 있겠지만, 매우 많은 양을 저장할 수 있다는 것은 짐작할 수 있습니다.
반대로 패밀리 컴퓨터게임(패미컴)과 같은 예전 게임기는 많은 메모리를 가질 수 없었는데,
그 이유는 무엇보다 비용 문제가 가장 컸습니다. 다만 MB까지는 안 되더라도 수백 KB 정도까
지는 존재합니다. 예를 들어 10KB로 가정해보면 다음과 같습니다.
10KB = 10×1,024B = 10,240B이므로
10,240B/4B = 2,560개
2,560개의 4바이트 정보만 가질 수 있습니다. 이러한 스펙을 생각해보면 그래픽 데이터도 작
아질 것이고, 그렇다 보니 무엇인가 부족함이 느껴지는 게임이 될 것입니다.
292장 - 메모리와 디스크
그러나 작은 메모리로도 열심히 작업하면 재미있는 게임을 만들 수 있으며, 이것이 바로 게임
프로그래머의 소명일 것입니다.
2.6 어드레스
메모리는 게임 정보를 관리하기 위한 영역이지만 ‘영역’에는 몇 개의 범위가 있어서 특정 장소
를 지정해야 합니다. 현실 세계로 생각해봅시다. ‘영역’을 시, 도, 군, 구로 간주하면 시, 도, 군,
구의 다양한 장소에 집이나 가게들이 위치해 있을 것이고, 각각 건물의 정보 또한 모두 다를 것
입니다. 이처럼 메모리에도 다양한 장소가 있고 각각의 정보가 다릅니다.
그럼 각각의 장소를 어떻게 관리하면 좋을까요? 현실 세계에서 ‘주소’가 사용되듯이, 컴퓨터 세
계에서도 마찬가지로 메모리 장소를 가리키는 ‘주소’의 개념을 사용하고 있으며, 이것을 ‘어드
레스address
’라고 합니다.
시작 어드레스
(예를 들어 4,000이라고 가정한다.)
100바이트가 위치한 어드레스는
4,000+100으로 4,100이 된다.
메모리
어드레스는 수치로 표현됩니다. 위의 그림에서 메모리의 서두에는 ‘4,000’이라는 고정된 어드
레스를 가리킵니다. 서두에서 100바이트가 위치한 어드레스는 ‘시작 어드레스 + 100’이므로
‘4,100’으로 표현됩니다.
30 게임을 움직이는 기술과 발상
ROM 카트리지 용량 표기에 대해
저는 10년 이상 게임업계에 종사하고 있고 다양한 게임을 개발했습니다. 그중에는 CD-ROM
이나 DVD와 같은 디스크 이외에 미디어, 즉 ROM 카트리지(패밀리 컴퓨터게임의 카세트 같은
것)로 제공하는 게임도 개발한 경험이 있습니다.
처음엔 휴대용 게임기 전용으로 게임을 개발하기 시작했는데, 이것 또한 카트리지 게임이었습니
다. 당시에는 플레이스테이션이나 세가SEGA가 주류를 이루던 CD-ROM의 전성시대로, 용량이
많이 요구되었기 때문에 카트리지로는 불가능했습니다. 이 부분은 개발 업무를 하기 이전부터
고민해 왔었고 어느 정도 각오를 하고 있었습니다. 하지만 ‘이번 카트리지 용량은 32메가다!’라는
소식을 듣고 조금은 안심하게 되었습니다.
당시 저는 신입이었지만 CD-ROM은 600MB 정도라는 것을 알고 있었기 때문에 ‘32메가’는 생
각보다 큰 용량이고 당시 기술로는 매우 우수하다고 생각했습니다.
대략 과거의 플로피디스크는 1장이 1MB 정도였으므로 CD-ROM의 경우 플로피디스크 600장
정도에 해당됩니다. 그럼 이번 카트리지는 32장쯤 되니 용량은 걱정하지 않아도 될 거라고 생각
했습니다.
당시 신입이었기 때문에 지식이 부족한 점도 있었지만 부단히 공부하며 지식을 쌓아가던 중이었
습니다. 그러던 어느날 날벼락 같은 사실을 알게 되었습니다.
알고 보니 처음에 들었던 ‘32메가’는 ‘32MB’가 아닌 ‘32메가비트’였던 것입니다! ‘1바이트 = 8비
트’이므로 ‘32메가비트’는 실제로 ‘4MB’인 것입니다. 즉, 용량이 플로피디스크 4장밖에 되지 않
는다는 것을 깨닫고 상상 이상으로 적은 용량에 아연실색했습니다.
디스크미디어는 ‘바이트’로 표기되지만, ROM 카트리지는 기본적으로 ‘비트’로 표기됩니다. 당시
에는 기술도 진화하고 있었고 32메가비트도 상당히 큰 용량의 부류에 속했습니다. 예를 들어 패
밀리 컴퓨터게임(패미컴) 여명기의 유명한 RPG 게임은 1메가비트의 용량이었습니다. 바이트로
환산하면 128KB입니다. 128KB를 최근 작업 사이즈와 비교해 말하자면, 홈페이지의 작은 화면
사이즈 같은 정도입니다.
선배의 말에 따르면 예전엔 현재에는 상상할 수 없는 정도(‘그렇게까지 해야 되나?’라고 말한 정
도)의 압축을 했었다고 합니다. 쉬운 예로, 색이 다른 적을 생각해볼 수 있습니다. 색 데이터 자
체는 데이터 크기가 작기 때문에 지금은 압축할 필요가 없지만, 과거에는 이러한 세세한 부분까
지 연구와 노력을 쏟았던 것입니다.
312장 - 메모리와 디스크
2.7 게임에서의 메모리 사용법
지금까지 메모리의 크기나 용량에 대해 알아봤다면, 이제부터는 이러한 메모리를 게임에서 사
용하기 위해 어떻게 해야 할지에 대해 살펴보겠습니다.
메모리의 사용법은 게임 제작자에게 대부분 일임됩니다. 하드웨어에서 미리 확보할 분량과 게
임 프로그램 자체가 차지하는 분량 이외에는 모두 이용할 수 있습니다.
시스템 영역
프로그램
빈 공간
(자유롭게 사용할 수 있다.)
메모리
게임을 구성하는 것에는 게임을 실행할 때 표시되는 시작 화면과 그 외 화면에 추가할 타이틀
화면, 메뉴 화면, 엔딩 스텝 롤 등이 있습니다. 모두 필요하다고 해서 다음과 같이 메모리에 전
부 들어간다면 어떨까요?
시스템 영역
프로그램
일반적인 게임용 데이터
메뉴용 데이터
엔딩용 데이터
타이틀용 데이터
메모리
32 게임을 움직이는 기술과 발상
메모리에 데이터를 이와 같이 배치하는 것이 불가능한 것은 아니지만 각각의 화면에 해당하는
데이터 크기는 작아지게 됩니다. 또한 공들여 만든 화면을 표시하고자 할 때 메모리가 부족해
서 구현할 수 없는 경우도 생길 것입니다. 그러므로 일반적으로 화면 각각을 메모리에 저장합
니다. 그래서 화면이 바뀔 때 기존 데이터를 폐기하고, 그 다음 화면의 데이터를 메모리에 넣습
니다.
타이틀 화면 로딩 중 화면 메뉴 화면
시스템 영역 시스템 영역 시스템 영역 시스템 영역
프로그램 프로그램 프로그램 프로그램
타이틀 화면용
데이터
메뉴 화면용
데이터
메뉴 화면용
데이터
메모리 메모리 메모리 메모리
타이틀 화면용 데이터를 폐기한다. 메뉴 화면용 데이터를 준비한다(로딩).
메모리에 존재하지 않는 데이터는 모두 디스크에서 불러와 메모리로 옮겨야 합니다. 당연히 불
러오는 시간이 소요되어 사용자는 어느 정도 대기해야 되기 때문에, ‘NOW LOADING’ 화면
을 출력해야 합니다.
2.8 상주와 비상주
화면 단위로 바뀔 때는 메모리 내 데이터를 전부 바꾸지 않아도 되지만, 앞에서 설명한 것처럼
바꾸기 위해서는 데이터를 불러오는 데 어느 정도의 시간이 걸립니다. 따라서 자주 사용하는
데이터는 전원을 켤 때 불러내어 메모리에 두고, 이후 게임이 종료될 때까지 그대로 유지하는 것
이 더 효율적입니다. 메모리상에 계속 존재하도록 지속하는 상태를 상주라고 합니다.
332장 - 메모리와 디스크
예를 들어 RPG에는 필드 이동 화면, 전투 화면, 메뉴 화면 등이 있는데, 공통적으로 문자(폰
트)가 출력됩니다. 이러한 폰트 데이터를 화면이 전환될 때마다 바꾸면 불러오는 시간이 길어
지므로, 폰트 데이터는 ‘상주’시킵니다.
메모리
메모리
메모리
시스템 영역
프로그램
폰트 데이터
필드 화면
데이터
시스템 영역
프로그램
폰트 데이터
메뉴 화면
데이터
시스템 영역
프로그램
폰트 데이터
전투 화면
데이터
이렇게 함으로써 데이터를 불러오는 시간을 단축시킬 수 있으며, 데이터 정리 또한 수월해집니
다. 따라서 어느 데이터를 상주시키는가가 매우 중요합니다.
2.9 확보와 해제
지금까지 화면마다 메모리에 데이터를 배치하는 것에 대해 알아봤다면, 이번에는 화면마다 데
이터를 어떻게 배치할 것인가에 대해 살펴보겠습니다.
화면 내의 데이터는 매우 다양합니다. 예를 들어 3D 액션게임이라면 플레이어, 적, 스테이지
그래픽 데이터는 물론, HP 등의 정보를 표시하기 위한 2D 표시 오브젝트, 효과음이나 음악 등
이 있을 것입니다.
이러한 것을 메모리에 배치해야 하는데, 이때 ‘확보’와 ‘해제’ 작업이 필요합니다.
34 게임을 움직이는 기술과 발상
메모리
시스템 영역
프로그램
그래픽 데이터
게임 정보
음악  효과음
2D 표시 오브젝트
화면이 전환되어 디스크에서 데이터를 불러와 메모리에 배치할 때는 ‘메모리를 ◯◯만 사용하
겠다’고 선언해야 합니다. 게임에는 그림을 그리는 처리, 음향 처리, 제어기를 읽는 처리 등 다
양한 처리가 있습니다. 이러한 처리 또한 메모리를 사용해 실행하기 때문에 ‘이 곳의 메모리를
사용하겠다!’라는 선언을 명시할 필요가 있습니다. 이렇게 다른 처리를 그 장소에서 사용할 수
없게 함으로써 처리를 안전하게 실행할 수 있습니다. 이와 같이 데이터 크기를 지정해 사용을
명시하는 것을 확보라고 합니다.
게임 처리 게임 처리제어기 처리 제어기 처리
메모리 메모리
메모리의 특정 장소
사용을 예약한다
(‘확보’ 상태).
예약한 처리 외에는
같은 영역을
사용할 수 없다.
사운드 처리 사운드 처리
메모리를 ‘확보’하면 메모리의 어느 곳에 데이터를 배치하면 좋을지에 대한 정보, 즉 어드레스
352장 - 메모리와 디스크
를 받습니다. 어느 장소의 어드레스를 받을지는 처리에 따라 매번 달라지는데, 메모리 내에 비
어 있는 적절한 장소의 어드레스를 받게 됩니다.
메모리 메모리 메모리
메모리가 비어 있는 상태 지정 크기만큼 확보한다. 확보한 장소에 데이터를
불러와 저장한다.
반대로 메모리 내의 데이터가 불필요한 경우에는 폐기해야 합니다. 폐기하지 않으면 다른 처리
에서 메모리를 필요로 할 때 그 영역을 차지하고 있어 사용할 수 없기 때문입니다. 불필요한 데
이터를 메모리에 두는 것은 낭비입니다. 이와 같이 메모리 내의 데이터를 폐기하는 것을 해제
라고 합니다.
‘확보’했을 때 얻은 어드레스에 ‘해제’할 시점을 미리 지정해두면 확보 영역은 다시 사용할 수 있
는 상태가 됩니다.
게임 처리 제어기 처리 게임 처리 제어기 처리
사운드 처리 사운드 처리
메모리 메모리
내용은 그대로지만
예약되어 있지 않은 상태
확보한 메모리를
폐기했다.
예약되어 있지 않은
상태이므로
확보  사용할 수 있다.
게임 프로그램 내부에서는 이와 같이 메모리의 확보와 해제가 반복되고 있습니다.
36 게임을 움직이는 기술과 발상
2.10 메모리를 확보할 수 없는 요인
앞 절에서는 필요에 따라 메모리를 확보하는 것에 대해 살펴봤습니다. 하지만 만일 메모리를
확보할 수 없다면 어떻게 될까요?
메모리를 확보할 수 없는 경우에는 대부분의 경우 게임이 올바르게 작동되지 않습니다. 부득이
하게 확보할 수 없는 상황을 상정해 프로그램을 만든다고 가정하면, 일부 캐릭터를 표시할 수
없을 정도의 불편한 상황에서 진행하게 될 것입니다. 하지만 추가로 확보할 수 있다고 예상하
면서 프로그램을 계속해서 만들면 아마 조작 불능 상태가 될 것입니다.
원래 게임을 만들 때는 각 화면의 데이터 크기를 고려해 메모리에 적재할 수 있도록 설계해야
합니다. 그러나 어떤 요인으로 인해 메모리를 확보할 수 없게 되는 경우가 있는데, 그 주요 요
인이 바로 ‘연속된 영역을 확보할 수 없다’라는 점입니다.
메모리를 확보해 데이터를 배치할 때는 데이터의 순서가 상당히 중요합니다. 구체적인 예로 타
이틀 화면에서 메뉴 화면으로 이동할 때의 상황을 생각해봅시다. 다음 표와 같이 타이틀 화면
은 ‘문자 데이터’, ‘타이틀 로고의 그래픽 데이터’ 두 개로 구성되고 메뉴 화면은 ‘문자 데이터’,
‘메뉴 화면의 그래픽 데이터’ 두 개로 구성되어 있습니다. 여기서 ‘문자 데이터’는 같은 것을 사
용하고 있습니다.
		 타이틀 화면	 메뉴 화면
문자 데이터	 1MB	 1MB
타이틀 로고의 그래픽 데이터	 8MB	 -
메뉴 화면의 그래픽 데이터	 -	 10MB
합계	 9MB	 11MB
메모리는 전부 16MB로 간주합니다. 타이틀 화면과 메뉴 화면의 합계는 모두 16MB 이하이므
로, 현재 시점에서는 필요조건을 충족할 것입니다. 실제로 타이틀 화면에서 데이터를 불러와
다음 그림과 같이 메모리를 확보했다고 간주해보겠습니다.
메모리의 시작 부분에서 영역을 확보하고 타이틀 로고와 문자 데이터를 배치했습니다. 배치한
데이터의 합계는 9MB이고 빈 공간이 7MB가 됩니다. 그리고 현재 상태에서 메뉴 화면으로 이
동해 문자 데이터는 그대로 두고 타이틀 로고만을 폐기합니다(다음의 왼쪽 그림).
372장 - 메모리와 디스크
메모리
타이틀 로고(8MB)
문자 데이터(1MB)
빈 공간(7MB)
메모리
빈 공간(8MB)
문자 데이터(1MB)
빈 공간(7MB)
해제
빈 공간의 합계
15MB
그러면 위의 오른쪽 그림처럼 메모리의 시작 부분에 8MB의 빈 공간이 생기고, 1MB의 문자
데이터 영역을 사이에 두고 7MB의 빈 공간이 있습니다. 문자 데이터 1MB만 사용되고 있으므
로 총 15MB의 빈 공간이 생깁니다.
메뉴 화면 그래픽 데이터를 메모리에 넣기 위한 영역을 확보하기 위해서는 10MB가 필요하지
만, 지금의 상태에서는 확보할 수 없습니다.
메모리
넣을 수 없다.
넣을 수 없다.
메뉴 화면
그래픽 데이터
(10MB)
빈 공간(8MB)
문자 데이터(1MB)
빈 공간(7MB)
38 게임을 움직이는 기술과 발상
빈 공간의 총합계만 고려한다면 메뉴 화면 그래픽 데이터를 배치할 수 있지만, 배치 방법에 따
라서는 공간 확보가 불가능할 수도 있습니다. 메모리의 이러한 상태를 단편화 혹은 파편화라고
부르며 메모리의 확보, 해제의 관점에서 보면 단편화되어 있는 상태는 상당히 비효율적이라고
볼 수 있습니다.
앞의 경우를 다음 그림과 같이 배치하면 메뉴 화면의 데이터 공간을 확보할 수 있습니다.
메모리 메모리 메모리
메뉴 화면
그래픽 데이터
(10MB)
문자 데이터(1MB) 문자 데이터(1MB) 문자 데이터(1MB)
타이틀 로고(8MB)
빈 공간(7MB) 빈 공간(15MB) 빈 공간(5MB)
이와 같이 메모리 빈 공간의 상태를 적절히 배치하도록 하려면 단순한 합계가 아닌 연속된 영
역의 합계를 알아야 합니다. 빈 공간을 연속된 영역으로 이루어지도록 데이터를 배치하는 것은
프로그래머에게 매우 중요한 일입니다.
2.11 단편화를 피하기 위한 방법
데이터를 불러오는 순서와 배치 위치를 정확히 관리하면 메모리의 단편화를 피할 수 있을 것이
라고 생각할 수 있지만, 실제로는 조금 더 복잡한 과정을 거쳐야 합니다.
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기
『게임을 움직이는 기술과 발상』 - 미리보기

More Related Content

What's hot

『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기복연 이
 
모바일 게임 비즈니스 모델
모바일 게임 비즈니스 모델모바일 게임 비즈니스 모델
모바일 게임 비즈니스 모델NGMaking
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 
[IGC 2016] 띵소프트 이득규 - 삼국지조조전 Online L10N 개발 Case Study
[IGC 2016] 띵소프트 이득규 - 삼국지조조전 Online L10N 개발 Case Study[IGC 2016] 띵소프트 이득규 - 삼국지조조전 Online L10N 개발 Case Study
[IGC 2016] 띵소프트 이득규 - 삼국지조조전 Online L10N 개발 Case Study강 민우
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019devCAT Studio, NEXON
 
Post-mortem Debugging of Windows Applications
Post-mortem Debugging of  Windows ApplicationsPost-mortem Debugging of  Windows Applications
Post-mortem Debugging of Windows ApplicationsGlobalLogic Ukraine
 
PS향유회 세미나 - PS는 개발자 취업에 도움이 될까?
PS향유회 세미나 - PS는 개발자 취업에 도움이 될까? PS향유회 세미나 - PS는 개발자 취업에 도움이 될까?
PS향유회 세미나 - PS는 개발자 취업에 도움이 될까? SesangCho
 
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션Nexon Korea
 
[AIS 2018] [Team Tools_Advanced] Confluence 100배 활용하기 - 커브
[AIS 2018] [Team Tools_Advanced] Confluence 100배 활용하기 - 커브[AIS 2018] [Team Tools_Advanced] Confluence 100배 활용하기 - 커브
[AIS 2018] [Team Tools_Advanced] Confluence 100배 활용하기 - 커브Atlassian 대한민국
 
중국의 역습 - 도탑전기 분석
중국의 역습 - 도탑전기 분석중국의 역습 - 도탑전기 분석
중국의 역습 - 도탑전기 분석Harns (Nak-Hyoung) Kim
 
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법강 민우
 
게임 개발자들을 위한 마케팅 상식 (BDC 발표)
게임 개발자들을 위한 마케팅 상식 (BDC 발표)게임 개발자들을 위한 마케팅 상식 (BDC 발표)
게임 개발자들을 위한 마케팅 상식 (BDC 발표)Harns (Nak-Hyoung) Kim
 
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)수보 김
 
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법Lee Sangkyoon (Kay)
 
AWS 기반 마이크로 프론트엔드 아키텍처 구축하기
AWS 기반 마이크로 프론트엔드 아키텍처 구축하기AWS 기반 마이크로 프론트엔드 아키텍처 구축하기
AWS 기반 마이크로 프론트엔드 아키텍처 구축하기Eunsu Kim
 
담다 기획안Ppt
담다 기획안Ppt담다 기획안Ppt
담다 기획안Ppthyebin Jeon
 
프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서
프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서
프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서Eunsu Kim
 
NDC2013 - 인디게임 프로젝트 중도에 포기하지 않는 방법
NDC2013 - 인디게임 프로젝트 중도에 포기하지 않는 방법NDC2013 - 인디게임 프로젝트 중도에 포기하지 않는 방법
NDC2013 - 인디게임 프로젝트 중도에 포기하지 않는 방법ChangHyun Won
 
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfNDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfJongwon Kim
 

What's hot (20)

『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
 
모바일 게임 비즈니스 모델
모바일 게임 비즈니스 모델모바일 게임 비즈니스 모델
모바일 게임 비즈니스 모델
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
[IGC 2016] 띵소프트 이득규 - 삼국지조조전 Online L10N 개발 Case Study
[IGC 2016] 띵소프트 이득규 - 삼국지조조전 Online L10N 개발 Case Study[IGC 2016] 띵소프트 이득규 - 삼국지조조전 Online L10N 개발 Case Study
[IGC 2016] 띵소프트 이득규 - 삼국지조조전 Online L10N 개발 Case Study
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
Post-mortem Debugging of Windows Applications
Post-mortem Debugging of  Windows ApplicationsPost-mortem Debugging of  Windows Applications
Post-mortem Debugging of Windows Applications
 
PS향유회 세미나 - PS는 개발자 취업에 도움이 될까?
PS향유회 세미나 - PS는 개발자 취업에 도움이 될까? PS향유회 세미나 - PS는 개발자 취업에 도움이 될까?
PS향유회 세미나 - PS는 개발자 취업에 도움이 될까?
 
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
 
[AIS 2018] [Team Tools_Advanced] Confluence 100배 활용하기 - 커브
[AIS 2018] [Team Tools_Advanced] Confluence 100배 활용하기 - 커브[AIS 2018] [Team Tools_Advanced] Confluence 100배 활용하기 - 커브
[AIS 2018] [Team Tools_Advanced] Confluence 100배 활용하기 - 커브
 
중국의 역습 - 도탑전기 분석
중국의 역습 - 도탑전기 분석중국의 역습 - 도탑전기 분석
중국의 역습 - 도탑전기 분석
 
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
 
게임 개발자들을 위한 마케팅 상식 (BDC 발표)
게임 개발자들을 위한 마케팅 상식 (BDC 발표)게임 개발자들을 위한 마케팅 상식 (BDC 발표)
게임 개발자들을 위한 마케팅 상식 (BDC 발표)
 
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
 
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
 
AWS 기반 마이크로 프론트엔드 아키텍처 구축하기
AWS 기반 마이크로 프론트엔드 아키텍처 구축하기AWS 기반 마이크로 프론트엔드 아키텍처 구축하기
AWS 기반 마이크로 프론트엔드 아키텍처 구축하기
 
담다 기획안Ppt
담다 기획안Ppt담다 기획안Ppt
담다 기획안Ppt
 
프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서
프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서
프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서
 
NDC2013 - 인디게임 프로젝트 중도에 포기하지 않는 방법
NDC2013 - 인디게임 프로젝트 중도에 포기하지 않는 방법NDC2013 - 인디게임 프로젝트 중도에 포기하지 않는 방법
NDC2013 - 인디게임 프로젝트 중도에 포기하지 않는 방법
 
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfNDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
 
200531 jandi
200531 jandi200531 jandi
200531 jandi
 

Similar to 『게임을 움직이는 기술과 발상』 - 미리보기

게임 프로그래머로 살아남기 at 지스타 컨퍼런스 2013
게임 프로그래머로 살아남기 at 지스타 컨퍼런스 2013게임 프로그래머로 살아남기 at 지스타 컨퍼런스 2013
게임 프로그래머로 살아남기 at 지스타 컨퍼런스 2013영욱 오
 
[꿈프로젝트-함께이룸] 게임프로그래머를 만나다
[꿈프로젝트-함께이룸] 게임프로그래머를 만나다[꿈프로젝트-함께이룸] 게임프로그래머를 만나다
[꿈프로젝트-함께이룸] 게임프로그래머를 만나다seedschool
 
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템Chaeone Son
 
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇKieun Jang
 
원소스멀티유즈모바일게임 컨셉기획서
원소스멀티유즈모바일게임 컨셉기획서원소스멀티유즈모바일게임 컨셉기획서
원소스멀티유즈모바일게임 컨셉기획서s.s kim
 
졸업작품 회고
졸업작품 회고졸업작품 회고
졸업작품 회고Hyungyu Kang
 
게임업계에서 내가 하고 싶은 일 찾는 방법
게임업계에서 내가 하고 싶은 일 찾는 방법게임업계에서 내가 하고 싶은 일 찾는 방법
게임업계에서 내가 하고 싶은 일 찾는 방법Donghun Lee
 
[매거진 홍보물] 게임 어플리케이션 홍보물 The mobile 12년7월호
[매거진 홍보물] 게임 어플리케이션 홍보물 The mobile 12년7월호[매거진 홍보물] 게임 어플리케이션 홍보물 The mobile 12년7월호
[매거진 홍보물] 게임 어플리케이션 홍보물 The mobile 12년7월호Lee Sung Hoon
 
게임개발자 직업체험의날 배포용
게임개발자 직업체험의날 배포용게임개발자 직업체험의날 배포용
게임개발자 직업체험의날 배포용영욱 오
 
[SSS 2nd] Humanity.Japan 회사 소개
[SSS 2nd] Humanity.Japan 회사 소개[SSS 2nd] Humanity.Japan 회사 소개
[SSS 2nd] Humanity.Japan 회사 소개GAMENEXT Works
 
[GAMENEXT] 아이디어박스 게임즈 창업 후 1년
[GAMENEXT] 아이디어박스 게임즈 창업 후 1년 [GAMENEXT] 아이디어박스 게임즈 창업 후 1년
[GAMENEXT] 아이디어박스 게임즈 창업 후 1년 GAMENEXT Works
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들MinGeun Park
 
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자Yurim Jin
 
[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)해강
 
[NDC 17 마이크로토크] 신에게는 아직 80장의 파우치가 남아 있사옵니다: 게임 디자이너의 굿즈 제작 비망록
[NDC 17 마이크로토크] 신에게는 아직 80장의 파우치가 남아 있사옵니다: 게임 디자이너의 굿즈 제작 비망록[NDC 17 마이크로토크] 신에게는 아직 80장의 파우치가 남아 있사옵니다: 게임 디자이너의 굿즈 제작 비망록
[NDC 17 마이크로토크] 신에게는 아직 80장의 파우치가 남아 있사옵니다: 게임 디자이너의 굿즈 제작 비망록Jungsoo Lee
 
[GAMENEXT] 버프스톤 인큐베이팅의 소개
[GAMENEXT] 버프스톤 인큐베이팅의 소개[GAMENEXT] 버프스톤 인큐베이팅의 소개
[GAMENEXT] 버프스톤 인큐베이팅의 소개GAMENEXT Works
 
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011devCAT Studio, NEXON
 
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템Eunseok Yi
 
게임, 그 자체가 소프트웨어 교육의 장
게임, 그 자체가 소프트웨어 교육의 장게임, 그 자체가 소프트웨어 교육의 장
게임, 그 자체가 소프트웨어 교육의 장Lee Deuk-Kyu
 

Similar to 『게임을 움직이는 기술과 발상』 - 미리보기 (20)

게임강연정리
게임강연정리게임강연정리
게임강연정리
 
게임 프로그래머로 살아남기 at 지스타 컨퍼런스 2013
게임 프로그래머로 살아남기 at 지스타 컨퍼런스 2013게임 프로그래머로 살아남기 at 지스타 컨퍼런스 2013
게임 프로그래머로 살아남기 at 지스타 컨퍼런스 2013
 
[꿈프로젝트-함께이룸] 게임프로그래머를 만나다
[꿈프로젝트-함께이룸] 게임프로그래머를 만나다[꿈프로젝트-함께이룸] 게임프로그래머를 만나다
[꿈프로젝트-함께이룸] 게임프로그래머를 만나다
 
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
 
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
 
원소스멀티유즈모바일게임 컨셉기획서
원소스멀티유즈모바일게임 컨셉기획서원소스멀티유즈모바일게임 컨셉기획서
원소스멀티유즈모바일게임 컨셉기획서
 
졸업작품 회고
졸업작품 회고졸업작품 회고
졸업작품 회고
 
게임업계에서 내가 하고 싶은 일 찾는 방법
게임업계에서 내가 하고 싶은 일 찾는 방법게임업계에서 내가 하고 싶은 일 찾는 방법
게임업계에서 내가 하고 싶은 일 찾는 방법
 
[매거진 홍보물] 게임 어플리케이션 홍보물 The mobile 12년7월호
[매거진 홍보물] 게임 어플리케이션 홍보물 The mobile 12년7월호[매거진 홍보물] 게임 어플리케이션 홍보물 The mobile 12년7월호
[매거진 홍보물] 게임 어플리케이션 홍보물 The mobile 12년7월호
 
게임개발자 직업체험의날 배포용
게임개발자 직업체험의날 배포용게임개발자 직업체험의날 배포용
게임개발자 직업체험의날 배포용
 
[SSS 2nd] Humanity.Japan 회사 소개
[SSS 2nd] Humanity.Japan 회사 소개[SSS 2nd] Humanity.Japan 회사 소개
[SSS 2nd] Humanity.Japan 회사 소개
 
[GAMENEXT] 아이디어박스 게임즈 창업 후 1년
[GAMENEXT] 아이디어박스 게임즈 창업 후 1년 [GAMENEXT] 아이디어박스 게임즈 창업 후 1년
[GAMENEXT] 아이디어박스 게임즈 창업 후 1년
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
 
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자
[SOSCON 2017] 주니어 개발자 5000명, 개발 해서 남 주자
 
[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)
 
[NDC 17 마이크로토크] 신에게는 아직 80장의 파우치가 남아 있사옵니다: 게임 디자이너의 굿즈 제작 비망록
[NDC 17 마이크로토크] 신에게는 아직 80장의 파우치가 남아 있사옵니다: 게임 디자이너의 굿즈 제작 비망록[NDC 17 마이크로토크] 신에게는 아직 80장의 파우치가 남아 있사옵니다: 게임 디자이너의 굿즈 제작 비망록
[NDC 17 마이크로토크] 신에게는 아직 80장의 파우치가 남아 있사옵니다: 게임 디자이너의 굿즈 제작 비망록
 
[GAMENEXT] 버프스톤 인큐베이팅의 소개
[GAMENEXT] 버프스톤 인큐베이팅의 소개[GAMENEXT] 버프스톤 인큐베이팅의 소개
[GAMENEXT] 버프스톤 인큐베이팅의 소개
 
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
 
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
 
게임, 그 자체가 소프트웨어 교육의 장
게임, 그 자체가 소프트웨어 교육의 장게임, 그 자체가 소프트웨어 교육의 장
게임, 그 자체가 소프트웨어 교육의 장
 

More from 복연 이

​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기복연 이
 
​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기복연 이
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기복연 이
 
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기복연 이
 
『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기복연 이
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 
『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기복연 이
 
『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기복연 이
 
『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기복연 이
 
『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기복연 이
 
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기복연 이
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기복연 이
 
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기복연 이
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기복연 이
 
『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기복연 이
 
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기복연 이
 
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기복연 이
 
『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기복연 이
 
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기복연 이
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도복연 이
 

More from 복연 이 (20)

​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
 
​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기
 
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
 
『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기
 
『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기
 
『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기
 
『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기
 
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기
 
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기
 
『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기
 
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
 
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
 
『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기
 
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
 

『게임을 움직이는 기술과 발상』 - 미리보기

  • 1.
  • 2. www.hanbit.co.kr 이것이 프로그래밍이다! 이것이 안드로이드다 진정한 안드로이드 개발자로 이끌어줍니다. SDK 5.0 롤리팝 호환! 책만 보고, 동영상 강좌로도 만족하지 못했다면 Daum 카페 '슈퍼드로이드'에서 만나요 cafe.daum.net/superdroid 박성근 저 | 1,164쪽 | 45,000원 이것이 C언어다 세상에 없던 새로운 C언어 입문서 탄생! 삼성, LG에서 펼쳐졌던 전설의 명강의를 풀타임 동영상 강좌로! 이보다 더 확실한 방법은 없다, 칠판강의 전체 동영상 강좌 유투브 전격 공개! http://goo.gl/tJK3Tu 서현우 저 | 708쪽 | 25,000원 이것이 자바다 가장 중요한 프로그래밍 언어를 하나 배워야 한다면, 결론은 자바다! 중급 개발자로 나아가기 위한 람다식, JavaFX, NIO 수록 자바의 모든 것을 알려주는 인터넷 강의 궁금한 것은 카페에서! cafe.naver.com/thisisjava 신용권 저 | 1,224쪽 | 30,000원 저자직강동영상 제공!
  • 3. 모던 웹을 위한 JavaScript + jQuery 입문 www.hanbit.co.kr 지금은 모던 웹 시대! HTML5 분야 부동의 1위 도서 HTML5 표준안 확정에 맞춘 완전 개정판의 귀환! HTML5 권고안과 최신 웹 브라우저 환경 대응 윤인성 저 | 624쪽 | 30,000원 모던 웹 디자인을 위한 HTML5 + CSS3 입문 자바스크립트에서 제이쿼리, 제이쿼리 모바일까지 한 권으로 끝낸다! 시대의 흐름에 맞춰 다시 쓴 자바스크립트 교과서 윤인성 저 | 980쪽 | 32,000원 페이스북, 월마트, 링크드인은 왜 Node.js를 선택했는가? 이 물음에 대한 답은 Node.js가 보여주는 빠른 처리 능력 때문이다. 윤인성 저 | 484쪽 | 25,000원 모던 웹을 위한 Node.js 프로그래밍 필요한 것만 배워 바로 현장에서 쓰는 HTML5 순서대로 읽으며 실습할 수 있는 HTML5 자습서 김상형 저 | 700쪽 | 32,000원 HTML5 + CSS3 정복
  • 4.
  • 5. 게임을 움직이는 기술과 발상: 코드 한 줄 없이 익히는 게임 개발 리얼 다큐 초판발행 2015년 1월 2일 지은이 도마에 요시키 / 옮긴이 고승희 / 펴낸이 김태헌 펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부 전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124 등록 1999년 6월 24일 제10 – 1779호 / ISBN 978-89-6848-154-3 93000 총괄 배용석 / 책임편집 최현우 / 기획 이복연, 김상민 / 편집 김상수 디자인 표지 강은영, 내지 강은영, 조판 금미향 영업 김형진, 김진불, 조유미 / 마케팅 박상용, 서은옥 / 제작 박성우 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로 알려주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다. 한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr GAME WO UGOKASU GIJUTSU TO HASSO Copyright © 2012 Yoshiki Domae All rights reserved. Original Japanese edition published by SB Creative Corp. Korean translation rights © 2015 by Hanbit Media, Inc.ㅑ Korean translation rights arranged with SB Creative Corp., Tokyo through Botong Agency, Seoul, Korea 이 책의 한국어판 저작권은 보통에이전시를 통한 저작권자와의 독점 계약으로 한빛미디어가 소유합니다. 신 저작권법에 의하여 한국 내에서 보호를 받는 저작물이므로 무단전재와 무단복제를 금합니다. 지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일 (writer@hanbit.co.kr ) 로 보내주세요. 한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
  • 6.
  • 7. 게임은 나날이 진보를 거듭하여 영화에 버금가는 그래픽을 뽐내는 등 다양한 기술과 방법으로 게이머를 매료시키고 있습니다. 이러한 기술의 진보는 프로그래머에게 끊임없는 노력을 요구 합니다. 하지만 겉으로 복잡하고 화려한 영상을 갖춘 게임일지라도, 그 근간은 간단한 원리를 이용해 반복시킴으로써 움직이는 것이라는 점을 잊지 마세요. 게임기 역시 진화하며 점점 더 많은 기 능을 담아주길 요구하지만, 아무리 시대가 변하고 기술이 발전해도 기초를 탄탄하게 다지는 것 이 무엇보다 중요하다는 사실은 어느 분야에나 공통된 사실입니다. 특히나 최근의 게임 경향은 아름답고 정밀하기 때문에 제작하기에 상당히 어려울 것이라고 생 각할 수 있지만, 이 책에 담긴 작은 원리들을 이해하고 반복 및 연습으로 다양한 시도를 하다 보면 자신만의 멋진 게임을 만들 수 있을 것입니다. 이 책은 게임 제작에 효율적인 기능을 기초부터 하나하나 쉽게 풀어 설명하도록 했습니다. 총 10장으로 구성되어 있고, 크게 기초 메커니즘 소개와 실제 응용 및 처리 과정으로 이루어져 있습니다. •1장_ 게임과 게임기에 대한 윤곽을 그려줍니다. •2장_ 디스크와 메모리를 다루는 방법과 그 속에 녹아 있는 프로그래머의 의도를 다룹니다. •3장_ CPU와 GPU의 기능을 알아봅니다. •4장_ 컴퓨터의 특성과 제약을 살피며 정밀한 수치를 표현하는 방법을 배웁니다. •5장_ 3D 그래픽에 필요한 수학적 지식을 살펴봅니다. •6장_게임 프로그래밍에서의 애니메이션 처리 방법과 필요한 연구, 효율적인 애니메이션 데이터 형태를 알아봅니다. •7장_ 폴리곤을 형성하기 위한 정점 구성에 대해 알아봅니다. •8장_ 폴리곤, 픽셀, 텍스처의 특성과 취급법을 설명합니다. •9장_ 셰이더의 기본적인 메커니즘과 고속화, 처리 부작용을 줄이는 방법을 알아봅니다. •10장_ 움직임을 처리하는 물리학을 게임 프로그래밍에 응용해봅니다. 옮긴이의 말 4
  • 8. 게임 개발자가 목표인 사람은 물론 프로그래밍 분야에 생소한 사람일지라도 이 책을 통해 게임 을 움직이는 기본 원리를 이해할 수 있을 것입니다. 마지막으로, 작업 중간중간 소소한 문의에도 항상 친절하게 답해주시는 한빛미디어 김상민 님 과 마무리에 도움을 주신 이복연 님께 감사드립니다. 그리고 번역 문장 선택에 도움을 주신 고 은경 님, 언제나 큰 힘이 되어주시는 어머니 전정옥 님과 타지에서 응원해 주시는 윤주호 님, 그리고 나머지 가족들, 번역하는 동안 잘 버텨준 아들 윤시윤 군 모두 감사드립니다. 옮긴이_ 고승희 5
  • 9. 6 “게임 프로그래밍은 특이한 재능을 타고나야 가능한 일일 거야” 제가 어릴 적 게임 프로그래머에 대한 인상은 이랬습니다. 예전부터 게임을 좋아하고 자주 접하면 서, 완성도 높은 게임을 볼 때마다 머리가 매우 좋은 사람들이 만들었으리라 생각했습니다. 그래 서 ‘나도 게임을 만드는 일을 하고 싶지만, 아마 무리일 거야’라고 생각하며 아무것도 하지 않은 채 로 하루하루를 보냈습니다. 하지만 어떤 계기로 게임업계에 들어올 수 있었습니다. 처음에는 모르는 것이 너무 많아 좌절했지 만, 냉정을 찾으니 게임이란 간단한 것을 중복시켜 움직이는 것이라는 점을 깨닫게 되었습니다. 그로부터 10년 이상 지난 지금, 게임기도 점차 진화되고 있고 요구되는 것들이 많아지고 있습니 다. 그러나 무엇보다도 기초를 쌓는 것이 중요하다는 사실에는 과거에나 현재에나 변함이 없습 니다. 최근의 게임은 화려하고 정밀하기 때문에 만들기가 상당히 어려울 것으로 생각할 수도 있지만, 이 책이 설명하는 작은 아이디어와 기술에 익숙해진다면 도전 못 할 것도 없습니다. 독자 여러분이 이러한 자신감을 얻게 된다면 저 또한 보람될 것입니다. 지은이_ 도마에 요시키 지은이의 말
  • 10. 7 이번에 이렇게 처음으로 책을 출간하게 되었습니다. 물론 저 혼자서 한 일이 아니라 여러분들의 도움이 있었습니다. 성함만이라도 감사의 의미를 담아 소개하고자 합니다. 편집해주신 소프트뱅크 크리에이티브의 시나다 씨, 편집의 마하 씨. 기획의 계기를 만들어주신 미 나또 씨, 함께 상담해주신 다카하시 씨. 게임 그림을 제공해주신 카토우 씨, 나가타니 씨, 후지이 씨, 노리오 씨. 그리고 애니메이션에 관련해 조언해주신 하마스나 씨, 애니메이션 관련 개요도를 작성해주신 호시나 씨. 여러분 진심으로 감사드립니다. 그리고 현재 소속된 프로젝트의 팀원 여러분과 소속부서의 여러분. 알게 모르게 본업에 소홀하게 되었으리라 생각합니다. 폐를 끼친 점이 있다면 사과의 말씀을 드립니다. 앞으로 더욱더 열심히 일하여 보답하겠습니다. Twitter에서도 상담해 주신 분이 있습니다. 집필 초기였기 때문에 마음에 격려가 되었습니다. 감 사합니다! 게임 프로그래머라는 즐거운 직업에 종사할 수 있도록 계기를 만들어주신 부모님, 그리고 본업과 집필 작업의 병행에도 힘든 내색하지 않고 응원해준 가족에게 깊은 감사의 말씀을 드립니다. 마지막으로 이 책을 읽어주시는 모든 분께도 감사의 인사를 드립니다. 대단히 감사합니다. 감사의 글
  • 11. CONTENTS 옮긴이의 말 ������������������������������������������������������������������������������������������������������������������ 4 지은이의 말������������������������������������������������������������������������������������������������������������������� 6 감사의 글���������������������������������������������������������������������������������������������������������������������� 7 CHAPTER 1 기초 다지기 1.1 게임기의 구성�������������������������������������������������������������������������������������������������������������� 15 1.2 모티브로 게임 소개������������������������������������������������������������������������������������������������������� 16 1.3 메모리에 필요한 요소를 넣는다��������������������������������������������������������������������������������������� 16 1.4 플레이어를 움직인다����������������������������������������������������������������������������������������������������� 18 1.5 적이 플레이어를 향해 공격하게 한다��������������������������������������������������������������������������������� 19 1.6 화면에 표시한다����������������������������������������������������������������������������������������������������������� 20 1.7 일정한 간격으로 움직인다���������������������������������������������������������������������������������������������� 21 1.8 마무리������������������������������������������������������������������������������������������������������������������������ 21 CHAPTER 2 메모리와 디스크 2.1 메모리란���������������������������������������������������������������������������������������������������������������������� 23 2.2 메모리의 단위��������������������������������������������������������������������������������������������������������������� 24 2.3 1바이트를 세세하게 나눈다��������������������������������������������������������������������������������������������� 26 2.4 플레이어를 움직인다������������������������������������������������������������������������������������������������������ 26 2.5 메모리의 최대수������������������������������������������������������������������������������������������������������������ 27 2.6 어드레스���������������������������������������������������������������������������������������������������������������������� 29 2.7 게임에서의 메모리 사용법����������������������������������������������������������������������������������������������� 31 2.8 상주와 비상주��������������������������������������������������������������������������������������������������������������� 32 2.9 확보와 해제������������������������������������������������������������������������������������������������������������������ 33 2.10 메모리를 확보할 수 없는 요인������������������������������������������������������������������������������������������ 36 8
  • 12. 2.11 단편화를 피하기 위한 방법���������������������������������������������������������������������������������������������� 38 2.12 메모리릭���������������������������������������������������������������������������������������������������������������������� 43 2.13 디스크에서 불러오기����������������������������������������������������������������������������������������������������� 44 2.14 탐색이란��������������������������������������������������������������������������������������������������������������������� 45 2.15 데이터 정리 및 배치������������������������������������������������������������������������������������������������������ 45 2.16 필요한 데이터를 중복시킨다������������������������������������������������������������������������������������������� 47 2.17 데이터를 하나의 파일로 정리한다������������������������������������������������������������������������������������� 48 2.18 데이터 압축����������������������������������������������������������������������������������������������������������������� 49 2.19 압축 데이터 복원���������������������������������������������������������������������������������������������������������� 50 2.20 장면 전환 작업������������������������������������������������������������������������������������������������������������� 52 2.21 마무리������������������������������������������������������������������������������������������������������������������������ 54 CHAPTER 3 CPU와 GPU 3.1 CPU란����������������������������������������������������������������������������������������������������������������������� 55 3.2 프로그램과 CPU���������������������������������������������������������������������������������������������������������� 56 3.3 메모리상의 프로그램����������������������������������������������������������������������������������������������������� 56 3.4 오버레이��������������������������������������������������������������������������������������������������������������������� 59 3.5 메인 루프의 시작과 끝��������������������������������������������������������������������������������������������������� 61 3.6 수직동기와 프레임�������������������������������������������������������������������������������������������������������� 63 3.7 30fps 선택������������������������������������������������������������������������������������������������������������������ 66 3.8 GPU�������������������������������������������������������������������������������������������������������������������������� 69 3.9 더블 버퍼�������������������������������������������������������������������������������������������������������������������� 72 3.10 GPU에 관한 처리과정��������������������������������������������������������������������������������������������������� 75 3.11 스레드������������������������������������������������������������������������������������������������������������������������ 82 3.12 멀티코어��������������������������������������������������������������������������������������������������������������������� 84 3.13 실제로 무엇을 병렬 처리시킬 것인가�������������������������������������������������������������������������������� 85 3.14 블록구성도������������������������������������������������������������������������������������������������������������������ 88 9
  • 13. 3.15 게임기의 간단한 작동 과정��������������������������������������������������������������������������������������������� 89 3.16 캐시��������������������������������������������������������������������������������������������������������������������������� 91 3.17 VRAM과 eDRAM������������������������������������������������������������������������������������������������������� 96 3.18 코프로세서������������������������������������������������������������������������������������������������������������������ 99 3.19 마무리���������������������������������������������������������������������������������������������������������������������� 100 CHAPTER 4 수치표현과 연산 4.1 10진수와 2진수��������������������������������������������������������������������������������������������������������� 103 4.2 16진수��������������������������������������������������������������������������������������������������������������������� 104 4.3 덧셈, 뺄셈, 정수, 음수�������������������������������������������������������������������������������������������������� 106 4.4 비트시프트���������������������������������������������������������������������������������������������������������������� 108 4.5 소수������������������������������������������������������������������������������������������������������������������������� 112 4.6 마무리���������������������������������������������������������������������������������������������������������������������� 118 CHAPTER 5 3D 그래픽 수학 5.1 3차원 공간의 좌표계��������������������������������������������������������������������������������������������������� 119 5.2 좌표와 벡터��������������������������������������������������������������������������������������������������������������� 121 5.3 매트릭스������������������������������������������������������������������������������������������������������������������� 124 5.4 매트릭스에 의한 변환�������������������������������������������������������������������������������������������������� 125 5.5 W요소의 필요성��������������������������������������������������������������������������������������������������������� 130 5.6 매트릭스의 곱셈��������������������������������������������������������������������������������������������������������� 132 5.7 변환 순서������������������������������������������������������������������������������������������������������������������ 134 5.8 역 매트릭스��������������������������������������������������������������������������������������������������������������� 135 5.9 쿼터니언������������������������������������������������������������������������������������������������������������������� 138 5.10 좌표계���������������������������������������������������������������������������������������������������������������������� 139 CONTENTS 10
  • 14. 5.11 로컬 좌표계��������������������������������������������������������������������������������������������������������������� 139 5.12 월드 좌표계��������������������������������������������������������������������������������������������������������������� 140 5.13 카메라 좌표계������������������������������������������������������������������������������������������������������������ 142 5.14 카메라에 대해������������������������������������������������������������������������������������������������������������ 143 5.15 영상 좌표계��������������������������������������������������������������������������������������������������������������� 147 5.16 좌표계 변환을 간단히 하는 연구������������������������������������������������������������������������������������ 148 5.17 마무리���������������������������������������������������������������������������������������������������������������������� 149 CHAPTER 6 애니메이션 6.1 애니메이션의 기본원리������������������������������������������������������������������������������������������������ 152 6.2 애니메이션의 데이터 크기�������������������������������������������������������������������������������������������� 153 6.3 신체 움직임��������������������������������������������������������������������������������������������������������������� 156 6.4 관절에 데이터를 저장한다�������������������������������������������������������������������������������������������� 157 6.5 애니메이션 데이터의 유용�������������������������������������������������������������������������������������������� 159 6.6 관절 수와 표현력�������������������������������������������������������������������������������������������������������� 162 6.7 아이템 장착��������������������������������������������������������������������������������������������������������������� 163 6.8 부분적인 애니메이션��������������������������������������������������������������������������������������������������� 163 6.9 흔들리는 머리카락������������������������������������������������������������������������������������������������������ 166 6.10 관절의 부모자식 구조�������������������������������������������������������������������������������������������������� 168 6.11 관절의 부모자식 구조 계산������������������������������������������������������������������������������������������� 172 6.12 IK처리���������������������������������������������������������������������������������������������������������������������� 175 6.13 스키닝���������������������������������������������������������������������������������������������������������������������� 179 6.14 보조관절������������������������������������������������������������������������������������������������������������������� 180 6.15 애니메이션의 데이터 크기 줄이기���������������������������������������������������������������������������������� 182 6.16 골격 데이터로 크기 줄이기������������������������������������������������������������������������������������������� 183 6.17 회전정보 압축으로 데이터 크기 줄이기��������������������������������������������������������������������������� 187 6.18 키 프레임과 시닝 처리로 크기 줄이기����������������������������������������������������������������������������� 189 11
  • 15. 6.19 애니메이션의 데이터 크기 압축 방법 총정리��������������������������������������������������������������������� 192 6.20 모션캡처������������������������������������������������������������������������������������������������������������������� 193 6.21 마무리���������������������������������������������������������������������������������������������������������������������� 193 CHAPTER 7 3D 그래픽 : 정점 7.1 그림을 표시하는 처리 복습������������������������������������������������������������������������������������������� 195 7.2 해상도와 픽셀������������������������������������������������������������������������������������������������������������ 197 7.3 RGBA��������������������������������������������������������������������������������������������������������������������� 198 7.4 3D게임의 기본은 폴리곤���������������������������������������������������������������������������������������������� 200 7.5 정점컬러������������������������������������������������������������������������������������������������������������������� 201 7.6 텍스처와 텍스처 좌표�������������������������������������������������������������������������������������������������� 202 7.7 법선과 조명��������������������������������������������������������������������������������������������������������������� 205 7.8 각 정점의 법선 정보���������������������������������������������������������������������������������������������������� 209 7.9 평행광원과 점광원������������������������������������������������������������������������������������������������������ 211 7.10 정점 정보 크기 줄이기������������������������������������������������������������������������������������������������� 213 7.11 움직이는 오브젝트와 움직이지 않는 오브젝트������������������������������������������������������������������ 215 7.12 정점 정보 재검토�������������������������������������������������������������������������������������������������������� 218 7.13 트라이앵글 스트립������������������������������������������������������������������������������������������������������ 222 7.14 마무리���������������������������������������������������������������������������������������������������������������������� 225 CHAPTER 8 3D 그래픽 : 폴리곤, 픽셀, 텍스처 8.1 폴리곤을 그려보자������������������������������������������������������������������������������������������������������ 227 8.2 반투명과 불투명��������������������������������������������������������������������������������������������������������� 232 8.3 뎁스 버퍼와 뎁스 테스트���������������������������������������������������������������������������������������������� 234 8.4 뎁스 버퍼의 크기�������������������������������������������������������������������������������������������������������� 235 CONTENTS 12
  • 16. 8.5 스텐실���������������������������������������������������������������������������������������������������������������������� 237 8.6 빌보드���������������������������������������������������������������������������������������������������������������������� 239 8.7 픽셀의 종류��������������������������������������������������������������������������������������������������������������� 241 8.8 2바이트 픽셀������������������������������������������������������������������������������������������������������������� 241 8.9 HDR������������������������������������������������������������������������������������������������������������������������ 243 8.10 팔레트 텍스처������������������������������������������������������������������������������������������������������������ 245 8.11 압축 텍스처��������������������������������������������������������������������������������������������������������������� 248 8.12 DXT 압축����������������������������������������������������������������������������������������������������������������� 250 8.13 픽셀 형식 총정리�������������������������������������������������������������������������������������������������������� 254 8.14 마무리���������������������������������������������������������������������������������������������������������������������� 255 CHAPTER 9 3D 그래픽 : 셰이더, 고속화 9.1 정점 셰이더와 픽셀 셰이더������������������������������������������������������������������������������������������� 257 9.2 셰이더에 의한 라이팅(조명)������������������������������������������������������������������������������������������� 259 9.3 셰이더 이용 방법�������������������������������������������������������������������������������������������������������� 261 9.4 셰이더의 단점������������������������������������������������������������������������������������������������������������ 265 9.5 포스트 필터와 렌더 텍스처������������������������������������������������������������������������������������������� 269 9.6 글레어���������������������������������������������������������������������������������������������������������������������� 270 9.7 피사계 심도��������������������������������������������������������������������������������������������������������������� 274 9.8 화려한 연출을 위한 고속화������������������������������������������������������������������������������������������� 277 9.9 프레임 버퍼의 크기����������������������������������������������������������������������������������������������������� 278 9.10 렌더 텍스처를 사용해 처리 부담 줄이기 ������������������������������������������������������������������������� 278 9.11 폴리건의 겉면과 뒷면�������������������������������������������������������������������������������������������������� 280 9.12 LOD������������������������������������������������������������������������������������������������������������������������� 283 9.13 밉맵������������������������������������������������������������������������������������������������������������������������� 285 9.14 불투명 오브젝트의 렌더링 순서������������������������������������������������������������������������������������� 287 9.15 마무리���������������������������������������������������������������������������������������������������������������������� 289 13
  • 17. 14 CHAPTER 10 게임 프로그래밍 물리학 10.1 좌표 단위와 좌표 다루기�������������������������������������������������������������������������������������������� 291 10.2 현실 세계에서의 속도������������������������������������������������������������������������������������������������ 292 10.3 게임 세계에서의 속도 재현����������������������������������������������������������������������������������������� 294 10.4 3D공간상의 속도����������������������������������������������������������������������������������������������������� 296 10.5 가속과 감속������������������������������������������������������������������������������������������������������������� 298 10.6 가속도�������������������������������������������������������������������������������������������������������������������� 298 10.7 중력���������������������������������������������������������������������������������������������������������������������� 301 10.8 중력 제어���������������������������������������������������������������������������������������������������������������� 302 10.9 감속����������������������������������������������������������������������������������������������������������������������� 304 10.10 마찰력�������������������������������������������������������������������������������������������������������������������� 306 10.11 충돌 판정���������������������������������������������������������������������������������������������������������������� 310 10.12 반사����������������������������������������������������������������������������������������������������������������������� 313 10.13 충돌 데이터������������������������������������������������������������������������������������������������������������� 317 10.14 원과 정점의 위치관계������������������������������������������������������������������������������������������������ 318 10.15 원과 원의 위치관계��������������������������������������������������������������������������������������������������� 320 10.16 원기둥과 정점의 위치관계������������������������������������������������������������������������������������������ 322 10.17 충돌 데이터 총정리��������������������������������������������������������������������������������������������������� 324 10.18 바운딩 박스와 바운딩 스피어�������������������������������������������������������������������������������������� 326 10.19 영역 분할���������������������������������������������������������������������������������������������������������������� 329 10.20 마무리�������������������������������������������������������������������������������������������������������������������� 331 찾아보기���������������������������������������������������������������������������������������������������������������������������� 332 CONTENTS
  • 18. 151장 - 기초 다지기 1.1 게임기의 구성 게임기는 다양한 전자기기의 복합체로 구성되어 있습니다. 예를 들어 플레이어를 조작하는 제 어기, CD-ROM이나 DVD를 읽는 드라이브, 게임 정보를 저장하는 메모리카드가 있고, 본체 내부에는 메모리나 CPU 등이 있습니다. 하나하나 자세히 다루는 것에는 한계가 있으므로, 이 장에서는 중요한 몇 가지 종류에 대해 추상적인 개념부터 설명하겠습니다. CPU GPU 디스플레이 디스크 제어기 게임기 본체 메모리 먼저 게임 프로그램이나 게임 정보, 화면에 표시되는 그래픽 데이터가 들어 있는 디스크가 있 고, 이러한 데이터 중 필요한 것만을 저장하는 메모리, 이러한 메모리를 참조해 플레이어를 움 기초 다지기 CHAPTER 1 이 장에서는 게임이 움직이는 방식과 게임기의 구조에 대한 밑그림을 그려보겠습니다.
  • 19. 16 게임을 움직이는 기술과 발상 직이거나 적을 공격하게 하는 CPU(Central Processing Unit), 그래픽 데이터를 파악하고 화면에 필요한 정보를 표시하는 GPU(Graphics Processing Unit), 사용자User의 조작을 전 달하는 제어기, 게임 정보가 그림으로 출력되는 디스플레이가 있습니다. 실제는 더 복잡하지만, 이 정도의 범위 내에서 게임 동작을 살펴보겠습니다. 1.2 모티브로 게임 소개 먼저 게임 중에서 주류를 이루는 ‘3D 액션게임’을 소개해보겠습니다. 3D 액션게임에는 다음과 같은 요소가 포함됩니다. ● 사용자는 제어기를 조작하여 화면에 표시 되는 플레이어를 움직일 수 있다. ● 플레이어는 맵의 지면을 따라 이동할 수 있다. ● 공격 버튼을 눌러 적을 공격할 수 있다. ● 적은 플레이어를 향해 탄을 쏘거나 돌진 할 수 있다. ● 사용자는 제어기를 사용해 게임상의 카메 라를 임의로 회전할 수 있다. ● 플레이어, 맵, 적이 각각 표시된다. 이러한 사항에 대해 각 유닛은 어떻게 실행되고 있는지 살펴봅시다. 1.3 메모리에 필요한 요소를 넣는다 우선 게임에 사용할 프로그램이나 게임 정보, 그래픽 데이터 등을 메모리에 저장합니다. 예를 들어 게임기 전원을 켜고 디스크를 넣어 게임을 실행하면, 가장 먼저 프로그램이 메모리에 저 장됩니다. 그러면 프로그램은 각 상황에 필요한 데이터를 선택해 메모리에 저장합니다.
  • 20. 171장 - 기초 다지기 디스크 메모리 디스크의 모든 정보를 메모리에 넣고 싶겠지만, 메모리 크기에는 제한이 있으므로 디스크 내용 을 전부 넣을 수는 없습니다. 그러므로 ‘선택한다’, ‘버린다’의 작업을 반복합니다. 필요한 것을 옮긴다. 메모리 불필요한 것은 버린다. 디스크 다음 그림의 예는 3D 액션게임에 필요한 정보(프로그램, 플레이어나 적의 그래픽 데이터, 체 력이나 공격력 등의 게임 정보)를 디스크에서 불러와 메모리에 저장한 모습입니다. 프로그램 플레이어 그래픽 데이터 적 그래픽 데이터 ① 적 그래픽 데이터 ② 적 그래픽 데이터 ③ 게임 정보 디스크 메모리
  • 21. 18 게임을 움직이는 기술과 발상 1.4 플레이어를 움직인다 플레이어를 움직이는 것은 제어기, CPU, 메모리입니다. 먼저 CPU는 제어기 입력에서 어떤 키를 눌렀는지를 판단합니다. 예를 들어 왼쪽 버튼을 누른 경우 CPU는 ‘왼쪽 버튼을 눌렀다’라 고 판단합니다. CPU제어기 누른 버튼을 확인한다. 그리고 ‘왼쪽 버튼을 눌렀다’의 경우에 플레이어를 어떻게 동작시킬지도 CPU가 판단합니다. 즉, CPU가 메모리상의 프로그램을 참조해 플레이어의 정보를 갱신합니다. CPU 프로그램 플레이어 그래픽 데이터 적 그래픽 데이터 ① 적 그래픽 데이터 ② 적 그래픽 데이터 ③ 게임 정보 메모리 ② 게임 정보 갱신 ① 프로그램 참조 구체적으로 설명하면 ‘왼쪽 버튼을 눌렀다’의 경우 CPU는 ‘플레이어 좌표를 왼쪽으로 N단위 만큼 이동한다’를 메모리의 프로그램에서 판단하고, 메모리상의 플레이어 좌표에 N을 추가합 니다.
  • 22. 191장 - 기초 다지기 프로그램 플레이어 그래픽 데이터 적 그래픽 데이터 ① 적 그래픽 데이터 ② 적 그래픽 데이터 ③ 게임 정보 ① 왼쪽 버튼을 눌렀다고 판단한다. 메모리 ② 왼쪽 버튼을 눌렀을 때의 처리를 인식한다. ③ 플레이어의 좌표를 갱신한다. 제어기 CPU 1.5 적이 플레이어를 향해 공격하게 한다 플레이어가 움직이면 주변의 적들도 따라 움직이고 공격을 합니다. 플레이어는 단 한 명이지 만 적들은 여럿이기 때문에, 그 각각의 정보(체력, 공격력, 좌표 등)는 메모리에 기재되어 있 습니다. 프로그램 플레이어 그래픽 데이터 적 그래픽 데이터 ① 적 그래픽 데이터 ② 적 그래픽 데이터 ③ 플레이어 정보 적 정보 ① 적 정보 ② 적 정보 ③ 게임 정보 메모리 동시에 플레이어의 정보도 메모리에 기재되어 있기 때문에, CPU는 플레이어나 다른 적의 정 보를 참조해 적마다 행동을 제어합니다. 즉, 플레이어를 향해 다가가거나, 공격하거나, 때로는 도망치게 합니다.
  • 23. 20 게임을 움직이는 기술과 발상 프로그램 플레이어 그래픽 데이터 적 그래픽 데이터 ① 적 그래픽 데이터 ② 적 그래픽 데이터 ③ 플레이어 정보 적 정보 ① 적 정보 ② 적 정보 ③ 게임 정보 메모리 ① 프로그램에서 적이 어떻게 움직이는지 확인한다. ② 필요에 따라 플레이어의 정보를 참조해 적의 정보를 갱신한다. CPU 1.6 화면에 표시한다 게임기 내부에서 게임이 작동된다 하더라도 실제로 눈으로 확인할 수 없다면 제대로 된 게임이 라고 할 수 없을 것입니다. 이처럼 디스플레이에 출력하는 것이 GPU입니다. GPU 프로그램 플레이어 그래픽 데이터 적 그래픽 데이터 ① 적 그래픽 데이터 ② 적 그래픽 데이터 ③ 플레이어 정보 적 정보 ① 적 정보 ② 적 정보 ③ 게임 정보 메모리 ① 디스플레이에 표시하기 위해 필요한 정보를 획득한다. ② 정보를 토대로 디스플레이에 게임의 그림을 출력한다. 위의 그림과 같이 GPU는 디스플레이에 출력하기 위해 필요한 정보를 메모리에서 참조합니다. 이러한 정보에는 플레이어, 맵, 적 등의 그래픽 데이터나 플레이어의 표시 좌표 등이 있으며, GPU는 이러한 정보를 참조해 디스플레이에 출력하도록 동작합니다.
  • 24. 211장 - 기초 다지기 1.7 일정한 간격으로 움직인다 제어기로 플레이어를 움직이면 플레이어의 움직임에 따라 적이 움직이며, 메모리 내의 정보가 일정한 구간마다 조금씩 변화합니다. 이러한 변화가 일정한 간격으로 디스플레이에 출력되고 갱신되어 3D 액션게임을 즐길 수 있게 됩니다. CPU GPU 메모리 디스플레이 제어기 디스크 게임기 본체 1.8 마무리 지금까지 게임의 흐름을 간단히 살펴봤습니다. 게임기는 ‘디스크’, ‘메모리’, ‘CPU’, ‘GPU’, ‘제 어기’ 등으로 구성되어 있으며, 이들이 서로 정보를 처리 및 교환하면서 하나의 게임으로 완성 됩니다. 그런데 실제 교환되는 ‘정보’는 조금 더 복잡할 때도 있습니다. 예를 들어 적이 플레이어를 향해 이동하는 것만으로도 다음 그림과 같은 정보와 처리가 필요합니다.
  • 25. 22 게임을 움직이는 기술과 발상 적 플레이어 적의 상태가 정상인가 아닌가? (만일 쓰러져 있다면 동작할 수 없다.) 플레이어의 상태를 파악한다. 플레이어의 방향과 거리를 파악한다. 자신의 위치를 기준으로 특정범위 내에 있는가? 적이 플레이어를 향해 이동하려면 플레이어의 위치에서 이동해야 할 방향을 산출해야 합니다. 여기에서는 sin이나 cos과 같은 ‘삼각함수’ 지식이 필요하며, 또한 거리가 어느 정도 떨어져 있 는지를 알려면 ‘피타고라스의 정리’도 알고 있어야 합니다. 먼저 적의 상태가 어떠한지를 파악해야 하는데, 예를 들어 현재 향하고 있는 방향 같은 것입 니다. 만약 플레이어가 뒤에서 다가오는 것을 알아차리지 못한다면 게임 속에서 체감할 수 있 는 현실성은 더 증가할 것입니다. 이것을 구현하기 위해서는 메모리에서 정보를 선택하고 적용 해야 합니다. 이러한 상세한 지식들은 다른 분야에도 적용됩니다. 다음 장에서 각각의 유닛이나 지식에 대해 더 자세히 살펴보겠습니다.
  • 26. 232장 - 메모리와 디스크 2.1 메모리란 게임을 구입할 때는 대부분 DVD나 CD-ROM 같은 디스크 형태로 구입할 것입니다. 이러한 디스크 내에는 게임을 구성하기 위해 필요한 정보, 예를 들어 플레이어나 적, 맵 등의 게임 정 보와 그래픽 데이터, 동영상, 음악, 프로그램이 내재되어 있습니다. 디스크 프로그램 게임 정보 동영상 그래픽 데이터 음악 디스크는 많은 데이터를 보관할 수 있는 장점이 있지만 데이터양이 많아지면 데이터 읽는 속도 가 느려지는 단점이 있습니다. 이러한 단점을 보완하기 위해 일시적으로 데이터를 저장하는 곳 이 메모리입니다. 게임을 실행하면 ‘NOW LOADING’ 화면이 중간 중간에 나올 것입니다. 로딩 화면이 나오는 동안에는 이전 화면에서 사용한 데이터는 메모리에서 폐기하고, 다음 장면의 데이터를 디스크 에서 불러내 메모리에 저장하는 처리를 합니다. 다음 그림은 게임기 전원을 켜면 타이틀 화면 이 표시되고, 메뉴 화면으로 이동하는 모습입니다. 메모리와 디스크 CHAPTER 2 게임기는 디스크에 담긴 게임 프로그램과 데이터를 메모리로 읽어와 게임을 실행합니다. 이 장에서는 디스크와 메모리를 효율적으로 다루는 방법을 생각해보고자 합니다.
  • 27. 24 게임을 움직이는 기술과 발상 2.2 메모리의 단위 메모리는 데이터를 저장하는 데 사용되며, 크기에 제한이 있습니다. 메모리를 설명하기에 앞서 우선 메모리의 최소 단위에 대해 살펴봅시다. 길이를 ‘◯미터’, 무게를 ‘◯그램’으로 세는 것과 같이 메모리에도 특정 단위가 존재합니다. 메모 리의 단위는 바이트(Byte)로 영단어의 첫 문자를 따서 ‘B’라고 표기합니다. ‘1바이트’에는 일정량의 정보가 들어있습니다. 1바이트로 표현할 수 있는 수치는 0 ~ 255로, 256단계를 표현할 수 있습니다. 타이틀 화면 로딩 중 화면 메뉴에 필요한 데이터를 읽어온다. 메뉴 화면
  • 28. 252장 - 메모리와 디스크 0~255 메모리 1바이트 1바이트는 산술적으로 0 ~ 255의 수치로 표현할 수 있습니다. 그렇다면 게임의 관점에서는 수 치의 범위를 어떻게 정해야 할까? 게임에는 정수나 소지금과 같은 정보가 존재하는데, 예를 들 어 소지금의 최대를 255RPG라고 볼 수는 없을 것입니다. 왜냐하면 정보의 종류에 따라서는 1 바이트로 충분히 표현할 수 있는 것도 있지만, 그렇지 않은 경우가 대부분이기 때문입니다. 이러한 경우에는 여러 개의 바이트를 모아 하나의 수치로 취급합니다. 예를 들어 2바이트로 수 치를 표현하는 경우를 생각해봅시다. 2바이트이므로 ‘256 +256’인 512단계로 생각하기 쉽지 만, 실제로는 ‘256×256’인 65,536단계가 됩니다. 수치로 말하자면 0 ~65,535입니다. 이것 으로 표현할 수 있는 최대수가 255에서 6만 이상으로 한 번에 증가했지만 소지금이나 경험치 의 수치로 설정하기에는 조금 부족할 것입니다. 다음으로 4바이트에 대해 살펴보겠습니다. 마찬가지로 ‘256×256×256×256’의 수치 범위 로 한층 확대되고 0~4,294,967,295의 범위를 표현할 수 있습니다. 이 정도의 범위로 확대하 면 게임 내에서의 소지금이나 경험치 등을 표현하기에 충분할 것입니다. 0~255 0~65,535 0~4,294,967,295 게임 처리에서는 위의 그림과 같이 1바이트, 2바이트, 4바이트를 기본단위로 메모리에 저장합 니다.
  • 29. 26 게임을 움직이는 기술과 발상 2.3 1바이트를 세세하게 나눈다 메모리의 최소단위는 ‘바이트’지만, 이것을 더욱 세세하게 나눌 수 있습니다. 그 단위를 비트 (bit)라고 하며, ‘1바이트 = 8비트’로 구성되어 있습니다. 1바이트는 0 ~ 255의 수치를 표현 할 수 있으며, 1비트는 ‘0 또는 1’의 수치로 표현할 수 있습니다. 여기서 ‘0 또는 1’이라는 수치 는 1비트로 YES/NO를 표현할 수 있어 상당히 유용합니다. = 1바이트 8비트 0 1 또는 0 1 또는 0 1 또는 0 1 또는 0 1 또는 0 1 또는 0 1 또는 0 1 또는 ‘바이트’와 같이 ‘비트’도 복수로 구성되어 있어 수치 표현의 폭이 넓습니다. 예를 들어 2비트는 0 ~ 3, 3비트는 0 ~ 7의 범위가 됩니다. 0 0 0 0 0 0 1 1 0 1 0 2 0 1 1 3 1 0 0 4 1 0 1 5 1 1 0 6 1 1 1 7 CPU는 비트보다 바이트를 판단하는 데 더 뛰어나며, 바이트로 처리하는 것이 더 빠릅니다. 그 러나 게임 저장 데이터 등의 정보량을 압축해 크기를 줄이고 싶은 경우에는 비트를 사용하기도 합니다. 2.4 플레이어를 움직인다 2.2절의 최소단위 설명 중에 3바이트에 대한 언급이 없던 것에 의문을 가진 독자도 있을 것입 니다. 여기에는 이유가 있습니다. 메모리를 취급하는 것은 주로 CPU지만, 게임기 광고나 사용방법을 보면 CPU에 ‘16비트’, ‘32 비트’ 등이 기재되어 있는 것을 볼 수 있을 것입니다. 이것은 CPU가 다루는 기본단위의 처리량
  • 30. 272장 - 메모리와 디스크 을 표시한 것으로, 이 처리량이 CPU가 처리할 수 있는 가장 적합한 크기를 말합니다. 그러므 로 ‘16비트’ CPU는 2바이트, ‘32비트’ CPU는 4바이트가 기본단위가 됩니다. CPU는 ‘2’를 매우 좋아합니다. 최소단위의 비트는 ‘0 또는 1’의 2단계가 있어서 이러한 비트의 조 합으로 메모리가 완성되므로, CPU를 최적의 상태로 만들 수 있습니다. 또한 CPU는 1바이트는 물론 2바이트, 4바이트 등을 다루는 데 매우 뛰어납니다. 비트 수로 생각해보면, 1바이트 = 8비트 = 2 × 2 × 2비트 2바이트 = 16비트 = 2 × 2 × 2 × 2비트 4바이트 = 32비트 = 2 × 2 × 2 × 2 × 2비트 이며, 비트 수 표기를 모두 ‘2’로 표현할 수 있습니다. 그럼 3바이트의 경우는 어떨까요? 3바이트 = 24비트 = 2 × 2 × 2 × 3비트 1, 2, 4바이트와는 달리 비트 수 표기에 ‘3’이 들어가면 CPU를 최적의 상태로 만들 수 없기 때 문에 3바이트는 처리 단위로 사용하지 않습니다. 2.5 메모리의 최대수 게임기에 기록된 메모리 크기는 1바이트만 존재하는 것은 아닙니다. 엄청난 양의 바이트가 저 장된 메모리가 게임기 내에 탑재되어 있을 것입니다. 그러면 ‘단위’ 관점에서 살펴보겠습니다. ‘미터(m)’라는 길이 단위를 ‘킬로미터(Km)’로 나타내 면 같은 ‘1’이라도 1,000배가 됩니다. 이 두 단위의 차이는 ‘킬로(K)’, 다시 말해 ‘K’라는 접두어 가 붙으면 1,000배가 됩니다. ‘바이트’ 또한 같습니다. 바이트(B)에 어떤 접두사가 붙는지에 따라 크기가 달라집니다. 1KB(킬로바이트) = 1,024B(바이트) 1MB(메가바이트) = 1,024KB 1GB(기가바이트) = 1,024MB 1TB(테라바이트) = 1,024GB
  • 31. 28 게임을 움직이는 기술과 발상 근래에는 대용량의 하드디스크도 많이 출시되어 GB나 TB도 잘 알고 있을 것입니다. 단, 여기 에서 주목해야 할 것은 ‘K(킬로) = 1,000배’가 아닌 ‘K(킬로) = 1,024배’의 배율로 되어 있다 는 점입니다. CPU는 ‘2’를 좋아한다고 앞 절에서 설명한 것과 관계가 있습니다. ‘1,000’을 다른 형태로 나타내면 다음과 같습니다. 1,000 = 2 × 2 × 2 × 5 × 5 × 5 ‘5’가 들어있기 때문에 CPU가 처리하기 힘든 수치라는 것을 알 수 있습니다. 이에 반해 ‘1,024’는 1,024 = 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 와 같이 모두 ‘2’로 표현할 수 있으므로 ‘1,000’이 아닌 ‘1,024’를 사용하는 것입니다. 최근 게임기에는 대용량의 메모리가 탑재되어 있으며, 플레이스테이션 3이나 Xbox 360과 같 은 고급 게임기에서는 영화 같은 화면이 출력되고 있습니다. 이러한 게임기에는 수백 MB의 메모리가 탑재되어 있습니다. 예를 들어 메모리 용량이 200MB인 경우에는 4바이트 데이터 몇 개를 저장할 수 있을까요? 200MB = 200×1,024KB = 200×1,024×1,024B = 209,715,200B이므로 209,715,200B /4B = 52,428,800개 이와 같이 52,428,800개의 4바이트 정보를 갖습니다. 매우 큰 숫자라서 실감이 나지 않을 수 도 있겠지만, 매우 많은 양을 저장할 수 있다는 것은 짐작할 수 있습니다. 반대로 패밀리 컴퓨터게임(패미컴)과 같은 예전 게임기는 많은 메모리를 가질 수 없었는데, 그 이유는 무엇보다 비용 문제가 가장 컸습니다. 다만 MB까지는 안 되더라도 수백 KB 정도까 지는 존재합니다. 예를 들어 10KB로 가정해보면 다음과 같습니다. 10KB = 10×1,024B = 10,240B이므로 10,240B/4B = 2,560개 2,560개의 4바이트 정보만 가질 수 있습니다. 이러한 스펙을 생각해보면 그래픽 데이터도 작 아질 것이고, 그렇다 보니 무엇인가 부족함이 느껴지는 게임이 될 것입니다.
  • 32. 292장 - 메모리와 디스크 그러나 작은 메모리로도 열심히 작업하면 재미있는 게임을 만들 수 있으며, 이것이 바로 게임 프로그래머의 소명일 것입니다. 2.6 어드레스 메모리는 게임 정보를 관리하기 위한 영역이지만 ‘영역’에는 몇 개의 범위가 있어서 특정 장소 를 지정해야 합니다. 현실 세계로 생각해봅시다. ‘영역’을 시, 도, 군, 구로 간주하면 시, 도, 군, 구의 다양한 장소에 집이나 가게들이 위치해 있을 것이고, 각각 건물의 정보 또한 모두 다를 것 입니다. 이처럼 메모리에도 다양한 장소가 있고 각각의 정보가 다릅니다. 그럼 각각의 장소를 어떻게 관리하면 좋을까요? 현실 세계에서 ‘주소’가 사용되듯이, 컴퓨터 세 계에서도 마찬가지로 메모리 장소를 가리키는 ‘주소’의 개념을 사용하고 있으며, 이것을 ‘어드 레스address ’라고 합니다. 시작 어드레스 (예를 들어 4,000이라고 가정한다.) 100바이트가 위치한 어드레스는 4,000+100으로 4,100이 된다. 메모리 어드레스는 수치로 표현됩니다. 위의 그림에서 메모리의 서두에는 ‘4,000’이라는 고정된 어드 레스를 가리킵니다. 서두에서 100바이트가 위치한 어드레스는 ‘시작 어드레스 + 100’이므로 ‘4,100’으로 표현됩니다.
  • 33. 30 게임을 움직이는 기술과 발상 ROM 카트리지 용량 표기에 대해 저는 10년 이상 게임업계에 종사하고 있고 다양한 게임을 개발했습니다. 그중에는 CD-ROM 이나 DVD와 같은 디스크 이외에 미디어, 즉 ROM 카트리지(패밀리 컴퓨터게임의 카세트 같은 것)로 제공하는 게임도 개발한 경험이 있습니다. 처음엔 휴대용 게임기 전용으로 게임을 개발하기 시작했는데, 이것 또한 카트리지 게임이었습니 다. 당시에는 플레이스테이션이나 세가SEGA가 주류를 이루던 CD-ROM의 전성시대로, 용량이 많이 요구되었기 때문에 카트리지로는 불가능했습니다. 이 부분은 개발 업무를 하기 이전부터 고민해 왔었고 어느 정도 각오를 하고 있었습니다. 하지만 ‘이번 카트리지 용량은 32메가다!’라는 소식을 듣고 조금은 안심하게 되었습니다. 당시 저는 신입이었지만 CD-ROM은 600MB 정도라는 것을 알고 있었기 때문에 ‘32메가’는 생 각보다 큰 용량이고 당시 기술로는 매우 우수하다고 생각했습니다. 대략 과거의 플로피디스크는 1장이 1MB 정도였으므로 CD-ROM의 경우 플로피디스크 600장 정도에 해당됩니다. 그럼 이번 카트리지는 32장쯤 되니 용량은 걱정하지 않아도 될 거라고 생각 했습니다. 당시 신입이었기 때문에 지식이 부족한 점도 있었지만 부단히 공부하며 지식을 쌓아가던 중이었 습니다. 그러던 어느날 날벼락 같은 사실을 알게 되었습니다. 알고 보니 처음에 들었던 ‘32메가’는 ‘32MB’가 아닌 ‘32메가비트’였던 것입니다! ‘1바이트 = 8비 트’이므로 ‘32메가비트’는 실제로 ‘4MB’인 것입니다. 즉, 용량이 플로피디스크 4장밖에 되지 않 는다는 것을 깨닫고 상상 이상으로 적은 용량에 아연실색했습니다. 디스크미디어는 ‘바이트’로 표기되지만, ROM 카트리지는 기본적으로 ‘비트’로 표기됩니다. 당시 에는 기술도 진화하고 있었고 32메가비트도 상당히 큰 용량의 부류에 속했습니다. 예를 들어 패 밀리 컴퓨터게임(패미컴) 여명기의 유명한 RPG 게임은 1메가비트의 용량이었습니다. 바이트로 환산하면 128KB입니다. 128KB를 최근 작업 사이즈와 비교해 말하자면, 홈페이지의 작은 화면 사이즈 같은 정도입니다. 선배의 말에 따르면 예전엔 현재에는 상상할 수 없는 정도(‘그렇게까지 해야 되나?’라고 말한 정 도)의 압축을 했었다고 합니다. 쉬운 예로, 색이 다른 적을 생각해볼 수 있습니다. 색 데이터 자 체는 데이터 크기가 작기 때문에 지금은 압축할 필요가 없지만, 과거에는 이러한 세세한 부분까 지 연구와 노력을 쏟았던 것입니다.
  • 34. 312장 - 메모리와 디스크 2.7 게임에서의 메모리 사용법 지금까지 메모리의 크기나 용량에 대해 알아봤다면, 이제부터는 이러한 메모리를 게임에서 사 용하기 위해 어떻게 해야 할지에 대해 살펴보겠습니다. 메모리의 사용법은 게임 제작자에게 대부분 일임됩니다. 하드웨어에서 미리 확보할 분량과 게 임 프로그램 자체가 차지하는 분량 이외에는 모두 이용할 수 있습니다. 시스템 영역 프로그램 빈 공간 (자유롭게 사용할 수 있다.) 메모리 게임을 구성하는 것에는 게임을 실행할 때 표시되는 시작 화면과 그 외 화면에 추가할 타이틀 화면, 메뉴 화면, 엔딩 스텝 롤 등이 있습니다. 모두 필요하다고 해서 다음과 같이 메모리에 전 부 들어간다면 어떨까요? 시스템 영역 프로그램 일반적인 게임용 데이터 메뉴용 데이터 엔딩용 데이터 타이틀용 데이터 메모리
  • 35. 32 게임을 움직이는 기술과 발상 메모리에 데이터를 이와 같이 배치하는 것이 불가능한 것은 아니지만 각각의 화면에 해당하는 데이터 크기는 작아지게 됩니다. 또한 공들여 만든 화면을 표시하고자 할 때 메모리가 부족해 서 구현할 수 없는 경우도 생길 것입니다. 그러므로 일반적으로 화면 각각을 메모리에 저장합 니다. 그래서 화면이 바뀔 때 기존 데이터를 폐기하고, 그 다음 화면의 데이터를 메모리에 넣습 니다. 타이틀 화면 로딩 중 화면 메뉴 화면 시스템 영역 시스템 영역 시스템 영역 시스템 영역 프로그램 프로그램 프로그램 프로그램 타이틀 화면용 데이터 메뉴 화면용 데이터 메뉴 화면용 데이터 메모리 메모리 메모리 메모리 타이틀 화면용 데이터를 폐기한다. 메뉴 화면용 데이터를 준비한다(로딩). 메모리에 존재하지 않는 데이터는 모두 디스크에서 불러와 메모리로 옮겨야 합니다. 당연히 불 러오는 시간이 소요되어 사용자는 어느 정도 대기해야 되기 때문에, ‘NOW LOADING’ 화면 을 출력해야 합니다. 2.8 상주와 비상주 화면 단위로 바뀔 때는 메모리 내 데이터를 전부 바꾸지 않아도 되지만, 앞에서 설명한 것처럼 바꾸기 위해서는 데이터를 불러오는 데 어느 정도의 시간이 걸립니다. 따라서 자주 사용하는 데이터는 전원을 켤 때 불러내어 메모리에 두고, 이후 게임이 종료될 때까지 그대로 유지하는 것 이 더 효율적입니다. 메모리상에 계속 존재하도록 지속하는 상태를 상주라고 합니다.
  • 36. 332장 - 메모리와 디스크 예를 들어 RPG에는 필드 이동 화면, 전투 화면, 메뉴 화면 등이 있는데, 공통적으로 문자(폰 트)가 출력됩니다. 이러한 폰트 데이터를 화면이 전환될 때마다 바꾸면 불러오는 시간이 길어 지므로, 폰트 데이터는 ‘상주’시킵니다. 메모리 메모리 메모리 시스템 영역 프로그램 폰트 데이터 필드 화면 데이터 시스템 영역 프로그램 폰트 데이터 메뉴 화면 데이터 시스템 영역 프로그램 폰트 데이터 전투 화면 데이터 이렇게 함으로써 데이터를 불러오는 시간을 단축시킬 수 있으며, 데이터 정리 또한 수월해집니 다. 따라서 어느 데이터를 상주시키는가가 매우 중요합니다. 2.9 확보와 해제 지금까지 화면마다 메모리에 데이터를 배치하는 것에 대해 알아봤다면, 이번에는 화면마다 데 이터를 어떻게 배치할 것인가에 대해 살펴보겠습니다. 화면 내의 데이터는 매우 다양합니다. 예를 들어 3D 액션게임이라면 플레이어, 적, 스테이지 그래픽 데이터는 물론, HP 등의 정보를 표시하기 위한 2D 표시 오브젝트, 효과음이나 음악 등 이 있을 것입니다. 이러한 것을 메모리에 배치해야 하는데, 이때 ‘확보’와 ‘해제’ 작업이 필요합니다.
  • 37. 34 게임을 움직이는 기술과 발상 메모리 시스템 영역 프로그램 그래픽 데이터 게임 정보 음악 효과음 2D 표시 오브젝트 화면이 전환되어 디스크에서 데이터를 불러와 메모리에 배치할 때는 ‘메모리를 ◯◯만 사용하 겠다’고 선언해야 합니다. 게임에는 그림을 그리는 처리, 음향 처리, 제어기를 읽는 처리 등 다 양한 처리가 있습니다. 이러한 처리 또한 메모리를 사용해 실행하기 때문에 ‘이 곳의 메모리를 사용하겠다!’라는 선언을 명시할 필요가 있습니다. 이렇게 다른 처리를 그 장소에서 사용할 수 없게 함으로써 처리를 안전하게 실행할 수 있습니다. 이와 같이 데이터 크기를 지정해 사용을 명시하는 것을 확보라고 합니다. 게임 처리 게임 처리제어기 처리 제어기 처리 메모리 메모리 메모리의 특정 장소 사용을 예약한다 (‘확보’ 상태). 예약한 처리 외에는 같은 영역을 사용할 수 없다. 사운드 처리 사운드 처리 메모리를 ‘확보’하면 메모리의 어느 곳에 데이터를 배치하면 좋을지에 대한 정보, 즉 어드레스
  • 38. 352장 - 메모리와 디스크 를 받습니다. 어느 장소의 어드레스를 받을지는 처리에 따라 매번 달라지는데, 메모리 내에 비 어 있는 적절한 장소의 어드레스를 받게 됩니다. 메모리 메모리 메모리 메모리가 비어 있는 상태 지정 크기만큼 확보한다. 확보한 장소에 데이터를 불러와 저장한다. 반대로 메모리 내의 데이터가 불필요한 경우에는 폐기해야 합니다. 폐기하지 않으면 다른 처리 에서 메모리를 필요로 할 때 그 영역을 차지하고 있어 사용할 수 없기 때문입니다. 불필요한 데 이터를 메모리에 두는 것은 낭비입니다. 이와 같이 메모리 내의 데이터를 폐기하는 것을 해제 라고 합니다. ‘확보’했을 때 얻은 어드레스에 ‘해제’할 시점을 미리 지정해두면 확보 영역은 다시 사용할 수 있 는 상태가 됩니다. 게임 처리 제어기 처리 게임 처리 제어기 처리 사운드 처리 사운드 처리 메모리 메모리 내용은 그대로지만 예약되어 있지 않은 상태 확보한 메모리를 폐기했다. 예약되어 있지 않은 상태이므로 확보 사용할 수 있다. 게임 프로그램 내부에서는 이와 같이 메모리의 확보와 해제가 반복되고 있습니다.
  • 39. 36 게임을 움직이는 기술과 발상 2.10 메모리를 확보할 수 없는 요인 앞 절에서는 필요에 따라 메모리를 확보하는 것에 대해 살펴봤습니다. 하지만 만일 메모리를 확보할 수 없다면 어떻게 될까요? 메모리를 확보할 수 없는 경우에는 대부분의 경우 게임이 올바르게 작동되지 않습니다. 부득이 하게 확보할 수 없는 상황을 상정해 프로그램을 만든다고 가정하면, 일부 캐릭터를 표시할 수 없을 정도의 불편한 상황에서 진행하게 될 것입니다. 하지만 추가로 확보할 수 있다고 예상하 면서 프로그램을 계속해서 만들면 아마 조작 불능 상태가 될 것입니다. 원래 게임을 만들 때는 각 화면의 데이터 크기를 고려해 메모리에 적재할 수 있도록 설계해야 합니다. 그러나 어떤 요인으로 인해 메모리를 확보할 수 없게 되는 경우가 있는데, 그 주요 요 인이 바로 ‘연속된 영역을 확보할 수 없다’라는 점입니다. 메모리를 확보해 데이터를 배치할 때는 데이터의 순서가 상당히 중요합니다. 구체적인 예로 타 이틀 화면에서 메뉴 화면으로 이동할 때의 상황을 생각해봅시다. 다음 표와 같이 타이틀 화면 은 ‘문자 데이터’, ‘타이틀 로고의 그래픽 데이터’ 두 개로 구성되고 메뉴 화면은 ‘문자 데이터’, ‘메뉴 화면의 그래픽 데이터’ 두 개로 구성되어 있습니다. 여기서 ‘문자 데이터’는 같은 것을 사 용하고 있습니다. 타이틀 화면 메뉴 화면 문자 데이터 1MB 1MB 타이틀 로고의 그래픽 데이터 8MB - 메뉴 화면의 그래픽 데이터 - 10MB 합계 9MB 11MB 메모리는 전부 16MB로 간주합니다. 타이틀 화면과 메뉴 화면의 합계는 모두 16MB 이하이므 로, 현재 시점에서는 필요조건을 충족할 것입니다. 실제로 타이틀 화면에서 데이터를 불러와 다음 그림과 같이 메모리를 확보했다고 간주해보겠습니다. 메모리의 시작 부분에서 영역을 확보하고 타이틀 로고와 문자 데이터를 배치했습니다. 배치한 데이터의 합계는 9MB이고 빈 공간이 7MB가 됩니다. 그리고 현재 상태에서 메뉴 화면으로 이 동해 문자 데이터는 그대로 두고 타이틀 로고만을 폐기합니다(다음의 왼쪽 그림).
  • 40. 372장 - 메모리와 디스크 메모리 타이틀 로고(8MB) 문자 데이터(1MB) 빈 공간(7MB) 메모리 빈 공간(8MB) 문자 데이터(1MB) 빈 공간(7MB) 해제 빈 공간의 합계 15MB 그러면 위의 오른쪽 그림처럼 메모리의 시작 부분에 8MB의 빈 공간이 생기고, 1MB의 문자 데이터 영역을 사이에 두고 7MB의 빈 공간이 있습니다. 문자 데이터 1MB만 사용되고 있으므 로 총 15MB의 빈 공간이 생깁니다. 메뉴 화면 그래픽 데이터를 메모리에 넣기 위한 영역을 확보하기 위해서는 10MB가 필요하지 만, 지금의 상태에서는 확보할 수 없습니다. 메모리 넣을 수 없다. 넣을 수 없다. 메뉴 화면 그래픽 데이터 (10MB) 빈 공간(8MB) 문자 데이터(1MB) 빈 공간(7MB)
  • 41. 38 게임을 움직이는 기술과 발상 빈 공간의 총합계만 고려한다면 메뉴 화면 그래픽 데이터를 배치할 수 있지만, 배치 방법에 따 라서는 공간 확보가 불가능할 수도 있습니다. 메모리의 이러한 상태를 단편화 혹은 파편화라고 부르며 메모리의 확보, 해제의 관점에서 보면 단편화되어 있는 상태는 상당히 비효율적이라고 볼 수 있습니다. 앞의 경우를 다음 그림과 같이 배치하면 메뉴 화면의 데이터 공간을 확보할 수 있습니다. 메모리 메모리 메모리 메뉴 화면 그래픽 데이터 (10MB) 문자 데이터(1MB) 문자 데이터(1MB) 문자 데이터(1MB) 타이틀 로고(8MB) 빈 공간(7MB) 빈 공간(15MB) 빈 공간(5MB) 이와 같이 메모리 빈 공간의 상태를 적절히 배치하도록 하려면 단순한 합계가 아닌 연속된 영 역의 합계를 알아야 합니다. 빈 공간을 연속된 영역으로 이루어지도록 데이터를 배치하는 것은 프로그래머에게 매우 중요한 일입니다. 2.11 단편화를 피하기 위한 방법 데이터를 불러오는 순서와 배치 위치를 정확히 관리하면 메모리의 단편화를 피할 수 있을 것이 라고 생각할 수 있지만, 실제로는 조금 더 복잡한 과정을 거쳐야 합니다.