더북(TheBook)

4.4.2 엔트로피 인코딩

엔트로피 인코딩(entropy encoding)은 정보 공학 주제 중 하나인데, 데이터 압축에 있어 출현하는 데이터의 예측 가능성 정도가 얼마나 높고 낮은가에 따라 압축률이 달라진다는 이론이다. 이 이론에 따르면 기댓값에 가까운 값을 지닌 패킷일수록 그렇지 않은 패킷보다 적은 정보(엔트로피)만 포함한다고 한다. 이 때문에 예상에 보다 부합하는 값을 보내면 예상 밖의 값을 보낼 때보다 적은 수의 비트로 인코딩해 보낼 수 있다.

그렇지만 대개의 경우 CPU 자원은 실제 게임 시뮬레이션에 써야지, 압축을 최적화하겠답시고 패킷의 엔트로피 분석에 쓰는 건 바람직하지 않아 보인다. 그렇다 하더라도 간단한 방법으로 제법 효율적인 엔트로피 인코딩을 할 수 있는 경우가 있다. 특정 값이 다른 값보다 빈번하게 등장하는 멤버 변수를 직렬화할 때가 그렇다.

예를 들어 RoboCatmPosition 필드를 보자. X, Y, Z로 구성된 Vector3이다. XZ는 고양이의 지표면 기준 위치 값이고 Y는 높이 값이다. 위치를 직렬화하는 단순한 방법은 다음과 같을 것이다.

void OutputMemoryBitStream::Write(const Vector3& inVector)
{
    Write(inVector.mX);
    Write(inVector.mY);
    Write(inVector.mZ);
}

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