2007년 9월 17일 월요일

만들고 싶은 게임 엔진 - Part 1

총론부터 이야기 해보자.
게임엔진은 게임을 잘 만들 수 있도록 해주는 기술 기반이다.
게임엔진이 개발 프로세스를 제한할 수는 있으나, 발목을 잡아서는 안된다.
그 제한의 테두리안에서 무한한 자유를 부여할 수 있어야 한다.
그 테두리를 만드는 것은 많은 경험축적과 통찰력에 의해서만 만들어진다.
경험축적은 누구나 할 수 있다.
하지만, 통찰력을 얻는 것은 쉬운일이 아니다.
통찰력을 얻으려면 많이 생각하고 많이 실험하고 그러한 반복을 여러번 해야 한다.
실험하기 어렵다면 시뮬레이션할 수 있는 능력이 되어야 한다.
수 많은 변수들이 머리속에서 한꺼번에 돌릴 수 있는 능력이 되어야 한다.
엔진이란게 힘든 이유는, 공통 분모를 찾아야 한다는 것이다.
Commonality!
궁극적인 Commonality는 Zero이다!
하지만, 어떤 Concept가 정해지면, Zero에서 One으로 Two로 하나하나 뭉쳐서
Commonality를 지원하는 구성체로 만들 수 있게 된다.
그리고 공통분모 위에 게임을 개발 할 수 있어야 하는 것이다.

엔진의 조건들을 살펴보자.
일단, 플랫폼 파트와 로직 파트가 있을 것이다.
플랫폼 파트는 시스템 아키텍쳐를 숙지하고, 그것을 최대한 활용하면서
적은 리소스(CPU,메모리)를 쓸 수 있도록 디자인 되고,(즉, 최적화가 되어야 한다.)
확장성과 생산성을 고루 갖춰야 한다.
안정성은 말할 것없이 중요한 요소이다.

서버엔진과 클라이언트엔진의 중요한 차이점은
플랫폼의 차이에서 기인한다.
서버는 서비스 머쉰의 아키텍쳐를 최대한 활용하면 된다.
클라이언트는 유저들의 다양한 머쉰의 아키텍쳐를 모두 지원하면서,
안정성,최적화성이 유지되어야 한다.
서버는 대부분 하나의 머쉰에 타겟에 맞춰서만 최적화되면 되지만,
클라이언트는 여러대의 머쉰에서 잘 돌도록 최적화 되어야 한다.
서버는 그래픽이 없지만, 클라이언트는 그래픽이 있다는 점이 가장 큰 차이점중에 하나이다.
그러나, 나중에 한 20년후? 그때에는 서버에서 렌더링하는 시대가 올수도 있다.
예를 들면, 아주 멋진 그림을 서버 머신에서 렌더링하고, 그 그림을 스트리밍해서
클라이언트들이 다운로드 받는다면, Thin Client를 구현할 수 있게 된다.

서버와 클라이언트를 연결하는 네트워킹.
클라이언트와 클라이언트를 연결하는 P2P네트워킹.
네트워킹 또한 중요한 요소이다.
프로세스간 통신,머신간 통신으로 이해하면 쉽다.
그 통신 방식이 하나로 통일되고 일반화된다면,
생산성이 향상될 것이다.
안정성과 확장성 또한 향상된다.

모든 기술 요소를 이와 같이
생산성,안정성,확장성,최적화성 입장으로 등급을 매겨서 평가할 수 있다.
그리고, 기능성의 dependency graph를 그리고,
commonality의 root부터 구현한다면,
대략 순서와 일정을 만들 수 있을 것이다.

댓글 없음:

댓글 쓰기