게임제작개론 : #6 게임 시스템 구조에 대한 이해
DESCRIPTION
예비 게임 프로그래머들을 위한 게임 시스템의 구조 –Single Game –Multiplayer Game •결정형 및 비결정형 게임TRANSCRIPT
게임 제작 개론 #6
게임 시스템 구조
NHN NEXT
구승모
Agenda
• 게임 시스템의 구조 – Single Game
– Multiplayer Game
– Case-study
• 결정형 및 비결정형 게임
학습 목표
• 기본적인 게임 시스템 구조에 대해 이해하고 게임의 구조적 특징이 콘텐츠에 어떤 영향을 주는지 설명 할 수 있다
• 결정형/비결정형 게임의 차이를 알고 어떤 게임이 각각에 해당하는지 실제 예를 들 수 있다
게임 시스템 구조
게임의 처리 과정
• 일반적인 게임의 처리 루프 – 싱글 플레이어 게임
– 그럼, 멀티 플레이어 게임은?
Inputs
Simulate
Render
Wait
States
events timer
State State State
Time
멀티 플레이어 게임
• Input이 네트워크 상의 다른 컴퓨터로부터 올 수 있음
• 게임 로직 처리 및 상태 관리를 다른 컴퓨터에서 함
• 구조에 따른 분류 – P2P, Client-Server, Web-based, Hybrid
Inputs
Simulate
Render
Wait
States
my events
other hosts over the network
스타크래프트는?
Peer to Peer
• P2P 구조 – 클라이언트간 상호 직접 연결
– 빠른 반응성 및 저렴한 유지 비용이 장점
– 확장성 및 해킹(Cheating)에 취약
– FPS 및 RTS 장르에 적합
Peer Peer
Peer Peer
P2P 방식의 처리 구조
• 게임 입력(event) 교환을 통해 각자 게임 로직 처리
Inputs
Simulate
Render
Wait
States
peer events
Inputs
Simulate
Render
Wait
States
Compare Compare exchange
P2P 방식의 동기화 구조
• 주기적으로 이벤트 모아서 교환 – (예) 1초에 20번 업데이트 50ms 간격의 Round
– 입력이 없더라도 Beacon신호는 Round 단위로 교환
• 상대 Peer로부터 해당 라운드의 이벤트를 모아 각자처리 – 각각의 클라이언트는 모두 아래와 같은 형태의 Queue를 유지
events events events 나
상대1
상대2
Round
0 ms 50 100 150
Round Round Round
events
events events
모든 Peer들의 입력이 모이면 해당 Round를 처리(Simulate)하고 렌더링
특정 Peer의 정보가 제시간에 도달하지 않으면 Lag현상
??
events
월드 오브 워크래프트는?
Client-Server
• CS 구조 – 클라이언트는 서버를 통한 간접 연결
– 중요 로직은 서버에서 처리함으로써 해킹으로부터 비교적 안전
– NPC를 서버가 능동적으로 활용(drive)할 수 있음
– 구현 및 유지 보수 비용이 비교적 높음
– MMOG 장르에 적합
Client Client
Client Client
Server
Client-Server 방식의 처리 구조
• 서버가 게임 로직 처리(Simulate) 및 상태 관리
Simulate
States
Inputs
Render
Wait
events Server
state info
Client-Server 방식의 동기화 구조
• 모든 이벤트는 서버에 처리 – 클라이언트에서 발생하는 입력은 서버에 보냄
– 서버에서 모두 모아 계산한 후 해당 클라이언트로 방송
– 네트워크 트래픽이 서버에 집중되는 구조
– NPC가 생성하는 이벤트도 해당 영역내의 클라이언트에게 방송
Server
Client A
Client B
NPC
NPC
NPC
A
B
A
A
B
B
Event A
Event B NPC Event
팜빌은?
Web-Based
• 웹 서비스 방식 (REST) – HTTPS를 이용한 보안성 확보가 쉬움
– 연결 유지가 필요 없어 접속이 불안정한 환경에서 유리
– 모바일 게임 및 소셜 게임 장르에 적합
– 부하 분산(웹서버 추가)이 용이하여 확장성이 높음
• L4/L7 스위치를 통한 Load-Balancing이 가능
Client
LB Web Server
Browser
Web Server
Client
Browser
Web Server HTTP
Web-Based 방식의 처리 방식
• Request/Response 구조 – 웹의 특징을 그대로 물려 받음
• Atomic, Stateless
– 플레이어간 순서 보장이 필요할 경우
• 사과를 친구가 먼저 수확한 경우 어떻게 처리?
• 주로 Back-end (주로 캐시서버나 DB)에서 동기화
– 수동적: Server-initiated Action 어려움
• 몬스터의 선공과 같은 능동적 NPC 행동 불가
Web Client
Web Server
State State State
Response
Request
정리하면
• 만들고자 하는 게임 콘텐츠의 특성에 따라 구조 결정 – Scalability: 많은 수의 유저를 처리함에 유연한가?
– Responsiveness: 상대와의 작용-반작용이 빠르게 처리 되는가?
– NPC-Activeness: NPC 활용이 얼마나 적극적인가?
– Security: 해킹으로 부터 얼마나 안전한가?
– Robustness: 불안정한 접속 및 끊김으로 부터 복구가 쉬운가?
– Simplicity: 구현 및 유지 보수 비용이 싼가?
기준 Client-Server P2P Web-based
Scalability SOSO BAD GOOD
Responsiveness SOSO GOOD BAD
NPC-Activeness GOOD SOSO BAD
Security GOOD BAD GOOD
Robustness SOSO BAD GOOD
Simplicity BAD GOOD GOOD
Case Study
• LOL
• TERA
• Diablo 2
• Diablo 3
• 사이퍼즈
• 서든어택
• 피파온라인
• 애니팡
• 마비노기 영웅전
• … …
결정형 게임과 비결정형 게임 (Deterministic vs Non-deterministic)
결정형 게임
• 다음의 공통점은? – 스타크래프트 리플레이
• 같은 경기를 녹화한 동영상보다 용량이 훨씬 작다
– LOL의 경기 참관하기 기능
• 5분 늦은 시점을 보여준다
– 스타크래프트 2 군단의 심장
• 리플레이 재생 중 특정 시점부터 이어하기 기능은?
• Discussion – 위의 기능들에 대한 동작 원리는?
• 5분 구상하고 발표
• 어떻게 했을까?
결정형 게임의 구현 원리
• 이벤트의 집합으로 동일한 시뮬레이션이 가능 – 동일한 환경을 만들어주면 항상 같은 결과값이 나오도록 설계
• 랜덤으로 결정되는 것이 없음
– (참고) deterministic physics
• AI의 경우도 입력(플레이어의 특정 액션 등)에 따라 결정되는 구조
– (예) 플레이어에게 데미지를 100~150 사이 받으면 대상에게 분노하기
– (예) 프레임 단위 이벤트 동기화
Frame 1 2 3 4 5 6 7 8 …
PC 1 P#2 ↙ …
PC 2 P#1 P#2 …
PC 3 ↗ K#2 ↓ K#1 …
… … … … … … … … … …
NPC 1 IDLE ATK#7 - - DEF#1 - FWD - …
NPC 2 IDLE FWD - DEF#3 - ATK#4 - BACK …
… … … … … … … … … …
비결정형 게임
• 랜덤의 요소가 존재한다면? – (예) 스타크래프트의 해병 라이플 데미지가 6~10 랜덤일 경우
• 피격대상의 히드라 HP가 8 남은 상태라면?
• 어떤 경우에는 히드라가 살고, 어떤 경우에는 죽게 됨
• 결정형 게임이 더 이상 아님
• 비 결정형 게임 – 똑같은 환경이 주어지더라도 다른 결과가 나옴
– 랜덤의 요소가 존재하여 똑같이 재현이 불가능
– (예) 테라, 와우, 아이온 등의 MMORPG
난수의 생성원리 소개
• 컴퓨터가 정말 무작위 숫자를 생성할 수 있을까? – 특정 입력에 대해 서로 다른 결과를 생성할 수 있다면 가능
– 우리가 쓰는 컴퓨터는? deterministic machine
• Pseudo-Random Number – 어떤 초기값(SEED)를 이용하여 이미 만들어진 메커니즘을 통하
여 생성되는 수로 무작위처럼 보이는 가짜 난수
– (예) middle-square, multiply-with-carry
좋은 난수 생성기?
• 온라인 포커 게임을 만든다고 했을 때 – 패 섞을(shuffle) 때 무작위 난수 생성을 이용하게 됨
– 만일, 난수 생성 알고리즘과 SEED를 알게 된다면?
• 그래서, 예측이 어려운 난수 생성이 필요 – 정말 무작위 하게 느껴지도록 하려면
• 연속되는 난수는 독립적이어야 함
• 생성 주기가 길어야 함
• 결과적으로 고르게 분포될수록 좋음 – 특정 숫자가 압도적으로 자주 나오지 않도록 함
비결정형을 결정형으로 만들기가 가능할까?
• 초기 SEED 값을 맞추는 방법 – 플레이어 입장에서는 랜덤이 동작하는 것처럼 보일 수 있음
– 생성되는 난수가 예측되기 때문에 사실상 결정형 게임이 됨
• Discussion – MMORPG의 경우에 왜 결정형 게임으로 만들기 어려운가?
• 랜덤의 요소가 없으면 쉽게 결정형 게임으로 만들 수 있는가?
끝
• Q & A
• 강의 주제 안에서 알고 싶은 것은 게시판에 남겨주세요
• 다음 시간 강의 내용 – 게임 제작 팀 구성과 게임의 리소스 구성
참고 자료
• 참고 링크 – REST
• https://en.wikipedia.org/wiki/Representational_state_transfer
– Can a computer generate a truly random number?
• http://engineering.mit.edu/live/news/1753-can-a-computer-generate-a-truly-random-number
– Pseudorandom number generator
• http://en.wikipedia.org/wiki/Pseudorandom_number_generator
– How to Generate a Sequence of Unique Random Integers
• http://preshing.com/20121224/how-to-generate-a-sequence-of-unique-random-integers