$30 off During Our Annual Pro Sale. View Details »

IDOLY PRIDEにおけるAssetBundleビルドパイプラインについて

IDOLY PRIDEにおけるAssetBundleビルドパイプラインについて

2022/05/20 CA.unity#4より

IDOLY PRIDEにおけるアセット管理とAssetBundleビルドフローや、それらを実現するために採用した技術について紹介します。

QualiArts

May 23, 2022
Tweet

More Decks by QualiArts

Other Decks in Technology

Transcript

  1. IDOLY PRIDEにおける
    AssetBundleビルドパイプ
    ラインについて
    QualiArts 渡部聡

    View Slide

  2. 1.自己紹介
    2.AssetBundle
    3.Assetの種類と管理方法
    4.AssetBundleビルドパイプライン
    5.まとめ

    View Slide

  3. 自己紹介

    View Slide

  4. 渡部聡
    •2014(AmebaGames)~2022(QualiArts )
    •UnityEngineer
    •UI系・ビルド系

    View Slide

  5. AssetBundle

    View Slide

  6. AssetBundleとは
    •asset(texture,audioclip,etc)をbundleしたもの
    •Unity特有の概念では無い(UEとかcocosとかにもある)
    •UnityにおいてはAssetBundleクラスとして扱う
    •アプリとは分離したもの(別ファイル化)として扱うことができる
    •AssetBundleのメリット
    アプリとは別に後からダウンロードさせられる
    運用で新キャラ追加!などが発生してもアプリを更新せずにすむ

    View Slide

  7. Assetの種類と管理方法

    View Slide

  8. Assetの種類
    •動画
    •カード絵
    •SDキャラ
    •その他UI系素材
    •キャラボイス・SE
    •3Dキャラ・背景・キャラモーション・シェーダー
    •ライブデータ(タイムライン・楽曲・エフェクト)

    View Slide

  9. Assetの種類
    •動画
    •カード絵
    •SDキャラ
    •その他UI系素材
    •キャラボイス・SE
    •3Dキャラ・背景・キャラモーション・シェーダー
    •ライブデータ(タイムライン・楽曲・エフェクト)
    SVNとGoogleDriveの併用

    View Slide

  10. SVNとGoogleDrive
    SVN GoogleDrive
    学習コスト 高 低
    GUI どれも微妙(Mac) パソコン版Googleドライブ
    (旧DriveFileStream)
    が使いやすい
    コミットしやすさ stagingの概念とか面倒 ファイルを置くだけ
    (意図せぬ移動が発生したり •••)
    ログの追いやすさ 普通 普通
    コミットの戻しやすさ File/Dir単位でも巻き戻しが可能 File単位の巻き戻しは簡単
    全体を特定のcommit時点に戻す
    とかは難しい

    View Slide

  11. SVNとGoogleDrive
    SVN GoogleDrive
    学習コスト 高 低
    GUI どれも微妙(Mac) パソコン版Googleドライブ
    (旧DriveFileStream)
    が使いやすい
    コミットしやすさ stagingの概念とか面倒 ファイルを置くだけ
    (意図せぬ移動が発生したり •••)
    ログの追いやすさ 普通 普通
    コミットの戻しやすさ File/Dir単位でも巻き戻しが可能 File単位の巻き戻しは簡単
    全体を特定のcommit時点に戻す
    とかは難しい
    普段使いには
    Driveが圧倒的に便利
    不具合調査とか特殊な状況
    ではsvnの機能が欲しくなる

    View Slide

  12. Assetの種類
    •動画
    •カード絵
    •SDキャラ
    •その他UI系素材
    •キャラボイス・SE
    •3Dキャラ・背景・キャラモーション・シェーダー
    •ライブデータ(タイムライン・楽曲・エフェクト)
    基本的にログとか見ない
    稀にログを見たり戻したり

    View Slide

  13. Assetの種類
    •動画
    •カード絵
    •SDキャラ
    •その他UI系素材
    •キャラボイス・SE
    •3Dキャラ・背景・キャラモーション・シェーダー
    •ライブデータ(タイムライン・楽曲・エフェクト)
    基本的にログとか見ない
    稀にログを見たり戻したり
    ・・・という理由は全て後付けで、次のプロジェクトではSVNを捨ててplastic scmにする予定だったりも

    View Slide

  14. AssetBundle
    ビルドパイプライン

    View Slide

  15. アセットの取り込み(旧)
    AssetBundle
    Asset checkout
    (rclone)
    生成
    Asset checkout
    metaコミット
    metaコミット
    (rclone)

    View Slide

  16. アセットの取り込み(旧)
    AssetBundle
    生成
    Asset checkout
    metaコミット
    (差分が少なければ)svnは高速
    Asset checkout
    (rclone)
    metaコミット
    (rclone)

    View Slide

  17. アセットの取り込み(旧)
    AssetBundle
    生成
    Asset checkout
    metaコミット
    (差分が少なければ)svnは高速
    (差分が少なくとも)rsyncは遅め
    Asset checkout
    (rclone)
    metaコミット
    (rclone)

    View Slide

  18. アセットの取り込み(新)
    AssetBundle
    assetを同期
    (rclone)
    checkout
    生成
    metaコミット
    •Driveの使いやすさはそのまま
    •rcloneの重さは(少し)軽減
    •ログが一元管理できてるかも

    View Slide

  19. ビルドの並列化
    •iOS, Android, OSX, Windows, WebGLの5プラットフォーム用にビルドしている
    •マシンは社内MacProサーバー1台 RAM192GM, 16Core
    •workspaceは常にマシン上に常駐させる
    •並列化はJenkinsのPipeline Scriptで実装
    •ビルドの実行自体は定期orクリエイターorプランナーが実行する
    •↓下の「Unity」のところで5プラットフォームビルド

    View Slide

  20. ビルド処理の実装方針
    •AssetBundleビルドパイプラインAPIのどれを使うか?
    UnityEditor.BuildPipeline レガシー
    Addressables イマドキの
    ScriptableBuildPipeline Addressablesの中身
    •とにかく早い段階でビルド環境を整えたい
    AssetBundleを使えないプロジェクトは大量のAssetをコミットされやすい傾向
    大量のAssetでプロジェクトが膨れるとcloneやimportで大量の時間を浪費する
    •UnityEditor.BuildPipelineを採用 ビルド所要時間※2019年時点

    View Slide

  21. レガシーBuildPipelineの問題点
    •プロジェクト初期ではUnityEditor.BuildPipelineを採用・・・しかし問題が発覚
    Texture Streaming非対応
    AssetBundle単位で圧縮と無圧縮を分けたいができなかった
    そして今更レガシーなAPIとか・・・
    •無圧縮なAssetBundleが必要になる状況
    動画(mp4)をAssetBundleに同梱したかった
    Androidでは圧縮されたAssetBundleから動画を読み出せない
    •ScriptableBuildPipelineならどちらも解決できる -> 採用

    View Slide

  22. ビルド処理の実装
    •SBP (ContentPipeline)を使う
    •特定の命名規則AssetBundleは無圧縮
    •実装詳細
    1. アセットのバリデーションをする
    2. BundleBuildParametersを継承して圧縮指定
    3. ContentPipeline.BuildAssetBundlesを実行
    4. 成果のAssetBundleを暗号化
    •アセットのバリデーション
    Importerを通っているか
    Meshに必要な情報が格納されているか
    etc etc..
    •AssetBundleの暗号化
    高速かつChunk読み可能なオレオレ実装
    しかし脆弱

    View Slide

  23. 余談:アセット確認環境
    •アセット確認専用アプリを準備
    ゲーム用と独立してて軽い
    - iOSアプリ
    - Androidアプリ
    - ブラウザ版(WebGL)
    •WebGL版はたまに便利
    真の姿はiOS/Androidアプリで見る必要あり

    View Slide

  24. まとめ

    View Slide

  25. まとめ
    •Asset管理にはSVNとGoogleDriveを採用
    •AssetBundleビルドにはScriptableBuildPipelineを採用
    •クリエイターとプランナーチームがビルドを実行

    View Slide

  26. ありがとうございました

    View Slide