KGC2012: Avoiding Developer Taxes

GDC 2012의 “Robustification Through Introspection and Analysis Tools (Avoiding Developer Taxes” 와 유사한 내용인 듯.

강연 내용에 해당하는 코드(clang-extract)는 https://github.com/sk-havok/clang-extract 에서 볼 수 있다.

내용 요약:

고질적인 게임 개발 비용들(taxes)

직렬화

메모리 정보 보기

스크립트 바인딩

버전 관리

Reflection

C++로 개발할 때 reflection 을 이용해서 푼다. 여기엔 이런 문제가 있다:

  • 어떻게 리플렉션을 만들까?
  • 어떻게 (소스 코드와 데이터에) 싱크가 맞을까?
  • 견고성 (robustness)

수동으로 처리하는 것은 문제가 많다. (buggy!)

regex 등으로 헤더를 처리하는 것도 마찬가지.

그리고…

  1. 하지만 C++에는 reflection이 없다
  2. GCC XML을 써봤다. 느리고 개발도 완성 상태가 아님[1]
  3. clang + LLVM frontend를 수정해서 reflection 생성기 개발

C++ headers –> LLVM + clang –> DB 로 변환
그리고 이걸 이용해서 리플렉션 생성, 스크립트 생성. 그리고 정적 분석.

그리고 이 리플렉션을 쓰면 직렬화는 껌(…).

메모리 alignment를 해석해서 구조체의 메모리 배치를 효율적으로 바꾼다거나 하는 것도 가능.

LLVM+clang pass는 견고하고, 싱크가 안 맞는 문제를 방지

DB Consumer pass 는 컴파일 이전에 논리적인 문제를 찾고, 런타임 문제를 컴파일 시간에 잡게 한다.

유닛 테스트 역시 (자동으로) 리플렉션 데이터를 검사할 수 있게 됨.

 

Language Binding

C++을 스크립트에 바인딩 하려면 문제가 많음. 다만 리플렉션을 쓰면 데이터는 자연스럽게 됨. 그렇지만 callable들은 여전히 힘듬.

함수 trampoline 의 경우 C++ 함수 signature를 처리하기 위해서 생성하는데, 함수 signature마다 bridge 함수를 만드는 쪽이 함수마다 wrapper를 만드는 것보다 싸다.[2]

메모리 리포팅

Leap frog 테크닉을 쓴다: (일부) 메모리 할당의 타입을 기록하고, 이 오프셋과 사이에 있는 데이터를 유추. (indirect pointers)

그리고 stack walk하면서 이에 대한 데이터를 추정해서 메모리 할당 맵을 offline으로 생성할 수 있게 된다. 그렇지만 일부 컨테이너 류 등에서는 false positive가 있을 수 있고, obfuscated pointer[3] 나 타입을 알 수 없는 void* 류는 처리 안됨. 그래도 디버그 모드는 콜스택과 시간을 남겨서 처리한다.

…로 annotated memory data를 만들 수 있게 함.

 

버전 관리

버전 관리는 쉽지 않음. 매뉴얼하게 하면 버그 나오기도 매우 쉽고 코드 관리도 힘들다.

이걸 snapshot versioning으로 구현. (reflection data의 CRC 이용해서 reflection 결과가 바뀌는 걸 추적)

하지만 이것의 오버헤드 때문에 좀 더 세밀한 단위로 변경 사항을 추적하고 이걸 patching하는 코드를 (semi-automatic하게) 만들게 함.

 

결론

코드 말고 데이터를 생성하자. 데이터가 더 작고 용도도 많다.

  1. 예전에 C++ 헤더들을 GCC-XML의 python bindiong으로 해석해서 이를 처리하기 위한 script 등을 만드는 작업을 했었다. 흑흑 이걸 좀 더 했으면 GDC감인가! []
  2. 함수 N개에 대해 400bytes 씩인 것 vs. 40 * N + 60 * 함수 signature 수 정도라서; 아 근데 60인지 manuscript 안 보면 확인을 못하겠다 ㅠㅠ []
  3. p ^=1; 같은 포인터 연산 []

리뷰: Bastion

bastion-title

어제 Steam에서 구매한 (발매 일은 8/16)[1] 게임. 가벼운(?) 게임 플레이를 제공하는 아기자기한 2D 게임을 원하던 터라 주저 없이 구매. 19.99 (이하 USD)를 할인해서 14.99던가에 판매하더라.. 다만 OST 합본 팩을 안 산걸 조금 후회… OST를 따로 사니 추가로 $5쯤 추가로 들었다 Orz.

전형적인 2D, 쿼터 뷰, 핵&슬래시 장르라고나 할까…
게임 배경이 배경이니 좀 음울하긴 하지만 색조는 화사(?)한 편에 가깝다. 2D에서 좀 더 보여주기 쉬운 색감이랄까.

bastion-graphic

화면 중앙 왼쪽의 다리 난간이 좀 이상하게 보일 거다. 던전(?)에 들어가면 일부 지역만 보이고/이동가능하고, 특정 경로로 이동하면 화면에 타일들이 `떠오른다’. 저 다리 난간도 떠올라서 생기는 중(…). 적도 그렇게 생긴 화면에 턱 하고 나타나는 경우가 있어서 나름대로 긴장감 유지에 좋음.

정말 좋았던 부분은 음악 + 해설(?). 주요 등장 인물 중 한 명이 주인공의 행동을 서술하는 형식인데. 이게 음성으로 낮게 깔려 나옴. 일부 동작 – 예를 들어 새로 얻은 무기로 열심히 물건들을 부순다거나, 추락한다거나, … – 에 반응해서 그에 대한 설명을 하기도 한다. 시작하자마자 떨어지고 나서 나오는 해설에 잠시 멍해지더라(…).

 

bastion-mortar

무기가 다양하게 나오는데 – 망치, 바셰티, 창(할버드?), 활, 저격소총, 샷건, 박격포, …이건 뭐라 설명할 수 없는 로켓포(?), 화염방사기 등… – 이에 대한 업그레이드 재료 + 돈으로 이 무기에 추가 옵션을 달아서 게임 플레이가 꽤 변한다. 로켓포 최종 업그레이드 같은 경우 자동 추적(…)옵션이 달리기도. (무려 범위 무기에 궁극 무기라 한 방에 거의 다 잡는데…)

스크린 샷에서는 터렛에 맞아가며 박격포를 조준하는 장면. 무기마다 컨트롤이 확연히 다른 것도 재미요소. 활은 오래 겨냥하면 더 세게 나가고, 저격 소총은 오래 겨냥하면 더 정확히 나가고… 박격포는 더 오래 겨냥해야 멀리 나가고(…). 일부 근접 무기는 오래 누르면 던진다거나 하기도; 그리고 무기 마스터 던전도 존재한다. 각 무기에 맞는 특정 미션을 수행하면 수행 수준에 따라 보상을 달리 주는 곳(…).

사원이란 시스템으로 난이도를 조절하는 것도 괜찮았음. 사원에 특정 신상을 활성화하면 특정 조건의 몹이 특정 형태로 더 강해지거나 하는 게 생김 – 물론 돈과 경험치도 더 줍니다… 그래서 별도의 난이도 시스템이 외부에 preset으로 주어지는 게 아니라 유저가 알아서 잘(?) 하면 되는 구조… 요즘처럼 게임이 대중화 된 상태에선 난이도에 대해 호 불호가 극명하기 때문에 이건 꽤 괜찮은 선택으로 보인다.

 

bastion-portal

보너스: Steam 판매용 버전에만 있다는 깨알 같은 포탈 패러디. 특수 스킬을 고를 수 있는데 Gel Canister란 녀석이 있다(…). 이거에 대한 NPC들의 반응도 깨알 같다(…). 일단 `Who Knows Where’ 클리어 할 때 매우 편하다.

한 번 클리어한 던전에 또 진입할 수가 없는데, 대신 `Who Knows Where’라는 모드가 있다. 게임이 전체적으로 3종류의 던전 배경이 있는데 그 각각에 대해 몬스터의 웨이브가 k번 반복되는 그런 반복 던전. 돈은 여기서 모으면 됩니다. 어차피 스토리를 이해하기 위해선 꼭 한 번 씩은 가야 하니…

 

bastion-ville

마을은 왼쪽에 보이는 노란 아이콘 (검은 배경) 같은 상점(?)류가 총 6곳 있다. 처음엔 0곳이지만 스토리를 진행하다 보면 늘어나고, 각각이 지원하는 기능이 다름. 하지만 마을은 큰 의미가 없는 게임이라(…).

전체적으로 올해 나온 게임 중엔 가장 맘에 듬. 짧다는 것만 빼고(…). 시작해서 엔딩 볼 때 까지 실 플레이 시간은 5시간 미만?. 물론 두 번 엔딩 봐야 하고(…), 업적도 채워야 하니 그보다 더 걸리긴 함. 일단 가격도 그다지 비싸지 않으니 추천. 이 게임 분류가 인디긴 하지만 무려 HD 해상도도 지원하고 / 그래픽 / 사운드(!!) 모두 나무랄 곳이 없다.

 

PS. 여기서 잠시 스포일러 성 멘트 하나. 게임 엔딩 선택지가 commit or rollback이다. 이런 공돌이들 같으니(?).

  1. XBox Live Arcade를 통해서는 지난 달에 발매되긴 했다. []

Project Dark Star 그 후는?

작년 2월에 Sun Microsystems (이제는 Oracle) 에서 개발하던 Java 기반 게임 서버 프레임워크인 Project Dark Star가 접히고, 오픈 소스 프로젝트로 fork 했다는 얘길 했다.

현재 상황은 대략 망해가는 프로젝트인 것 같다.

마지막 stable version이 작년 12월에 릴리즈. 다운로드 수는 누적으로 70회;

마지막에 등록된 티켓(trac issue)이 올해 2월.

위키 최종 편집 시간이 6월[1] 포럼에만 활동이 약간 있는 정도. 이 정도면 거의 활동없는 프로젝트라고 봐야하나?

(실질적으로) 사용하는 곳이 없고 / 개발 팀도 응집되지 않은 듯 하고 (커밋한 사람 수를 보면…) / 앞으로 비전이 있는 프로젝트는 못 될듯 하다.

  1. 그 이전에 올해 들어와서 수정된 페이지가 6개 , 그리고 각각 1번씩만 수정 []

리뷰: Lara Croft and the Guardian of Light

8월 말에 Xbox 라이브 아케이드로 출시되었지만, 일단 PC에서 하려고 기다리다(…) 나온 걸 놓치고, 어제 발견하고선 Steam에서 데모 플레이 후 바로 구매; 그리고는 오늘 엔딩 크레딧을 봤다(…). Metacritic score 85점. 플레이 소감으로도 꽤 괜찮게 만든 게임이다.

인증 샷(…)

lc_gol

다만 Tomb Raider 시리즈와는 약간 궤를 달리한다는 점이 기존 시리즈의 팬들은 호오가 좀 갈릴 듯.

Tomb Raider 시리즈에서 흔히 볼 수 있는 퍼즐 점프 – 특정 빈 틈을 타고 올라가거나, 굴뚝 점프(좁은 공간을 좌우로 디디면서 점프해 올라가는 것), 경사면을 타고 가다 점프 등등 – 는 전부 제거. 그냥 일반적인 점프만 있다. 그래도 자석(?)을 이용한 로프 액션은 남아있음…

다만 기본 무기(?)인 창의 역할이 이전 작의 막대기 류 기능을 좀 확대해서 퍼즐의 가짓수는 줄이고, 사용 방법은 늘린 느낌. 대충 밑에 나온 그림처럼 사용한다.

lc_gol_spear_jump

작아서 잘 안보이면 클릭해서 좀 더 큰 사진을 볼 것.

들고 다니는 창을 던지면 벽 등에 박힌다. 그리고 이 위에 올라가서 다시 점프를 하거나 로프 액션을 하거나 하는 게 가능. 혹은 점프 한 번에 갈 수 없는 거리에 있는 벽에 던진 다음, 그 창을 목표로 뛰거나, 벽에 다가 창을 여러 개 꽂고, 그 위를 연이어 점프하는 것도 됨. 다만 창이 박힌 채로 남아 있는 총 수에는 제한이 있다.

예전과 폭탄 사용 방식이 바뀌었다. 단순한 무기에 가깝던 것에서, 설치->폭파를 모두 Y키로 제어할 수 있게 변경 됨. 이걸로 쇠공을 점프 시키거나, 스위치를 원격으로 조작하거나 하는 일이 가능. 즉 스위치를 일단 켜고, 폭탄 설치 후, 원거리로 이동한 후(벽 뒤라거나?) 다시 스위치를 누르는게 가능; 이걸로 만들어진 퍼즐들이 많다…

 

근데 기존의 “길을 찾아가는 재미”는 상대적으로 덜하긴 하다. 생각할 방법의 수가 사실 상 창/자석 두 가지 뿐이라…

이 길 찾기의 재미를 줄이는 원인 중 다른 하나로 시점이 고정으로 바뀌었다. 위 캡처 화면에 나온 것처럼 일명 쿼터 뷰(?) 화면으로 게임이 계속 진행된다. 물론 지형에 따라서 DMC처럼 적당히 카메라가 바뀌긴 한다. 그래도 예전처럼 카메라 돌려가면서 확인할 수 없으니, 상대적으로 퍼즐 난이도가 떨어질 수 밖에 없고, 현장감도 많이 준다.

예전과는 달리(?) Relic이나 Artifact는 일정 조건을 달성하면 주는 형식이 되었다. 예전에 숨겨진 걸 찾는 형식이었지만, 대신 “특정 모양의 입구”를 갖는 미니 던전이 스테이지마다 1~2개 있고, 이 안에 들어가서 퍼즐을 풀면 특정 relic 혹은 artifact를 얻는 식으로 바뀜. 이건 찾는 재미는 줄었지만, 풀기만 하면 되니 편해서 좋긴 하더라(…). 그리고 스테이지에 흩어진 해골(10개)을 모두 모으면 주는 artifacts들도 있음…

그리고 많은 무기가 클리어 시간, 점수(…) 등으로 지급된다. 이건 스코어로 지급되는 무기 중에 사기 무기(마지막 스테이지의 Spear of Light 같은 것)이 있어서 좀 밸런스가 안 맞는 기분… 스코어가 제일 쉬운 조건 같은데 말이지(…)

싼 가격에서 추측 가능한 만큼 볼륨이 좀 작다 – 플레이시간 6.2시간 만에 엔딩 크레딧이 떴음. 다만 퍼즐이 상대적으로 쉽고 – 특히 리메이크 판이었던 Tomb Raider: Anniversary에 비하면 정말 – 전투의 잔 재미는 늘렸단 점에서 가볍게 즐기기는 좋았던 듯.

Civilization V: 문답무용

civ5_domination

지난 주 금요일에 도착한 – 실제로 받은 건 추석 쇠고 서울로 올라온 후인 월요일이지만 – Civilization V의 엔딩을 봤다. 기본 난이도(Chieftain)라서 전 문명 전멸(domination) 승리라도 큰 감흥이 없긴하지만; 일단 엔딩 본 걸 기념하는 의미에서 자축 포스팅.

문명의 새 씨리즈도 역시 기대를 저버리지 않고 잘 만들어졌다. 전작에서 여러가지 의미로 논란이었던 – 특히 확장팩인 BTS에서 외교 승리 등등… – 종교 부분은 아예 삭제 되었다. 대신 외교 관련되서 재밌는 요소로 도시 국가(citi state)가 등장한다. 충분히 우호적이 되면 이 도시들은 문화 값을 올려주거나, 군사 유닛을 제공해준다. 그리고 외교 승리의 요건인 UN 투표에서 동맹국에게 표를 주는 효과도 있다 – 인구당 표가 있었던 전작과 달리 국가별로 1표씩 행사함.

유닛을 쌓아서(…) 보내기만 하면 되는 – 물론 초반은 안그렇지만 – 전작들과는 달리, 유닛이 한 자리에 쌓이지 않고 + 헥스 타일이라 거리도 잘 봐야하고 + 원거리 유닛이 좀 더 좋아진 상황이라, 전투가 좀 더 재밌게 진행된다. 그리고 도시가 자체 방어력을 갖기 때문에, 초반에 야만인들한테 점령당하는 엄한 사태도 안 일어나서 좋더라(…).
대신 이것 때문에 전작보다 폭격기/해상 포격 가능한 전함류/시즈 유닛들이 훨씬 중요해졌다. 예전엔 초반 약간 동안만 투석기 써서 collateral damage로 도시 점령했는데(…), 이젠 후반까지 전함/폭격기 의존이 꽤 되더라;;

기술 개발 관련해서는 IV에서처럼 기술을 사고파는(…)게 안되고 공동 개발만 되서, 상대적으로 테크 트리 올라가는 속도는 느려졌다. 그래서 초반에 자기가 가려는 승리조건/상대방 조합을 잘 보고 테크 트리를 타야할 듯 함.

자원이 두 타입으로 구분되는걸 명시 해주는 것도 맘에 들더라. 전략 자원과 사치품을 구분한다. 이 중 전략 자원을 소모하는 유닛들 – 주로 로마 군단병;Legion(전작의 근위병;Praetorian에 해당)폭격기나 전함처럼 성능 좋은 애들 – 이 있고 (총 수량 중 고정된 몇 개를 쓴다), 특정 도시가 특정 사치품 자원(…)을 요구하는 일이 있기 때문에, 진행하는데 적당한 랜덤성이 부여되서 좋더라.

도시 별 행복도가 있던게, 문명 전체 행복도로 바뀌었다. 상대적으로 신경을 덜 쓰게 바꿔준 것 같다 — 이거 말고도 도시 관리 메뉴나 생산, 인구 배치 등등이 훨씬 편하게 진행된다. 예전에는 생산 팝업이나 연구 팝업 뜨면 딴거 할 수 있는게 없었는데, 이젠 modeless 로 왔다갔다 하면서 처리할 수 있어서 좋다. UI 개선은 정말 만족스러움…

덤으로 원더들의 성능이 대폭 하락했기 때문에(…), 원더만 믿고 가다간 망한다.(이제 나의 원더만 믿고 가는 Augustus 전략은 ㅠㅠ)

이제 난이도 올려서 좀 더 큰 맵(과연)을 해봐야할 듯. 하지만 CPU 업그레이드 전엔 좀 힘들까? intel core2duo (E6750) 쓰고 있는데, CPU가 100%를 치는 일이 너무 잦다; 4 문명(+8 도시 국가) 설정으로 해도 후반부 가면 Civ IV 14 문명 설정 수준으로 느리다;;

성능 문제랑 아직 밸런스가 안 맞는 부분이 좀 있어 보이는거 빼곤 매우 만족스럽다. 오늘은 리밋이 풀렸지만(…) 매일 제한 시간을 잘 지키면서 해야겠다(…).

게임물 등급 심의 제도에 관한 생각

오늘 가장 재밌게 본 게시판(…)인 게임물 등급 위원회(이하 게등위) 질문/답변 게시판을 보다가 든 생각이 있다.

“내 휴대폰에 있는 게임은 등급물 심의를 받았는가?”

그리고 이걸 가지고 몇 가지를 생각하다보면, 게임물을 사전 심의하는 행위가 위헌인지는 제쳐놓고도 – 적어도 나는 위헌이고 빨리 철폐 되어야 한다고 생각함 – 별로 잘 지켜지고 있지도 않은 제대론 사실을 깨닫게 되더라..

일단 내가 법학을 전공하거나 그에 관련된 일을 하고있지는 않기에 부정확한 내용이 있을 수 있는 점을 염두에 두고 읽어줍시다.

이야기를 풀어놓자면,일단 내 휴대폰은 2008년에 나온 삼성전자 SCH-W450 이다. 소위 Anycall이라고 부르는 피쳐폰… 여기에 게임이 딱 하나 들어있는데, T-Net 이란 홍콩 국적으로 보이는(적어도 DNS 등록지 주소는…) 회사에서 만든 게임이었다. 심지어 gamespot 리뷰 페이지가 있다.

근데 일단 “게임 산업 진흥에 관한 법률” 33조 1항에 따르면, 등급물 정보를 표시할 의무가 있다. 일단 제작사는 이거 위반한게 된다. 그리고 32조 1항의 6번째 부분,

제33조제1항 또는 제2항의 규정을 위반하여 등급 및 게임물내용정보 등의 표시사항을 표시하지 아니한 게임물 또는 게임물의 운영에 관한 정보를 표시하는 장치를 부착하지 아니한 게임물을 유통시키거나 이용에 제공하는 행위

에 따라 이걸 유통시키고 이용에 제공한 삼성전자와 SKT역시 불법 행위를 저지른 듯? 이거 같은 법 45조에 따라 2년 이하의 징역 혹은 2천만원 이하의 벌금에 해당한다…

그리고 게등위의 규정에 따르면, 휴대폰 같은 모바일 장치용 게임은 게임 초기 화면에 3초 이상 내용 정보를 표시해야 한다는데 그런거 없다(…).

일단 게등위 게시판으로 신고(..)해 놨는데 이게 어떻게 처리될지는 꽤나 궁굼…

아니 이게 중요한…건 아니고. 사실 이런 사례가 아마 비일비재 할 것이다. 개인이 만드는 플래시 게임이나, 학교/학원에서 만드는 컴퓨터 게임 – 게다가 많은 수가 공유/배포 될테니 이미 법률 위반… – 들이 잔뜩 있다. 이걸 게등위가 다 검열심의 한다는 건 물리적으로 불가능해 보인다.

이렇게 게임 자체의 이름을 걸고 유통되는 것만 있는가? 오늘 게등위 게시판에 올라온 질문 중 제일 걸작이었던 것은 “곰 플레이어에 이스터 에그로 게임이 들어있는데 심의 안된 불법아닌가?”하는 것이었다. 그리고 답변은 불법인 것 같으니 공문을 발송할 거라고…

내가 언급한 휴대폰 게임처럼, 한국에 유통되고 있는 수 많은 전자기기 – TV, DMB 플레이어 등 많은 수의 휴대용 미디어 플레이어, 전자 사전, … – 에 미니 게임 형식으로 많은 수의 게임이 포함되어 있다. 이걸 다 심의 하겠다고?

아마 물리적으로 불가능할 것이다. 게등위가 생기기 이전에 작성된 게임도 심의 받아야하는 게등위의 구조적 특성 상[1] 아마 절대로 힘들 걸?

결국 합리적인 대책은 – 지금 국회에서 계류 중인 수준의 법이 아니라 – 전면적인 게임물 등급 심의 철폐 및 개별 게임 제작자(사) 혹은 이들의 연합체에서 스스로 등급을 부여하고, 이게 잘못된 등급이라면 사법처리하는 쪽이라고 생각한다. 실제로 북미(미국+캐나다)의 ESRB도 이런 식으로 동작한다. 게다가 국민 전반의 수준을 낮게 보지 않는다면, 이런 사전 심의 제도가 정말 의미 있는지 궁굼하다.

노골적으로 성적인 내용을 다루거나, 폭력성이 강한데 등급이 낮다면 처벌하면 될 일이다. 이걸 지켜보는 눈도 많을테고(YMCA라거나 YWCA라거나…이런 쪽 지켜(?)보는 종교 단체나 NGO들 많다…) 실제로 등급 판정에 불만(?)을 갖는건 업계 쪽이나 개인, 이런 단체들 사이에 자주 있는 일이기도 하고.

  1. 위키 백과 내용을 토대로 썼음. 이건 사실 관계를 확인 해야함… []

이번 가을 Civilization V가 온다!

내가 가장 사랑해 마지 않는 게임, Civilization 시리즈의 신작이 이번 가을에 등장할 예정이라함.

http://www.civilization5.com/

공개된 정보는 개략적인 발매일(올 가을)과 3 장의 스크린샷 뿐.

Updated: Steam 을 통해 공개된 정보에 따르면, 스팀 쪽으로는 2010년 9월 2일에 발매됨 — http://store.steampowered.com/app/50100/

공개된 스크린샷도 총 5개로 증가.

일단 공식 홈페이지를 통해 공개된 스샷 중 하나를 여기에도 올린다. 모든 권리는 Firaxis Games 에 있다. (All rights are reserved to Firaxis Games)

Civilization V

Civilization IV 보다 좀 더 “생동감이 더해진” 그래픽이 맘에 든다. 사실 나와주는 것만으로도 감사! ㅠㅠ

아마 Amazon.com 에선 해외 배송이 안될 듯 하지만, 모든 수단과 방법을 동원해서(…) 구매해야지 Orz

Project DarkStar 는 왜 실패했을까?

SUN의 Java 기반의 게임 서버 프레임웍인 Project DarkStar 는 왜 실패했을까? 내가 예전에 생각했던 것과, 요즘 들어 든 생각들을 모아서 요약해봤다.

1. 게임 서버는 게임 제작 기간의 임계 경로(critical path)가 아니다

게임 서버는 대부분의 경우 “게임 제작 시작”과 동시에 작성되기 시작하는 경우는 거의 없다. 그래서 엔진을 사서 얻을 수 있는 이익 중 하나인 “시간 단축”으로 인한 효과가 적거나 없다. 물론 상대적으로 안정화된 코드 베이스를 빨리 얻을 수 있다는 이점은 존재 한다.

2. 게임 서버 구조에 대한 컨센서스가 없다.

게임 클라이언트는 각 모듈들 – 게임 로직, 렌더링, AI, … – 이 어느 정도 잘 분해되어 있다 – 적어도 그런 종류의 고민이 많이 끝난 상태다. 하지만 서버의 경우 게임 로직과 게임 서버 자체의 구동을 위한 아랫 단의 구분이 성능 저하없이 잘 이루어져 있는 경우가 드물다. 그래서 이런 서버용 게임 엔진은 시장에 나와 있는 예가 거의 없다. 내가 아는 범위 내에서는 DarkStar 프로젝트와, BigWorld Technology의 BigWorld Server 정도 밖에 없다. 그리고 이 범위 내에서, 상업적으로 충분한 성공을 거둔 게임(eg: 연간 1m USD 이상의 매출)은 없다.

그리고 각 프로젝트마다 실제 서버 구조 차이는 꽤나 컸다 – 내가 본 사용 서버 코드만 4개가 넘는데, 각자 다른 구조를 차용하고 있고, 기본적인 도구 수준에서나 같은 모습을 볼 수 있다. 하지만 DarkStar 는 일단 단일 구조로 나왔고, 커스터마이징이 가능하긴하지만 전체 구현 자체는 MMORPG 를 노린 것으로 보인다. 그렇기에 충분히 큰 시장을 가지지 못했다고 생각된다.

3. Java 사용의 문제

* Java GC가 신뢰할 정도로 빠른가? 분명히 Java는 서버 어플리케이션의 throughput 면에서는 만족할 만한 성능을 내고 있고, 이런 분야 – 각종 트랜잭션 기반 금융 업무, 웹 페이지 렌더링 … – 에서는 거대한 시장을 이끌고 있다.

하지만 반응 속도 면에서, 최소한 일정 수준 이상의 반응 속도가 필수적인 게임 서버에서도 이게 보장되는가?[1]  게임 서버에 가장 많은 부하가 걸릴 시간 – 메모리가 가장 모자라서 GC가 강제화라도 되어야할 시점 – 에 GC가 “한꺼번에” 일어나면 반응성의 문제가 생길 수 밖에 없다.

이건 약간 샛길로 새는 얘긴데, GC 문제는 C#에서도 역시 나타날 수 있다. 최근 런칭한 마비노기 영웅전 서버가 어느 정도 예측가능한 주기(<1일)로 비정기 점검(…을 가장한 서버 셧다운 넘기기)하는게 GC문제가 아닐까 의심 중이다. GC로 메모리가 모자라면 아주 일정한 수순을 거쳐서 서버가 죽게 된다.

1. GC로 반응(지연) 시간 증가

2. 큐에 작업이 쌓임

3. 더욱더 메모리가 필요해져서 GC 가 필요해짐

4. 악순환 시작. 실제 작업 로드를 내리는데 CPU가 사용되는게 아니라 GC에 들어감

5. 서버 사망

* 예전에 Rica 가 언급했던 서버/클라이언트 코드 공유 문제. 코드 생성기로 “우회”할 수는 있지만, 서버/클라이언트 코드 공유로 시스템 전체에서 중복을 제거하는 것도 무시못할 부분인데, 이 부분에서는 Java로 게임 클라이언트를 짜는게 거의 불가능한 상황[2] 을 생각하면 좀 암울하다.

* Java 나 C# 류의 언어는 확실히 생산성이 높다. http://www.codinghorror.com/blog/archives/000299.html 참고. 하지만 여기서 말하는 “Write his own” 항들을 게임 서버에서는 적어도 현재로는 필요하기에 사실상 다 하고 있다. 혹은 게임 서버/서버 용 라이브러리가 있거나..

4. Java 가 새 하드웨어 기술을 잘 따라잡고는 있는가?

적어도 게임 쪽에서는 아니라고 생각한다. 게임 서버는 그렇게 “현재의 기술”만 가지고 만들어지질 않는다. 한 예로 DarkStar 가 타겟으로 잡았던 MMO 시장의 한 게임을 들어보자. EVE Online 이라는 게임이 있는데, 이 게임의 서버 구조는 어느 정도 알려져 있다 (참조: EVE Online’s Server Model)

이 게임은 서버 군(혹은 shard 란 명칭으로 흔히 부르는 그것)이라는 개념이 없다. 모든 사용자는 “하나의 논리적인 서버”에 들어가는 형태다. 이걸 가능하게 한 기술은 InfiniBand 라고 부르는 네트웍 기술덕인데, CPU 버스 수준의 통신 속도+지연 시간을 보장하는 네트웍 장치다(다만 point-to-point). 이런 상대적으로 low-level 한 기술을 나오는 즉시 사용하기에는 Java 언어 자체의 변경 속도가 느리다. 그렇다고 이걸 C/C++ 로 만든 드라이버를 작성하고, 이걸 DarkStar 같은 녀석 밑단에 JNI 연결하기엔 배보다 배꼽이 커질 것 같다. 게다가 이쯤 되면 프로그래밍 모델이 우리가 흔히 보는 UMA가 아니라 NUMA 모델에 가까워진다. 그것도 non-cc NUMA… Java는 아직 NUMA 에서 GC 구현조차 실험적 상태(experimental) 이다.

또다른 예로, 32bit –> 64 bit 넘어가던 시절에 만들어진 모 게임이 있다. 이 게임의 경우 64bit 운영체제가 시장에 나올 즈음을 타겟팅해서 작성되었는데, 출시가 늦어지면서(…), .dll 의 메모리 모델이 좀 다른 점을 이용해서, 공유 메모리 비슷한 형태로(…) 32bit 응용 프로그램이 쓸 수 있는 물리 메모리보다 더 많은 물리 메모리를 쓸 수 있게 수정해서 출시했다고 한다.[3] 이런 low-level 한 시스템 프로그래밍을 DarkStar 같은데 연동하는건 절대로 쉬운 일이 아닐 거다.

물론 Java 가 새 기술을 따라잡으면, Java codebase 전체가 쉽게 이동한다는 장점은 있다. 그렇지만 Java 의 현재 가장 큰 시장은 게임 서버가 아니기에, 이 쪽으로의 이동이 빠를리는 없다 – 적어도 현재 시점에선 그렇게 보인다.

5. 이식성 문제나 하드웨어 호환성 문제는 서버 프로그래밍에서는 큰 이슈가 아니다

타겟 하드웨어와 타겟 OS를 정해놓고 작업할 수 있기에, Java 의 장점이라는 이식성/호환성 문제는 아예 이슈거리가 되질 않는다. 오히려 타겟 하드웨어에 맞는 최적화를 “손 쉽게” 쓸 수 없는 Java 의 문제가 생긴다.

6. DarkStar 는 모든걸 만들어야 했다

DarkStar 의 실패 원인 중 하나는, DarkStar 의 “기능”으로 소개한 것 중 중요한 것들은 3rd party library로 있는 애들이 많다는 거다. 혹은, 시장이 될만한 MMOG 제작사들이 이미 인-하우스 툴이 갖춰졌을 시점이라는 것.

DISCLAIMER: 이 글은 rein 의 개인적인 견해이며, 소속 기관 어디와의 연관성도 없음을 밝혀둔다. 또한 이 글의 각 사실 관계에 관해서는 현재 알고 있는 바에만 기초했으며, 이걸 사용해서 얻어지는 직/간접적인 결과에 대해서는 rein은 아무런 책임이 없음을 밝힌다.

  1. 물론 클라이언트에서 이런 반응 속도를 속이기 위한 각종 테크닉을 사용한다. 사용자의 입력에 대한 일단의 액션을 보여주고, 최종적인 결과 처리는 서버의 판단 후에 반영된다거나(이럼 RTT 만큼의 시간은 걸린다). []
  2. Java 용 게임 클라이언트 라이브러리의 수는 C++용 게임 클라이언트 라이브러리 수와 order-of-magnitude 의 차이가 난다. 질 적인 면에서는 그 성숙도에서 엄청난 차이가 날 게 틀림이 없음에야… []
  3. 이건 PAE 같은 CPU 확장 기능을 이용하면 32 bit OS 라도 16GiB~32GiB 수준의 메모리를 쓸 수 있어서 가능한 것 []

Project Dark Star 개발 중단 및 오픈 소스화

Project DarkStar 혹은 Sun game server 프로젝트의 개발 중단 공지. 제 3의 오픈소스 저장소로 이전해서 “유지”는 된다는 모양.

Sun Microsystems 의 Java 기반 MMORPG 서버 프로젝트인 Project Dark Star 가 개발 중단되고, github 와 구글 포럼으로 소스 저장소/포럼을 이전한다고 공지되었다 – via gamedev.net

Project Dark Star 의 포럼 공지에 따르면,

Today is a difficult day for all of us associated with Project Darkstar. Regretfully, we must inform our community members that Sun Labs engineering effort is no longer being applied to Darkstar development. You will hear from the individual engineers about what this means for them, but the organized lab project will not be moving forward.

One of the reasons that we developed Project Darkstar as an open source project was to allow the community to continue if the research objectives of the core team were changed. We will be maintaining the source repositories and the projectdarkstar.com site for as long as we can, but we are also investigating other homes for both the code and the supporting content.

As interesting as the technology development has been with Project Darkstar, I must say that I found the building of the community around that technology one of the most satisfying and interesting experiences of my professional life. I hope that the community will continue, and personally plan on at least observing and perhaps contributing (as an individual) to that continuation. Thank you all, and my very best wishes going forward. To the core team, I can only say that it was an honor and a privileged to work with you on this project and this technology.

간략히 요약하자면, “썬 에서는 더 이상 다크스타에 자원을 투입하지 않을 예정. 공시적인 개발은 더 없다. 웹 사이트와 소스 저장소는 가능한 유지 할 것이며, 코드와 지원 자료를 위한 공간을 찾는 중이다.”.

예전에 이 프로젝트 다크스타의 테크 데모를 봤지만 그 때 느낌으로도 “이거 망하겠네”였는데, 약 2년 반 정도 지난 지금, 프로젝트가 내려지는걸 보고있으니 기분이 좀 묘하긴하다.

내가 생각하는 실패 이유에 관해선 곧 글을 하나 더 써보기로 하겠다.

ps. 프로젝트 다크스타의 github 이름은 red-dwarf. Dark star 가 (겨우) red-dwarf가 되어버리다니… 참 의미심장하다?

Tomb Raider: Underworld

나온지 한참 지났는데도 모르고 있다가, 부랴부랴 플레이 -_-;

작년 봄의 Tomb Raider: Anniversary 에 이어 이 컴에선 두 개의 팩키지를 클리어하게 되었다.

일단 전작과 비교를 하자면,

  • 전반적으로 난이도가 쉬워졌다. 특히 마지막 스테이지에서 Natla 에게 갈 때 해야했던 점프 4종 세트[1] 의 악몽을 생각해보면, Underworld 의 점프는 적당한 재미를 주면서도 “너무한다” 싶은 면이 없어서 좋았다
  • 전투의 비중이 대폭 축소. Anniversary 에서는 개략적으로 “플랫폼 게임스러운 스테이지 진행” -> “보스전” 형태의 진행이었는데, 이번 게임은 그런 “보스전” 느낌의 뭔가는 없다. 퍼즐/점프에 집중하는 느낌.
  • 수중 스테이지 비중의 대폭 증가
  • 전체적으로 훨씬 움울한 분위기. 아무래도 배경이 “사후세계” 신화류가 되다보니 어쩔 수 없는듯?
  • 바이크를 타고 진행하는 부분이 많다

정도?

일단 수중 스테이지 비중이 늘어난 덕에 “헤맬만한 부분”이 증가했다. 아무래도 물 속이라 그런지, 탐색해야할 공간이 무지 많다 -_-;

전투의 비중이 줄어든 탓에 싫어할만한 사람도 있었지만, 아무래도 그런 류보다 퍼즐에 재미를 느끼는 나 같은 플레이어들은 반길만한 일이라고 생각한다. 다만 최종장즈음부터 묘르닐 가지고 노는건 너무 재밌었음. 신도 죽이는 망치라 그런지 대학살 모드가 된다(……)

그렇지만 전체적으로 봐서 플레이 시간이 너무 짧다. 대략 12~16시간 쯤이려나? “실패할 만한 점프”가 적고, 보스전이 없어서 그런지 볼륨감은 전작과 크게 다를 바 없는 듯 하지만, “진행을 늦추는” 역할을 할만한게 없어서 그런듯하다. 다만 바이크타고 진행하는 부분은 딱히 재미가 없었음. 괜히 의미가 적은 공간만 늘어났단 기분이 드는데;;;

총평은 별 5개 만점 기준으로 3.5개란 느낌. 꼭 해봐야할 게임은 아니지만 시간 여유가 있으면 / 혹은 라라 크로프트의 팬이라면 해볼법한 게임.

  1. 사실 벽타기 + 줄타기 + 봉 잡고 점프 등등 -_-;; []