Multiplayer Game Programming読本

multiplayer game programmingという本を気になる部分だけつまみ食いして読んでいる 今日はChapter 4にあった"Compression"をまとめる 英語の見出しは本文のタイトルを引用し、日本語の見出しは私がみやすさでつけたもの Compression マルチプレイのリアルタイム性のあるゲームであればあるほど、通信するオブジェクトと頻度が増え必要な通信帯域が増加する そのため、可能な限り無駄な情報は削減して通信を行う必要がある この章では低レベルな圧縮方法の紹介を行っている Sparse Array Compression 本で扱っているサンプルゲームでは名前を128byteまで許容されている。 名前の配列に128byteの配列を利用するのがプログラムとしては妥当だが、128byte使い切らないユーザーも含まれるため不要なスペースができてしまう。 そこで、名前長 + 名前というバイト列にする事で余計なスペースを除去するという圧縮方法 Entropy Encoding 以下の章ではオブジェクトの方向と回転を表す7つのfloatの圧縮方法について記載されている 参考書ではbyte配列を渡す想定をしているが、理解を助けるために下記のような構造体の形式で書いていく // 合計 28byte type XXX struct { type Location struct { x float y float z float } type Quartunion struct { qx float qy float qz float qw float } } 頻出する状態には短いデータを与えましょう。という内容 サンプルゲームではキャラがほとんどY=0のポジションにいる特性を利用してY=0ならばtrue, そうでなければfalse+floatの情報を送っている // 合計 24byte + 1bit type XXX struct { type Location struct { x float ybit bool y float z float } type Quartunion struct { qx float qy float qz float qw float } } Fixed point Locationの他の2軸の圧縮をする この内容はゲームの特性と相談になるが、整数値にすることでサイズを減らそうというもの 本では縦横に40000(おそらくpx)が表現できれば良いため、int16でよいという内容だった ...

May 11, 2022 · 2 min · motoki yoan