AssetBundle と TextureCompression のおはなし

33
AssetBundle と TextureCompression とととと と Mobile Platform ととととととととととと とととととととととと と とと

description

第18回 Unity 勉強会 にて発表しました。

Transcript of AssetBundle と TextureCompression のおはなし

Page 1: AssetBundle と TextureCompression のおはなし

AssetBundle と TextureCompression のおは

なし〜 Mobile Platform に於けるリソース管理〜

株式会社キッズスター森 哲哉

Page 2: AssetBundle と TextureCompression のおはなし

こんばんは!

•Unity 、使ってますか!?

•Unity 、楽しいですね!

•今日は AssetBundle と Texture 圧縮について語りに来ました!!

Page 3: AssetBundle と TextureCompression のおはなし

と、その前に…。

Page 4: AssetBundle と TextureCompression のおはなし

Who am I ?

•“ 森 哲哉” と申します。

•a.k.a. もんりぃ / T: @monry / F: 本名

•29 歳 / ♂ / O 型 / 天秤座 / 既婚 / 趣味 : 合唱

•趣味は「お酒」と「合唱」です。

Page 5: AssetBundle と TextureCompression のおはなし

Who am I ?

• “ 株式会社キッズスター” って会社で働いてます。

• 未就学児〜小学生のお子さまをお持ちのファミリーをターゲットにした知育 / 教育に関わるアプリ・サービスを展開しております。

こえほん 森のえほん館 なりきり !!ごっこランド

パズル & テイルズ

Page 6: AssetBundle と TextureCompression のおはなし

レジュメ

•AssetBundle について

•TextureCompression について

Page 7: AssetBundle と TextureCompression のおはなし

前提

• 大前提として、 2D のお話しです!

• もっと言うと NGUI に限定してます

• iOS / Android なモバイル環境

• Unity 4.x (Pro) / NGUI 2.6.x

• Pro 版じゃないと AssetBundle を Build できない

• AssetBundle の話が 8 割です :-P

• 間違ったこと言うかも知れませんが、ツッコミ大歓迎です!!

Page 8: AssetBundle と TextureCompression のおはなし

AssetBundle の概要

• そもそも AssetBundle って…?

• Asset を Bundle したモノ

• 素材を纏めて一つのファイルとして扱うための技術

• よくある初回ダウンロードとか

• ソシャゲのカードの画像とか

Page 9: AssetBundle と TextureCompression のおはなし

AssetBundle の概要

•こんなの。 ( 宣伝じゃないですよ?w )

Page 10: AssetBundle と TextureCompression のおはなし

AssetBundle の長所

•Unity が解釈出来るモノなら詰め放題

•ただし、 iOS は JIT 実行不可

•WWW クラスを経由して取得

•キャッシュとかよしなにやってくれる

•バージョニングにも対応

Page 11: AssetBundle と TextureCompression のおはなし

AssetBundle の短所

• 基本的にサーバ必要

• Content-Type: application/vnd.unity を要返却

• ファイル名ユニーク

• basename で判定される

• ディレクトリ掘って管理とか㍉

• プラットフォーム毎に別ファイル

Page 12: AssetBundle と TextureCompression のおはなし

AssetBundle の運用

•じゃあ、その辺踏まえて、どうやるの?ってなお話しを。

•ここから先は、弊社での事例をベースに進めます。

•一つでも参考になるモノがあれば幸いです。

Page 13: AssetBundle と TextureCompression のおはなし

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 のおはなし

AssetBundle の環境

• チーム開発するなら git で管理

• バイナリだから微妙っちゃ微妙

• Asset Server ( 要 Team License) もアリか

• Editor Script 必須

• ググればいっぱい転がってます

• この勉強会の過去のセッションにも

Page 15: AssetBundle と TextureCompression のおはなし

AssetBundle の環境

• iOS / Android の両方に対応させる場合、Team License 買っとけ!

•BuildPipeline.BuildAssetBundle() の際に Import Asset が走るため、リソース数が多いとめっちゃ待つ。

•ので、 Cache Server 必須。

Page 16: AssetBundle と TextureCompression のおはなし

AssetBundle の設計

•粒度 ( 弊社の場合 )

•Atlas / Texture / AudioClip を個別にビルド

•1 画面 (≠ シーン ) 内に最大 10個を目安

•初回 DL時のキャッシュに結構依存• どうにかしたいんだけどね…。

Page 17: AssetBundle と TextureCompression のおはなし

AssetBundle の設計

•更新頻度 ( 弊社の場合 )

•原則的に iOS の申請スケジュールが基準

•そもそも更新頻度が高いモノは API とか経由した方が管理が楽

•BASE64 なテキストを食わせるとか

Page 18: AssetBundle と TextureCompression のおはなし

AssetBundle の設計

• 初回 DL するネタ一覧 ( 弊社の場合 )

• 敢えてアプリ内 (Assets/Resources/) に .txt (TSV な TextAsset) を保持

• ファイル名 <TAB> バージョン <LF>

• 毎回起動時にこのリストをチェック

• WWW.LoadFromCacheOrDownload に任せて Cache が有するバージョンと異なるなら DL

Page 19: AssetBundle と TextureCompression のおはなし

AssetBundle の設計

•ファイル名 ( 弊社の場合 )• プラットフォーム名 /種別 @ シーン名 @ 画面名 @ ファイル

名 .unity3d

•プラットフォーム名は iOS, Android, Editor など

•種別は Atlas, AudioClip, Texture など

Page 20: AssetBundle と TextureCompression のおはなし

AssetBundle の構築

•Editor Script でがんばる。

Supporting Files/ 種別 /  シーン名 /   画面名 /    ファイル名

この構造決め打ちでディレクトリ内のファイルを走査

Page 21: AssetBundle と TextureCompression のおはなし

AssetBundle の配信

•S3 を Origin とした CloudFront

•“ バージョン番号 / プラットフォーム /” なディレクトリ以下に配置

•Editor Script で書き出したディレクトリを丸っと PUT 出来ると楽ちん

Page 22: AssetBundle と TextureCompression のおはなし

注意点

• 適切な差分ビルドを行わないとダメ

• 何か良い案無いっすか?w

• WWW はタイムアウトの実装が無いので、自前で組む必要あり

• CloudFront 使う場合、開発中は Origin から直接 DL した方が良い

• CF 側の Cache Invalidation とか大変だし。

Page 23: AssetBundle と TextureCompression のおはなし

Texture Compression

•テクスチャの圧縮

•Inspector の Format に色々出てくるけど、要するにどういうコト…?

Page 24: AssetBundle と TextureCompression のおはなし

Texture Compression

• デバイス毎に、展開出来るフォーマットと出来ないフォーマットがある

• GPU に依存

• 展開出来なかった場合は、無圧縮のテクスチャを一気にメモリに載せるっぽい

• 全画面テクスチャとか描画に 1sec掛かるコトも。

Page 25: AssetBundle と TextureCompression のおはなし

Texture Compression

•で、最適なのは?

• iOS は PowerVR (PVR) にしとけば OK

•RGBA Compressed PVRTC 4 bitsがオススメ

•こだわるなら Texture 別に実機で見つつ適切に選んでね

Page 26: AssetBundle と TextureCompression のおはなし

そう、 iPhone ならね。

Page 27: AssetBundle と TextureCompression のおはなし

Texture Compression

•で、 Android は?

•… 。

•……… 。

•最適解はありません! orz

Page 28: AssetBundle と TextureCompression のおはなし

Texture Compression

•と、言いたいところですが、 7 割以上が Adreno に対応しているようなので、ATC が良いんじゃないかと。

出展 : NTT レゾナントさまの Remote TestKit 端末一覧http://appkitbox.com/testkit/smartphone

Page 29: AssetBundle と TextureCompression のおはなし

Texture Compression

•非対応端末は…?

•ぶっちゃけ切り捨てる方が精神衛生上よろしいのでは?

•少なくとも「読めない」というコトは無い ( っぽい ) ので、サイズ次第では何とかなるかも。

Page 30: AssetBundle と TextureCompression のおはなし

Texture Compression

•WebPlayer / Standalone / etc… は?

•まだ作ったこと無いので分かりません! ( キリッ

•寧ろ情報交換しましょう!

Page 31: AssetBundle と TextureCompression のおはなし

まとめ•AssetBundle

•Editor Script が肝要

•ちゃんと運用見据えて設計すべし

•Texture Compression

•Android のサポート次第

•ドラスティックな判断も必要かも

Page 32: AssetBundle と TextureCompression のおはなし

Any Questions?

Page 33: AssetBundle と TextureCompression のおはなし

Thank you for your attention!!!