레이더즈 기술 사례

Post on 10-Jul-2015

2.449 Views

Category:

Technology

7 Downloads

Preview:

Click to see full reader

TRANSCRIPT

레이더즈 기술 사례

마이에트 엔터테인먼트

남기룡

게임 소개

레이더즈

레이더즈

• 논타겟팅 MMORPG

• 2012년 7월 피망에서 출시, 2013년 9월 서비스 종료

• 현재 북미, 일본에서 서비스 중

• 개발 기간 약 5년

• 개발 인원 초기 10명, 런칭시 약 60명 – 프로그래머는 초기 5명, 런칭시 약 12명, 엔진팀 따로 구성

• 액션성 높은 에픽 몬스터와의 전투가 특징 – 부위 파괴

– 잡아 던지기

– 브레이커블 파츠 무기 등

레이더즈

라이브러리

• 외부 라이브러리 – Physx

– FMOD

– SpeedTree

– PathEngine

– Bandi Capture Library

라이브러리

• 내부 라이브러리 – RealSpace3 : 렌더링 엔진

– Mint3 : 인터페이스 라이브러리

– CML : 마이에트 공통 라이브러리

– RealInput : 입력 라이브러리

– Minet : 네트워크 라이브러리

• CoreTool : 맵 편집

• CharacterTool : 모델 뷰어/NPC, 몬스터 편집

• EffectTool : 이펙트 툴

• 벨릭시안 : 컨텐츠 편집

• AI Monitor

• 엑셀

• 그 외 수많은 인하우스웨어

툴 - CoreTool

툴 - CoreTool

• 맵 편집 – 터레인/나무/맵 오브젝트/라이트/네비게이션 메쉬/충돌 설정

• 게임 오브젝트 배치 – NPC/몬스터/채집물/센서/마커/사운드

• 환경 설정 – 맵 속성/날씨/시간

툴 – 캐릭터 툴

툴 – 캐릭터 툴

• 모델 뷰어

• 몬스터 스킬 편집 – 판정

– 충돌

– 이펙트

– 애니메이션 블렌딩, 오버레이, 이벤트, 피격 리액션

– 카메라 효과

– 부위 파괴

툴 - 벨릭시안

툴 – 벨릭시안

• 퀘스트 편집

• 조건

• 대화

• 인터랙션

• 루팅 아이템

• 지역화, 문자열 관리

툴 - 엑셀

툴 – 엑셀

• 거의 모든 데이터의 편집 및 관리 – NPC/몬스터

– 아이템

– 크래프팅

– 상점

– 랜덤 박스

– 몬스터 스킬

– 버프

• 엑셀에서 입력 후 XML로 추출하여 게임에서 사용

• 참조, 매크로, 함수, 피봇 테이블 등 엑셀의 모든 기능을 적극 활용함

서버

서버 구조도

Client

Master DB

Game DB Log DB

Game Server

Game Server App

Server

Master Server

Game Server

Patch Server

Game Server

Web Server

World (Max 5k)

Login Server

GameServer

• 게임의 모든 로직을 담당, 실제 유저가 접속하는 서버

• 게임 로직은 단일 쓰레드

• 채널 구조로서 프로세스를 늘리는 방식으로 Scale out

• 논타겟팅의 게임 특색에 맞게 서버 자체가 렌더링하지 않는 커다란 클라이언트라는 개념으로 제작 – 풀 3D 베이스

– 길찾기 : 네비게이션 메쉬 기반

– B-tree 기반 충돌

– 캡슐을 이용한 판정 체크

– 커맨드 기반 게임 루프

• Tick = 20 ~ 40 (상황에 따라 유동적)

• 허용 가능한 지연 시간 100ms

GameServer

Command

Command

Command

Command Queue Command Handler

World Update

Entity Update

Game Logic Update …

Game Loop

Command

User

User

User

MasterServer AppServer

LoginServer

• 인증 등 게임에 진입하기 위한 기초 작업을 담당

• 특별한 거 없다

MasterServer

• 월드의 모든 서버 관리

• 서버 간의 통신을 중계

• 유저 세션 관리

AppServer

• GameServer에 종속되지 않는 포괄적인 기능이면서 CPU, IO 등의 부하가 많은 독립적인 피처를 담당

• Auction

• 채팅

• 로깅

• 투기장

논타겟팅 MMORPG 제작

판정

• 논타겟팅은 서버 관점에선 결국 판정의 방법 차이 – 모든 판정이 광역 판정

• 판정은 모두 순수하게 서버에서 처리한다. – MORPG와 차이점

– 최적화가 중요하다

• CS 지연 시간을 고려하여 서버에서 50~100ms 먼저 판정한다. – 하드 유저는 선판정을 민감하게 감지함

– 선판정을 감추기 위한 여러가지 꼼수(?) 사용

– 호불호가 있다.

– 해결 과제

판정

• 모든 판정은 캡슐 대 캡슐 판정으로 일반화 – 처리 연산이 빠르면서 거의 모든 상황에 일반화하여 적용 가능

• 모델의 판정 캡슐 – 인간 크기 이하의 몬스터는 캡슐 한 개로 구성

– 인간보다 큰 몸의 몬스터는 부위마다 캡슐의 조합으로 구성

– 애니메이션에 따라 캡슐의 위치가 변하지는 않고, 누워있을 때 등의 특정 상태(State)에 따라 캡슐 위치 동기화

• 스킬의 판정 캡슐 – 최적화를 위해 공격 시간의 매 프레임마다 판정하지 않고 각 공격당 한 번씩만 판정

– 예를 들어 3번 주먹질하면 3번만 판정

판정

<마영전> <레이더즈>

타격감

• 공격자의 애니메이션, 피격자의 리액션, 효과, 타이밍 이 네가지 요소가 적절히 잘 배합되어야 기분좋은 타격감이 생긴다.

타격감

• 공격자의 애니메이션

• 피격자의 리액션 – 다음 슬라이드에서..

• 효과 – 적절한 이펙트

– 적절한 사운드

– 적절한 다이나믹 라이트

– 적절한 카메라 효과

– 적절한 포스트 이펙트

– 부위 파괴

• 타이밍 – 서버에서 선 판정하고, 클라이언트에서 서버 판정 정보를 미리 받은 후에 피격 타이

밍에 맞게 처리

타격감 – 피격자의 리액션

• 공격자의 스킬과 피격자의 상황에 따라 모션 팩터라는 이름으로 수치화하여 다양한 모션으로 피격 애니메이션이 나오도록 일반화

• 덩치가 큰 에픽 몬스터는 Knockback, KnockDown, ThrowUp, Deflect을 적용하지 않고 Pain 애니메이션을 따로 제작

Beaten Knockback

Stun Deflect ThrowUp

KnockDown

F Beaten

위치값 동기화

• 액션 요소가 많기 때문에 대부분의 스킬을 사용하면 캐릭터의 위치가 변경됨

• 서버와 클라이언트의 위치값 동기화가 큰 이슈

• 서버는 캐릭터의 애니메이션 정보가 없기 때문에 각 스킬의 위치 샘플링값을 따로 갖고있음

• 돌진 중간에 벽에 부딫힌다거나 낭떠러지 등의 예외 사항 처리 – 스킬 사용 전에 충돌 체크

위치값 동기화

이제 몬스터를 만들어 보면서 설명합니다.

키메라는 이렇게 싸워요

• http://www.youtube.com/watch?v=ObHXNOc63tg

먼저 엑셀에서 몬스터의 기본 정보를 입력합니다

• ID, 이름, Level, MaxHP 등등 입력

• 기존의 몬스터에서 복붙!

모델의 충돌, 판정 정보를 입력합니다

• 정밀하게 판정되길 원하거나 피격되는 부위마다 다르게 처리하려면 캡슐을 여러 개로 나누어 편집 – 이펙트 효과/AI 이벤트 연결/부위 파괴/데미지 차등 감소 등

몬스터의 스킬 기본 정보를 입력합니다

• 기본 정보를 엑셀로 입력

스킬의 공격 판정 정보를 입력합니다

• 캐릭터 툴에서 편집

• 자동으로 만들어주는 것이 아니라서 한땀한땀 손으로 입력.. orz

스킬의 공격, 피격 이펙트를 연결합니다

• 이펙트는 메쉬 이펙트, 파티클, 동적 라이트, 카메라 효과, 사운드, 포스트 이펙트 등을 모두 일반화하여 사용함

• 피격시, 공격 애니메이션 이벤트 등 특정 상황에 따라 이펙트를 연결

캐릭터의 Mode

• 몬스터는 특수한 State인 Mode 상태가 따로 있음

• Mode State에 따라 Idle, 이동 애니메이션, 판정, 충돌 등을 다른 그룹으로 처리

• Mode의 예 – 하늘을 날고 있는 상태

– 땅속에 있는 상태

– 투명화

– 다른 무기를 집어듬

Ground mode Flying mode

AI 스크립트를 입력합니다

• 내부적으로 COLT라고 부름

• XML 태그와 Lua 스크립트의 조합

• 동적 편집 가능

• 생각할 수 있는 대부분의 것은 거의 모두 만들 수 있는 구조 – 단지 디버깅이 빡쎌뿐... ㄷㄷ

AI 스크립트를 입력합니다

<XML> <Lua>

그외 디테일한 부분도 체크합니다

• 회전 애니메이션

• 부위 파괴

• 등장할 때의 연출

• 몬스터가 승리할 때의 연출

• Pain 애니메이션

• 밸런싱

• 등등

감사합니다

top related