[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは

阿部剛寿氏(RAD Game Tools日本代表)
 2016年7月15日,ゲーム向けのミドルウェアをツールをテーマにした「Game Tools & Middleware Forum 2016」(以下,GTMF2016)が都内で開催された。本稿では,GTMF2016のセッションの中から,ゲーム向けに開発されたデータ圧縮ミドルウェア「Oodle」(ウードルと読む)を取り上げてみたい。
 データ圧縮という話題はとんでもなく地味なものだが,実はゲームにはなくてはならない存在で,なおかつゲーマーのゲーム体験をも左右する重要な存在だったりもする。セッションで語られたOodleの特徴を紹介してみよう。


解凍速度に重点を置いた複数のコーデックを提供するOodle


米国に本拠を置くRAD Game Tools。開発者自らが迅速にサポートを行う体制を整えているそうだ
[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは
 Oodleは米ワシントン州カークランドに拠点を置くRAD Game Toolsが提供しているミドルウェアだ。ゲーム用動画フォーマット「BINK」で知られている会社だが,同社の日本代表を務める阿部剛寿氏によると,RAD Game Toolsの開発者は全員がゲーム開発経験者で,その経験を活かしてゲームに必要とされる機能をミドルウェアに実装していることが同社製品の大きな特徴になっているそうだ。

 また,ユーザーの質問には開発者自らが24時間以内に回答する,という社内ルールを設けており,日本からの日本語の質問に関しても翌営業日以内に開発者からの回答が得られる体制を整えているそうだ。

Oodleにはデータ圧縮とネットワーク圧縮の2つがあり,それぞれ別ライセンスである。また,ライセンス体系も両者でちょっと違う
[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは
 RAD Game Toolsは現在,ミドルウェア5製品をラインアップしているが,今セッションのテーマは,データ圧縮/解凍を行う「Oodle」という製品である。Oodleにはファイル/データを対象にした「Oodleデータ圧縮」と,ネットワークパケットの圧縮を行う「Oodleネットワーク圧縮」という2種類のミドルウェアがある。
 ライセンスは,Oodleデータ圧縮はゲームタイトルごとに1ライセンス,一方のOodleネットワーク圧縮はプラットフォームごとに1ライセンスというライセンス体系になっているという。対応プラットフォームはWindows,Linux,PlayStation 3/4,Xbox 360,Xbox One,iOS,Androidで。PlayStation Vitaには対応していないが「開発者によると対応させるのは簡単だそうなので,要望があれば対応するかもしれない」(阿部氏)とのこと。一方,WiiU,Nintendo 3DSには現在のところ対応する予定がないそうだ。

 まず,データ圧縮についての説明がされた。Oodleデータ圧縮には5種類のコーデックがあり,用途に合わせてコーデックが選べる仕組みになっているという。それぞれのコーデックには下のスライドのような特徴があるが,全体としては解凍速度に重点を置いているという。というのは,「ゲーム中にクライアント側でリアルタイムにデータ圧縮を行うことはあまりないだろう」という理由からだ。

Oodleデータ圧縮の5種類のコーデックと,圧縮データの読み込み速度を表すグラフ。グラフのほうがちょっと分かりづらいが,縦軸が何倍速く読み込めるか,横軸がデータ量で双方とも対数目盛りになっている。ZLIBなどよく利用される圧縮アルゴリズムと比較して「上位の3つがOodleデータ圧縮のコーデックになっている」(阿部氏)
[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは

 Oodleデータ圧縮にはスライドに示されている5種類のコーデックがあり,さらに現在,「Oodle Mermaid」というコーデックを開発中だそうで,それが完成すれば6種類のコーデックが選択できるようになるわけだ。ユーザーは必要とされるデータ圧縮率や,解凍速度といった要件から適切なコーデックが選択できるという。

さまざまなデータで圧縮率を比較したグラフ。一般的なZLIB,LZMAとOodleデータ圧縮の3つのコーデックを比較したもの
[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは
同様に解凍速度を比較したグラフ。中でもoohcKrakenの解凍速度が圧倒的なことが分かる
[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは

 解凍に関しては並列化も可能とのことで,たとえばプレーヤーがゲームをしている最中に裏でデータの解凍を行うといったことも容易にサポートできるという。

実際にゲームで使用した場合のパフォーマンスを比較したグラフ。decompが解凍時間,loadはロード時間,sumはI/Oを並列化した場合の読み込み時間,I2sumは並列化した場合のトータル時間。縦軸はミリ秒だ
[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは

リアルタイムデモの画面。4種類のコーデックを比較しているが,デコード(解凍)時間ではOodle Selkieがトップに立っていることが分かる
[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは
 実際にリアルタイムのデモも披露されたが,Oodleデータ圧縮はエンコード時間がややかかるものの,デコードはきわめて高速ということがデモでも示されていた。ちなみに,デモには開発中のコーデックというOodle Mermaidも含まれている。


Unreal Tournament 4に採用されているOodleネットワーク圧縮


 続いてOodleネットワーク圧縮だが,こちらはUDPおよびTCPに対応するリアルタイムの圧縮ライブラリである。特徴として挙げられるのは,まずきわめて高い圧縮率を実現し,ネットワーク帯域を大きく削減できるという点だ。

Oodleネットワーク圧縮はきわめて高い圧縮率を誇り,ネットワークトラフィックを大幅に削減できるという。このグラフではZLIBおよびハフマン圧縮とOodleネットワーク圧縮を比較している
[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは

 さらに辞書を使った圧縮にも対応している。高頻度に現れるデータの辞書を作成してクライアントに配布すれば,より高い圧縮が可能になる仕組みである。辞書の学習を進めていけば圧縮をさらに高めることができるが,辞書サイズが大きくなってしまうので,バランスを考えて辞書を利用するということになるだろうと阿部氏は説明していた。

辞書サイズとデータ圧縮率を示したグラフ。辞書を大きくすれば圧縮が高まるが,辞書を大きくしすぎるのも問題なので,バランスを考えて利用することになるそうだ
[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは

メモリ使用量をZLIBと比較したグラフで横軸がコネクション数,縦軸がメモリ容量。UDPはコネクションごとのメモリを必要としないのでコネクション数が増えても使用メモリは増えない
[GTMF2016]ゲームのために開発されたデータ圧縮ミドルウェア「Oodle」とは

 Oodleネットワーク圧縮はメモリ使用量の少なさも特徴だそうだ。UDPに関してはコネクションごとのメモリを確保しないため,コネクションが増えてもメモリ使用量は増えない。また,TCPもメモリ使用量はきわめて小さいという特徴があるそうだ。

 Oodleネットワーク圧縮は,阿部氏によるとEpic GamesのUnreal Tournament 4に採用されているという。「そのソースコードをGitHubから入手できるという情報を得た」(阿部氏)と語っていた。Epic GamesのGitHubはユーザー登録が必要なので,筆者はまだ未確認だが,興味がある方は参照してみるとよいのではないだろうか。

 以上,データ圧縮ミドルウェアOodleの概要を紹介してみた。かなり地味なものだが,ゲーマーにとっては待ち時間を減らしてくれたり,ネットワークのラグを軽減するという意味でゲーム体験を大きく左右する重要なミドルウェアでもある。ゲーム開発者であれば,データ圧縮のみならず,ネットワークトラフィックの圧縮に対応したミドルウェアの存在は注目してもよいのではないだろうか。一般ゲーマーも優れたデータ圧縮がゲーム体験を支えているということを,ちょっと意識しておくとゲームをより楽しむことができるかもしれない。

RAD Game Tools公式サイト

GTMF 2016 Tokyo公式サイト