5.8K Views
January 17, 24
スライド概要
CEDEC2018 (Computer Entertainment Developers Conference 2018)で行われた講演
『「モンスターハンター:ワールド」におけるファイルI/O最適化』
で使用されたスライドです。
講演概要は以下のサイトをご覧ください。
https://cedec.cesa.or.jp/2018/session/detail/s5adef79d55c44.html
※CEDECの資料公開サイトCEDiLでも本資料が公開されています。
https://cedil.cesa.or.jp/
株式会社カプコンが誇るゲームエンジン「RE ENGINE」を開発している技術研究統括によるカプコン公式アカウントです。 これまでの技術カンファレンスなどで行った講演資料を公開しています。 【CAPCOM オープンカンファレンス プロフェッショナル RE:2023】 https://www.capcom-games.com/coc/2023/ 【CAPCOM オープンカンファレンス RE:2022】 https://www.capcom.co.jp/RE2022/ 【CAPCOM オープンカンファレンス RE:2019】 http://www.capcom.co.jp/RE2019/
「モンスターハンター:ワールド」におけるファイルI/O最適化 Sponsored by: RAD Game Tools, Inc.
Oodle とは? * Oodle データ圧縮は RAD ゲームツールズ が開発・提供している SDK で パフォーマンスの異なる 4 種類の ロスレス コーデックを用意しています。 Kraken Leviathan Mermaid Selkie - 高圧縮 + 高速解凍 スタンダード的コーデック - Krakenを超える高圧縮率、替りに解凍速度はやや遅くなります。 - 超高速解凍 + 高い圧縮率 - Mermaid を超える高速解凍。 LZ4 よりさらに高速・高圧縮率 * Oodle は ほぼ全ての現行ゲームプラットフォームをサポートしています。 PS4、Xbox One、Nintendo Switch、Windows、Mac、Linux、iOS、Android
「モンスターハンター:ワールド」におけるファイルI/O最適化 株式会社カプコン 技術研究開発部 技術開発室 技術推進チーム 矢萩 太郎
「モンスターハンター:ワールド」 とは? 4 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
なんやそれ? • 「モンスターハンター:ワールド」 – 全世界向けハンティングアクション – PlayStation4,XboxOne,Steam – 全世界1000万本出荷! – 本講演はPS4/XB1施策について 5 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
自己紹介 6 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
自己紹介 • 2005年 株式会社カプコン入社 • カプコン内製エンジン「MT FRAMEWORK」に携わる – 主にPlayStation3(SPU最高☺) • MT FRAMEWORKを使い、関わったタイトル – ドラゴンズドグマ、ドラゴンズドグマオンライン – ロストプラネット、ロストプラネット2 – バイオハザード5、バイオハザード6 • 今回は上記の経験を活かしてMHWのI/Oを担当 7 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
アジェンダ • 「モンスターハンター:ワールド」にOodleを採用した理由 運用面と技術面 • 内部実装やツール、ユースケースについて データ圧縮ツールの作成 デイリーケースとサブミッションケースの使い分け • 実際のゲームデータを使った圧縮率の違い – ZlibとZstdとOodleを完全比較します(!) • 一番気になるポイント☺ 8 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
「モンスターハンター:ワールド」 Oodle採用について 9 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
Oodleを採用した理由(技術面) • カプコン内製エンジン「MT FRAMEWORK」がベース – アーカイブにZlibを使っていた • 「モンスターハンター:ワールド」ではアーカイブ方法を一新したい – ちょうどコーデックを何にするかで悩んでいた時にOodleを見つけた • 他のコーデックとの比較 – Oodle vs Zlib vs Zstd • 圧縮率の点でOodleに軍配があがった☺ 10 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
Oodleを採用した理由(運用面) • マルチプラットフォームへの対応 – PS4/Xbox One/Windows PCのすべてのプラットフォームで 実装、運用が統一されていることが重要 • 多数のタイトルでの実績に裏付けされた高い信頼性 – すべてのプラットフォームでゼロから実装して十分なチェックをするだけの 時間的猶予がない – オープンソースソフトウェアにも有用なものはあるが、 もしもの際の保証、サポートが何もなく、使用する側の自己責任 • 安い! – プログラマの実装コスト、社内QAコスト、長期保守コストを考慮すれば破格 11 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
Oodleのインテグレート • LIBファイルを追加してヘッダーインポートするだけ – 展開関数の置き換えで終了 – インテグレートに使ったソースコードは約2行☺ • 圧縮ツール – C++で作成。1日で終わりました☺ 12 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
「モンスターハンター:ワールド」 Oodle内部実装 13 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
I/Oレイヤー概要図 「モンスターハンター:ワールド」 エンジンのI/Oレイヤー QA デイリーROM 開発時 ファイル 連結 TOC 連結データ QA 製品版 OODLE使用 Windows Tool 圧縮データ 圧縮 ※TOC:ファイルの目次データ ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED. 14
解凍レイヤーについて 「モンスターハンター:ワールド」 エンジンのI/Oレイヤー 展開レイヤー Oodleで展開 TOC 連結データ 圧縮データ エミュレーション ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED. 15
圧縮にはOODLEを採用 • データは256KiB毎に分割、後に圧縮 – 展開速度が1ms程度で最も効率が良い – 256KiBのほうが64KiBより高圧縮 Oodle使用 256KiB TOC 分割 連結データ 256KiB 256KiB 256KiB 256KiB 圧縮 圧縮データ 16 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
Oodleの圧縮ツールについて Windows Tool 17 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
Oodleの圧縮ツールについて C++コンソールアプリ 256KiB FileCompressor(12スレッド並列) Thread Thread Thread Thread 256KiB Thread Thread 256KiB Thread Thread Thread Thread Thread Thread 256KiB 256KiB 圧縮ブロック 出力 圧縮データ 256KiB *このツールでの圧縮結果や時間はのちにご説明します 18 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
Oodleによる展開について Console 19 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
ファイルの展開 • 圧縮ブロックをブロック単位で逐次展開 – リード、展開、リード、展開、・・・・・繰り返し 読み込みたいファイル 展開時間 256KiB:1ms 圧縮データ 展開データ 256KiB リード 展開 圧縮ブロ ック 展開データ 256KiB リード 展開 圧縮ブロ ック 展開データ 256KiB 展開データ 256KiB リード 展開 圧縮ブロ ック リード 展開 圧縮ブロッ ク 20 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
実際のデータを圧縮した結果 Zlib vs Zstd vs Oodle 21 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
オリジナルデータ:29,858,834KiB • OODLE:DAILY COMPRESS:18,258,475KiB(61%)(※:Kraken Fast) – • OODLE:MAX_COMPRESS:17,749,699KiB(59%)(※:Kraken Opt3) – • ConvertTime:209 sec. Compress Count:114537 NO Compress Count:2100 ZSTD:DAILY COMPRESS:19,940,870KiB(67%) – • ConvertTime:105 sec. Compress Count:114374 NO Compress Count:2263 ZLIB:MAX_COMPRESS:19,099,416KiB(64%) – • ConvertTime:1014 sec. Compress Count:113281 NO Compress Count:3356 ZLIB:DAILY COMPRESS:19,496,458KiB(65%) – • ConvertTime:117 sec. Compress Count:112917 NO Compress Count:3720 ConvertTime:119 sec. Compress Count:100700 NO Compress Count:15937 ZSTD:MAX_COMPRESS:18,346,565KiB(61%) – ConvertTime:524 sec. Compress Count:112695 NO Compress Count:3942 ※:12スレッド並列。同一SSDへの入出力 22 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
64KiBブロック圧縮 • 64KiBブロック • OODLE:DAILY COMPRESS:19,711,330KiB – • ConvertTime:165 sec. Compress Count:428149 NO Compress Count:38396 OODLE:MAX_COMPRESS:18,240,903KiB – 256KiBブロック • OODLE:DAILY COMPRESS:18,258,475KiB • (※:Kraken Fast) ConvertTime:117 sec. Compress Count:112917 NO Compress Count:3720 OODLE:MAX_COMPRESS:17,749,699KiB – (※:Kraken Opt3) ConvertTime:1047 sec. Compress Count:442418 NO Compress Count:24127 • – (※:Kraken Fast) (※:Kraken Opt3) ConvertTime:1014 sec. Compress Count:113281 NO Compress Count:3356 23 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
Leviathan • モンスターハンター:ワールドには入っていませんが、2.6のLeviathanを同じデータで試してみました • OODLE:DAILY COMPRESS:17,600,138 (Leviathan Fast) – • ConvertTime:170 sec. Compress Count:114675 NO Compress Count:1962 OODLE:MAX_COMPRESS:17,037,968(Leviathan Opt4) – ConvertTime:3743 sec. Compress Count:114704 NO Compress Count:1933 – 1時間!!WOW! • Kraken • OODLE:DAILY COMPRESS:18,258,475KiB – • ConvertTime:117 sec. Compress Count:112917 NO Compress Count:3720 OODLE:MAX_COMPRESS:17,749,699KiB – (Kraken Fast) (Kraken Opt3) ConvertTime:1014 sec. Compress Count:113281 NO Compress Count:3356 24 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.
ご清聴ありがとうございました • おわりです。 25 ©CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.