assetbundle と texturecompression のおはなし
DESCRIPTION
第18回 Unity 勉強会 にて発表しました。TRANSCRIPT
![Page 1: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/1.jpg)
AssetBundle と TextureCompression のおは
なし〜 Mobile Platform に於けるリソース管理〜
株式会社キッズスター森 哲哉
![Page 2: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/2.jpg)
こんばんは!
•Unity 、使ってますか!?
•Unity 、楽しいですね!
•今日は AssetBundle と Texture 圧縮について語りに来ました!!
![Page 3: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/3.jpg)
と、その前に…。
![Page 4: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/4.jpg)
Who am I ?
•“ 森 哲哉” と申します。
•a.k.a. もんりぃ / T: @monry / F: 本名
•29 歳 / ♂ / O 型 / 天秤座 / 既婚 / 趣味 : 合唱
•趣味は「お酒」と「合唱」です。
![Page 5: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/5.jpg)
Who am I ?
• “ 株式会社キッズスター” って会社で働いてます。
• 未就学児〜小学生のお子さまをお持ちのファミリーをターゲットにした知育 / 教育に関わるアプリ・サービスを展開しております。
こえほん 森のえほん館 なりきり !!ごっこランド
パズル & テイルズ
![Page 6: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/6.jpg)
レジュメ
•AssetBundle について
•TextureCompression について
![Page 7: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/7.jpg)
前提
• 大前提として、 2D のお話しです!
• もっと言うと NGUI に限定してます
• iOS / Android なモバイル環境
• Unity 4.x (Pro) / NGUI 2.6.x
• Pro 版じゃないと AssetBundle を Build できない
• AssetBundle の話が 8 割です :-P
• 間違ったこと言うかも知れませんが、ツッコミ大歓迎です!!
![Page 8: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/8.jpg)
AssetBundle の概要
• そもそも AssetBundle って…?
• Asset を Bundle したモノ
• 素材を纏めて一つのファイルとして扱うための技術
• よくある初回ダウンロードとか
• ソシャゲのカードの画像とか
![Page 9: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/9.jpg)
AssetBundle の概要
•こんなの。 ( 宣伝じゃないですよ?w )
![Page 10: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/10.jpg)
AssetBundle の長所
•Unity が解釈出来るモノなら詰め放題
•ただし、 iOS は JIT 実行不可
•WWW クラスを経由して取得
•キャッシュとかよしなにやってくれる
•バージョニングにも対応
![Page 11: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/11.jpg)
AssetBundle の短所
• 基本的にサーバ必要
• Content-Type: application/vnd.unity を要返却
• ファイル名ユニーク
• basename で判定される
• ディレクトリ掘って管理とか㍉
• プラットフォーム毎に別ファイル
![Page 12: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/12.jpg)
AssetBundle の運用
•じゃあ、その辺踏まえて、どうやるの?ってなお話しを。
•ここから先は、弊社での事例をベースに進めます。
•一つでも参考になるモノがあれば幸いです。
![Page 13: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/13.jpg)
AssetBundle の環境
•初回リソースダウンロード
•2 回目以降は Cache 任せ
AmazonAmazonS3S3
AmazonAmazonS3S3
AmazonAmazonCloudFrontCloudFront
AmazonAmazonCloudFrontCloudFront
AppApp(Cache)(Cache)
AppApp(Cache)(Cache)
AppApp(Memory)(Memory)
AppApp(Memory)(Memory)
AmazonAmazonS3S3
AmazonAmazonS3S3
AmazonAmazonCloudFrontCloudFront
AmazonAmazonCloudFrontCloudFront
AppApp(Cache)(Cache)
AppApp(Cache)(Cache)
AppApp(Memory)(Memory)
AppApp(Memory)(Memory)
![Page 14: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/14.jpg)
AssetBundle の環境
• チーム開発するなら git で管理
• バイナリだから微妙っちゃ微妙
• Asset Server ( 要 Team License) もアリか
• Editor Script 必須
• ググればいっぱい転がってます
• この勉強会の過去のセッションにも
![Page 15: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/15.jpg)
AssetBundle の環境
• iOS / Android の両方に対応させる場合、Team License 買っとけ!
•BuildPipeline.BuildAssetBundle() の際に Import Asset が走るため、リソース数が多いとめっちゃ待つ。
•ので、 Cache Server 必須。
![Page 16: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/16.jpg)
AssetBundle の設計
•粒度 ( 弊社の場合 )
•Atlas / Texture / AudioClip を個別にビルド
•1 画面 (≠ シーン ) 内に最大 10個を目安
•初回 DL時のキャッシュに結構依存• どうにかしたいんだけどね…。
![Page 17: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/17.jpg)
AssetBundle の設計
•更新頻度 ( 弊社の場合 )
•原則的に iOS の申請スケジュールが基準
•そもそも更新頻度が高いモノは API とか経由した方が管理が楽
•BASE64 なテキストを食わせるとか
![Page 18: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/18.jpg)
AssetBundle の設計
• 初回 DL するネタ一覧 ( 弊社の場合 )
• 敢えてアプリ内 (Assets/Resources/) に .txt (TSV な TextAsset) を保持
• ファイル名 <TAB> バージョン <LF>
• 毎回起動時にこのリストをチェック
• WWW.LoadFromCacheOrDownload に任せて Cache が有するバージョンと異なるなら DL
![Page 19: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/19.jpg)
AssetBundle の設計
•ファイル名 ( 弊社の場合 )• プラットフォーム名 /種別 @ シーン名 @ 画面名 @ ファイル
名 .unity3d
•プラットフォーム名は iOS, Android, Editor など
•種別は Atlas, AudioClip, Texture など
![Page 20: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/20.jpg)
AssetBundle の構築
•Editor Script でがんばる。
Supporting Files/ 種別 / シーン名 / 画面名 / ファイル名
この構造決め打ちでディレクトリ内のファイルを走査
![Page 21: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/21.jpg)
AssetBundle の配信
•S3 を Origin とした CloudFront
•“ バージョン番号 / プラットフォーム /” なディレクトリ以下に配置
•Editor Script で書き出したディレクトリを丸っと PUT 出来ると楽ちん
![Page 22: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/22.jpg)
注意点
• 適切な差分ビルドを行わないとダメ
• 何か良い案無いっすか?w
• WWW はタイムアウトの実装が無いので、自前で組む必要あり
• CloudFront 使う場合、開発中は Origin から直接 DL した方が良い
• CF 側の Cache Invalidation とか大変だし。
![Page 23: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/23.jpg)
Texture Compression
•テクスチャの圧縮
•Inspector の Format に色々出てくるけど、要するにどういうコト…?
![Page 24: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/24.jpg)
Texture Compression
• デバイス毎に、展開出来るフォーマットと出来ないフォーマットがある
• GPU に依存
• 展開出来なかった場合は、無圧縮のテクスチャを一気にメモリに載せるっぽい
• 全画面テクスチャとか描画に 1sec掛かるコトも。
![Page 25: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/25.jpg)
Texture Compression
•で、最適なのは?
• iOS は PowerVR (PVR) にしとけば OK
•RGBA Compressed PVRTC 4 bitsがオススメ
•こだわるなら Texture 別に実機で見つつ適切に選んでね
![Page 26: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/26.jpg)
そう、 iPhone ならね。
![Page 27: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/27.jpg)
Texture Compression
•で、 Android は?
•… 。
•……… 。
•最適解はありません! orz
![Page 28: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/28.jpg)
Texture Compression
•と、言いたいところですが、 7 割以上が Adreno に対応しているようなので、ATC が良いんじゃないかと。
出展 : NTT レゾナントさまの Remote TestKit 端末一覧http://appkitbox.com/testkit/smartphone
![Page 29: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/29.jpg)
Texture Compression
•非対応端末は…?
•ぶっちゃけ切り捨てる方が精神衛生上よろしいのでは?
•少なくとも「読めない」というコトは無い ( っぽい ) ので、サイズ次第では何とかなるかも。
![Page 30: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/30.jpg)
Texture Compression
•WebPlayer / Standalone / etc… は?
•まだ作ったこと無いので分かりません! ( キリッ
•寧ろ情報交換しましょう!
![Page 31: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/31.jpg)
まとめ•AssetBundle
•Editor Script が肝要
•ちゃんと運用見据えて設計すべし
•Texture Compression
•Android のサポート次第
•ドラスティックな判断も必要かも
![Page 32: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/32.jpg)
Any Questions?
![Page 33: AssetBundle と TextureCompression のおはなし](https://reader030.vdocuments.net/reader030/viewer/2022012906/558fbd9c1a28ab747e8b474f/html5/thumbnails/33.jpg)
Thank you for your attention!!!