PCにあるアセットを 実機からホットリロードする

8a84268593355816432ceaf78777d585?s=47 DeNA_Tech
October 15, 2020

PCにあるアセットを 実機からホットリロードする

開発PC上のアセットをAssetBundleとして実機からホットリロードすることで
開発イテレーションの高速化する手法についてご紹介します。

8a84268593355816432ceaf78777d585?s=128

DeNA_Tech

October 15, 2020
Tweet

Transcript

  1. PCにあるアセットを 実機からホットリロードする 矢野 春樹, 大竹 悠人 ゲーム・エンターテインメント事業本部ゲーム事業部ディベロップメント統括部技術部第八グループ 株式会社ディー・エヌ・エー

  2. 自己紹介 2 • 矢野春樹 • 経歴 • 2012~2020.2 CyberAgent •

    2020.3~ DeNA • Unity用の内製フレームワークでリソース管理の仕組みを担当
  3. 自己紹介 3 • 大竹 悠人 (Haruto Otake) • 経歴 •

    2009~2013 dwango • 2013~ DeNA • 現在は主にUnity向けの内製ライブラリやSDK開発に従事 • 内製フレームワークから使われる、低レイヤのライブラリを開発
  4. 目次 4 DeNAのリソース管理の概要 構成技術について AssetBundleホットリロードの仕組みとデモ 1 2 3 まとめ 4

  5. DeNAのリソース管理基盤 5 リソースマネジメント機能を提供 リソースのビルド、ロード、ダウンロードの機能を一通り担う(開発中) 依存関係を踏まえたロードや参照カウンタによるメモリ管理といった基本的な機能に加えて 高速なビルドや効率的なバージョン管理などの特徴を持つ 複数の内製ライブラリを組み合わせてタイトル側が使いやすいようにフレームワーク化したもの Unity用の内製フレームワークの一機能 Unity用の内製フレームワークの一部として提供 今後開発するUnity製タイトルで共通基盤として使用する

  6. リソース管理基盤の特徴 6 高速な差分ビルド gitの差分をベースとした差分ビルドにより高速なビルドを実現 一意のキーによるロード アセットバンドル名とアセット名ではなく、一意のキーを指定してアセットをロード 効率的なバージョン管理 バージョン毎のリソースを効率的に特定して管理できる仕組み 暗号化 暗号化する対象をリソース毎に指定して高速な暗号化

    PCからのリソースのロード デバッグ時にPC上にあるリソースを実機からロードできる
  7. リソース管理基盤を実現する内製ライブラリ 7 Aladin 空間効率に優れたダウンロードリソースのリビジョン管理 & 暗号化 AssetFetcher HTTP/2によるリソースの高速ダウンロード Abdool 高速なインクリメンタル

    AssetBundleビルド & ロード VFS リモートホストをマウント可能な仮想ファイルシステム devwire USB接続されたデバイスとの TCP/IPでの通信経路となるプロキシ
  8. Aladin • 空間効率に優れたダウンロードリソースのリビジョン管理 & 暗号化 • Git風のハッシュ値ベースのリビジョン管理 • リビジョン同士を比較して、差分となるリソースを算出 •

    ダウンロード済みリソースのロードと管理 • 透過的なリソース暗号化と鍵管理 • AssetBundle自体は取り扱わず、単純なファイルアクセス手段の提供を行う • AssetBundleのLoadFromFile/LoadFromStreamとの親和性は高いAPIを用意 8
  9. Aladinのファイル構造 • リソースはその中身のハッシュをファイル名にし、Blobとして保持する • Blobと読み出しキーとなるAddressの紐付け情報は、Indexとして保持する • Indexもシリアライズ後の中身のハッシュをファイル名とし、これをリビジョン名とする 9

  10. Aladinのファイル構造 • 更新がかかっても、変化のないリソースは以前のBlobをそのまま利用する • 新たなBlobへの参照を含むIndexが生成される 10

  11. Aladinによるリソース暗号化 • Aladinはシーク可能なストリーム暗号を適用でき、ストリームとして読み出しが可能 • AssetBundleにも適用可能 • メモリ消費をキャッシュ用バッファのみに節約できる • 複数の鍵の運用をサポート •

    事前にリソースをダウンロードしても、鍵を公開するまで内容を秘匿できる • 高速な暗号化 • セクタ単位のバッファリング + unsafe実装による最適化 • 実タイトルでの利用時に暗号化によるAssetBundleロード時間の悪化がほぼない • Index/Blobの生成はPLINQで並列化 11
  12. Aladinのファイル構造の利点 • 異なるリビジョンのリソースを同時に、効率的に保持できる • リビジョン間で共通するリソースは重複しない • リソース管理が効率的に行える • ファイルの上書きが発生しないため、ファイルのバージョン確認が不要 •

    ファイルの存在確認のみでダウンロードすべきファイルを特定できる 12
  13. AssetFetcher • クロスプラットフォームなダウンロード管理モジュール • 指定したURLにあるリソースを指定したファイルとして保存するというタスクをまとめて行う • libcurlを利用してHTTP/2に対応 • HTTP/2では小さなファイルの大量にダウンロードも高速に行える •

    Aladinと非常に相性が良い • アーカイブ化をしないのでファイル数が多くなるが、ダウンロード速度を維持できる • AssetFetcherが行わないダウンロード状態の管理をAladinが効率的に受け持てる 13
  14. Abdool • 高速なインクリメンタルAssetBundleビルド & ロード • インクリメンタルAssetBundleビルド • Scriptable Build

    Pipelineを利用したカスタムビルドパイプライン • Gitの履歴とアセット依存関係をみて必要なビルド範囲を決定してからビルド • AssetBundleの構成をどのようにするか利用側に委ねる • 構成をどうするかはタイトル毎の事情も大きいため、ここを分岐点に • AssetBundleロード • Addressable Assets SystemのResourceManagerを利用 • 参照カウントによる透過的なUnload管理 • Aladinを経由した暗号化AssetBundleロード • メモリフットプリントが小さい 14
  15. Aladin + AssetFetcher + Abdool 15

  16. VFS • リモートホストをマウント可能な仮想ファイルシステ ム • ファイルシステムの仮想化・抽象化 • ディレクトリごとコンテナとして扱う • コンテナへの操作はAPIとして抽象化

    • 常にルートからの相対パスでアクセス 16
  17. VFSによるリモート共有機能 • gRPC経由でのリモート共有機能 • 任意のコンテナを外部共有できるサーバ • 共有されている任意のコンテナをマウントできるクライアント • リモートのコンテナもローカルのコンテナも透過的に扱える •

    AladinでのファイルアクセスをVfs経由で行えるアダプタも 17
  18. devwire • 開発PCとスマートフォン実機間でTCP/IP通信を行うプロキシ • USB接続を安定して高速な通信経路として利用(adb/iproxyがバックエンド) • 特性上PC上でListenしているポートへの接続が難しい(Androidでしかできない) • TCPリバースプロキシをソフトウェア実装 18

  19. Debug File System - 概要 19 実機確認のイテレーション問題 リソースを実機確認する際にはアプリに組み込んでビルドするか、 サーバにアップロード &実機でダウンロードする必要がある

    少しずつ調整しながら実機確認をしたい場合に何回もアプリをビルド orアップロード・ダウンロードする必要がある イテレーションが回しづらく開発効率が低下する ビルド ビルド ビルド
  20. Debug File System - 概要 20 PC上のリソースを直接参照してしまえばOK PCにあるリソースを直接参照できればこの問題は解決する これを実現するのが Debug

    File System USB接続したPC上のリソースを実機のストレージのリソースのように扱うことができる 参照
  21. Debug File System - 仕組み 21 VFSでPC上にファイルサーバを構築 まずPC上にVFSを使ってファイルサーバを構築する ネットワーク経由で実機から PC上のファイルにアクセス

    高速な通信を行うためにはもうひと工夫必要 devwireでPC上のサーバを参照 devwireを使ってリバースポートフォワード USB接続したPC上のファイルサーバから高速にファイルを読む
  22. Debug File System - デモ 22

  23. まとめ • DeNAでは実機からのホットリロードも可能なリソースロード基盤を実装している • 様々なライブラリを資産として積み上げた上で、統合されたパッケージを使いやすいフレームワー クとして提供している 23

  24. Twitter @DeNAxTech をフォローしよう! 技術を徹底的に磨き、積み上げ、試行錯誤を繰り返しながら、 幅広いチャレンジを続ける DeNA のエンジニア。 彼らの考え方を見て面白いと思ってもらえるように、彼らの発信について 短く要約してお伝えしてます。ぜひ Twitter

    フォローお願いします!!
  25.  本説明会及び説明資料の内容は、発表日時点で入手可能な情報や判断に基づくもの です。将来発生する事象等により内容に変更が生じた場合も、当社が更新や変更の義 務を負うものではありません。   また、本説明会及び説明資料に含まれる将来の見通しに関する部分は、多分に不確 定な要素を含んでいるため、実際の業績等は、さまざまな要因の変化等により、これら の見通しと異なる場合がありますことをご了承ください。 株式会社ディー・エヌ・エー 25