더북(TheBook)

4.4.3 고정소수점

초고속 32비트 부동소수점 연산 능력이 최신식 컴퓨터의 주요 벤치마크 수단이 되곤 한다. 하지만 게임 시뮬레이션을 부동소수점으로 한다고 해서 float 하나를 나타내는 32비트 전부를 네트워크로 실어 보낼 필요는 없다. 흔히 쓰이는 유용한 방법으로, 보내려는 수치의 가능 범위 및 요구 정밀도를 파악한 다음 고정소수점 형식으로 변환하면 비트 수를 최소화하여 보낼 수 있다. 이를 위해 기획자나 게임 로직 프로그래머 옆에 앉아서 게임에 실제 쓰이고 있는 수치가 어떤지를 알아 두어야 한다. 일단 파악해 두어야 여기에 가장 알맞게 최적화하여 구현할 수 있을 것이다.

그 예로 mLocation 필드를 다시 살펴보자. 직렬화 코드로 이제 Y 값은 제법 압축이 되지만, X나 Z 값에는 아무 최적화도 하지 않았다. 이 필드는 각기 32비트를 꽉 채워 사용하고 있다. 기획자와 얘기해 보니 로보캣 게임에서 월드 크기는 4000×4000 단위 정도이며, 월드 중심이 좌표계의 원점 즉 (0, 0, 0)에 있다는 걸 알아냈다. 이를 해석하면 X 및 Z 축의 최솟값은 -2000이고, 최댓값은 2000이라는 뜻이다. 논의를 더 진행하고 게임 플레이 테스트를 해 본 결과 클라이언트 측 좌표 이동은 0.1 단위 정도의 정밀도면 충분하다는 것도 알아냈다. 이때 클라이언트를 제어하는 서버상 객체의 위치 값이 정확할 필요가 없다는 얘기는 아니다. 받아서 표시하는 클라이언트 입장에서 0.1 단위 정밀도로 충분하다는 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.