【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?

4K Views

May 08, 18

スライド概要

講演者:池田 早人(株式会社バンダイナムコスタジオ)
:加藤 政樹(株式会社バンダイナムコスタジオ)

こんな人におすすめ
・スマホアプリの開発者
・最適化で困っているプログラマ
・アイドルマスター好きなプロデューサー

受講者が得られる知見
・スマホアプリの開発で気を付けるべき点
・最適化のヒント
・『AKANE大作戦』の真相

profile-image

リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

DAY2 2018/5/8 なんとっ!ユナイト! ミリシタをささえる 『AKANE大作戦』とは? 池田 早人 株式会社バンダイナムコスタジオ/リードプログラマ 加藤 政樹 株式会社バンダイナムコスタジオ/プログラマーーーーー

2.

©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

3.

自己紹介 池田 早人 Hayato Ikeda 株式会社 バンダイナムコスタジオ / リードプログラマ ・1996年にナムコにハードエンジニアとして入社 ・2003年からモバイルアプリ向けプログラマとして今に至る ・ミリシタでは、クライアントエンジニアのまとめ役として、進行管理や プロジェクトのバージョン管理(Perforce)などを担当 のり子、ジュリア 担当 2 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

4.

ミリシタって、なんなん? 『アイドルマスター ミリオンライブ! シアターデイズ』は 株式会社バンダイナムコエンターテイメントからAndroid/iOS用に配信されている アイドルライブ&プロデュースゲームで、略称は『ミリシタ』です。 765プロライブ劇場(シアター)を舞台に 765 ミリオンオールスターズのアイドルたちをプロデュース! ステージでのライブやお仕事、劇場でのコミュニケーションを通じて、 アイドルと「もっとふれあえる」要素がもりだくさん! http://millionlive.idolmaster.jp/theaterdays/ 3 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

5.

ライブシーンについて リリース時 5人のアイドルが歌って踊る 配置換えや、衣装変更が任意に出来る 5人が個別のモーションで踊る曲もある(フォーメーション) 51人のキャラで歌い分けが出来る曲もある 途中でスペシャルアピール(別モーション)が入る 運営中 4人や3人や2人で歌って踊る 52人のキャラで歌い分けが出来る曲もある 変身する曲もある 最新 13人のアイドルが歌って踊る ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 4

6.

モデルデータについて 1体につき10000ポリゴンくらい(顔1500/髪3000/体5500) 衣装テクスチャは1024×1024を1枚 表情はブレンドシェイプ 5 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

7.

ステージデータについて 1ステージにつき15000ポリゴンくらい(ステージ10000/演出系5000) ステージテクスチャは1024×1024が2枚 客席のコンサートライトは1メッシュなので描画負荷は軽い 6 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

8.

ポストエフェクトと解像度について 被写界深度(DoF) Bloom Blur フレア(光を被せるエフェクト) UnityのImage Effectsは高品質だがモバイルには重いので、軽量化したシェーダーを独自実装 中間バッファの使い回しでメモリを節約 余分なパスなしで描画と同時にデプステクスチャを作ってDoFを実現 解像度:1280×720 低解像度+MSAA GPU性能の低い端末向けに低解像度モードを用意したが、ジャギーが目立つためMSAAを検討 若干負荷は上がるが描画面積の多いシーンでは解像度を落とす効果の方が高く、メリットあり 7 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

9.

タイミングシート(ステージイベントツール)について いわゆるタイムラインツールで、家庭用にあった仕様を元にUnityで新規作成 ライブシーンの演出を作るために使用 ゲームデザイナーやビジュアルアーティストの要望を受けて、改良し続けている カメラ、キャラの位置、キャラの表情、ステージ演出、コンサートライトの動きなど 全て制御している カメラ用とステージ演出用の2種類がある 8 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

10.

歌い分け 家庭用アイマスにあった機能で、アイドル毎にボーカルを収録している ユニットを組んだメンバーの位置で歌うパートが異なる曲がある 52名のアイドルから5人を順番に選ぶ組み合わせは52P5で約3.1億通り 1曲2分半として、全部の組み合わせを聴こうと思うと465億秒必要になる(538194日で1474年必要) サウンドはCRIのADX2を使用している ボーカル用に複数チャンネルを使用し、ミュートを使うことで歌い分けを実現した 歌い分けのデータも前述のステージイベントツールで管理している 9 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

11.

開発スケジュール ~2016/4 エンジニア+テクニカルアーティストで3Dでライブ実現の試作 ~2016/6 α1製作 タイトル>劇場>ストーリー>ライブ までの流れを実装 ~2016/11 α2製作 一通り必要な機能を実装 ~2017/1 最適化プロジェクト開始 ~2017/4 β1製作 AssetBundle化はまだ/サーバー通信 ~2017/5 β2製作 全体のレビュー開始 2017/6/26 ギリギリでUnityのバージョンを上げて、 ストア提出 2017/6/28 ストア配信(iOS/Android) 2017/6/29 サービス開始 10 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

12.

モバイル開発あるある 「端末での確認は、快適に動くiPhoneの最新機種でしか、やってませんでしたー」 その結果…「iPhone5sやAndroidでは、ガクガクでゲームになりません!」 分かってたけど、ミリシタでもやっちゃいました… なんとかして対応しないとリリース出来ないが、開発メンバーは機能実装で手一杯。 開発プロジェクトとは別に動ける、最適化プロジェクトを立ち上げないと… 11 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

13.

『AKANE大作戦』始動 簡単に言うと、Androidで快適にライブが遊べるための最適化プロジェクトの事です! 開発終盤からスタートしたため、開発チームとは別ラインで動ける スペシャルチームを結成しました。 コードネームを付けた方が盛り上がりそうなので、ひとまず『AKANE大作戦』と命名。 Android Kousoku-ka And NativE-ka 大作戦 • • • • • • • • • • • • • • • • • • 2D描画ベンチ 2D描画軽量化メモ 社内チームの見解 AKANE大作戦 / String.StartsWith は遅い? AKANE大作戦 / ここ最近(06/19)のライブ処理負荷 AKANE大作戦 / キャラモーション 容量削減検証 AKANE大作戦 / シアター、コミュ中のデバッグボタン AKANE大作戦 / ベンチマーク用のデーター AKANE 大作戦 / モデル、骨関連の調査 AKANE大作戦 / ライブ UI のこれから AKANE大作戦 / ライブ中 UI の高速化 AKANE 大作戦 / ライブ中のデバッグボタン AKANE大作戦 / ロード時間対策 AKANE大作戦 / 検証項目一覧 AKANE大作戦 / 独自実装アニメーションシステム AKANE 大作戦 / 背景エフェクト一覧 AKANE大作戦の議事録 AKANE大作戦の週報 • • • • • • • • • • • • • Android その他機種まとめ Android 各機種傾向 レビュー版まとめ キャラ小物負荷目安 スクリーンショット 他職種にお願いしたいこと 劇場・ADV 解析ページ 各ゲームパート処理負荷まとめ 描画モード別セッティングに関して 測定結果(Xperia Z4) 読込時間計測について 負荷対策情報交換会に向けて 重い子5 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 12

14.

『AKANE大作戦』のアプローチ プロジェクト設定の見直し 3D描画部分の高速化 CPUとGPUを効率良く見て行く 2D描画部分の高速化 CanvasからSpriteへ、透明部分の無駄な描画はないか、イメージのアトラス化など スパイクさせない工夫 GCをしない、させない、やらせない 13 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

15.

『AKANE大作戦』の目標 SetPassCall(DrawCall)の削減 GPU負荷の軽減 テクスチャーのアトラス化 Indexバッファの統合 マテリアルの削減 描画順序の調整 CPU負荷の軽減 揺れものの計算処理の高速化 処理のスレッド化(仕事をしてないCPUに働いてもらう) メモリの最適化 GCを発生させないための工夫はないか? 結果として、平均FPSが60に近づくようにする。 (=16.6666…ms内に処理を終らせる) 14 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

16.

『AKANE大作戦』のポリシー ビジュアルのクオリティは下げない 多くの端末に対応させる(描画設定) ギリギリまでエンジニアで頑張る ポストエフェクトなしで… 揺れ物どうしよう… LoDの検討… フレームスキップは… レンダリング解像度を下げる… Boneのインフルエンス数を減らす… 15 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

17.

プロファイル 大まかなCPU処理の傾向はUnityProfilerで見れる GPUを見る場合は、Qualcommが配布しているSnapdragon Profilerを使う 計測環境を整えて、数値化して比較する 闇雲に最適化案を実装しても効果が計測出来ないので、変更を入れた場合は面倒でも 必ずProfileして、数値化して比較する 大きな変更も大した効果が無かったり、逆に些細なことが大きく影響したりするので 必ず計測環境を整えて監視することが重要 端末のクセを知る事も重要 機種により性能も動作の癖も千差万別なので、通常はこうしたらこうなるだろうという思い込みが 外れることは日常茶飯事 また、発熱によるクロックダウンの傾向は知っておいた方が良い 16 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

18.

改修のアイデア 『AKANE大作戦』では様々な最適化のアイデアを出してもらい、リスト化し 優先順位を付けて、実装とテストを繰り返しました 数μSECでも縮められるなら、トライしてみる価値はある ときには明らかに勝算が無さそうな事でも、あえて試してみることも大事 別の事で役に立つこともある! 頭の中だけで判断せず、たくさん手を動かすことが重要 17 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

19.

実装とテスト P D C A 最適化アイデアの優先順位付け 実装 ビルド&計測(Profile) 更なるアイデア出し ※ Plan(計画)→ Do(実行)→ Check(評価)→ Act(改善) テストしやすいように、最適化項目をON/OFF出来るようにしておく ビジュアルアーティストにチェックしてもらう時にも楽になる 負荷の重いキャラ(重い子5)で、計測する 18 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

20.

Unityに関して ゲームエンジンを使っている以上、出来る事と出来ない事がある マルチスレッド化は、早めに手を引いた 短期間で実装出来ない事はやらない そのうちUnityが対応してくれる機能もある Uniteの講演動画や、Unity道場の資料はとても役に立ちます Unity ForumやUnity Issue Trackerも活用してます リリース後にUnityのバージョンを上げるのは大変なので、慎重に! 開発中は出来るだけ最新版を使うようにしてました 19 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

21.

日々改善 リリース後も最適化作業は継続中! ポストエフェクトの改修 マテリアルの統合 ステージ演出の軽量化 アニメーションシステムの独自実装による、処理負荷とデータサイズの削減 GCの削減 新機能の実装も行われているので、定期的にProfileを実行しています。 20 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

22.

13人ライブ それは昨年末、企画・開発プロデューサーの「ライブで5人以上出せない?」で始まった… 実は負荷テスト用に5人以上のキャラを表示する仕組みは、過去に用意していたので ライブで15体表示する検証用プロジェクトをサクっと作成したところ 「あれ?けっこうちゃんと動く!」 と言う経緯で、3ヶ月弱で が完成しました。 13人ライブ用に、メモリ削減や負荷軽減のための特別な実装は行っていません。 バランス良く全体の負荷を下げる事で実現しています。 今までの最適化の積み重ねです。 塵も積もれば13人踊る! 21 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

23.

前半まとめ 最適化の工数は事前に見積もっておきましょう Profileは重要です 効果の見える化をしよう 最適化のPDCAを回そう どんな些細な事でも、「ちりつも」で大きな結果となる あと、コードネームを付けると楽しく最適化出来る… かもね! 22 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

24.

プロフィール (*) ビジュアル系プログラマー … モーション、グラフィクス系プログラマーのこと。 けっしてかっこいいわけではありません。 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 23

25.

ミッション キャラのドローコールを減らそ う 見た目を変えずに 『アセットの作り直し』はしない 24 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

26.

REPORT サブメッシュ統合 1体あたりのドローコール 25→17 Command Buffer モデル描画の細い制御が可能に 25 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

27.

キャラ のモデルはこうなっております パス1 パス2 服 スパン コール シェーダー パス1:本体 パス2:りんかく線 りんかく線 反転ポリゴンによる描画 肌 頂点シェーダーで膨らませる メッシュは具と共通 キャラ カラー 26 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

28.

立ちはだかるサブメッシュの壁 ドローコールを まとめたい でも…… サブメッシュの壁は越えられない ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 27

29.

Model と Mesh と SubMesh のわかれめ Model Mesh 頭 Sub Mesh (省略) 体 頂点構造の違い ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント マテリアルの違 い 28

30.

ところで 29 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

31.

一般的な描画の話 頂点バッファー 描画に必要なもの 頂点の位置、UVなど 2 1 インデックスバッファー 頂点を結ぶ順番 1 ( 1.0, 1.0, 0.0) 2 ( -1.0, 1.0, 0.0) 3 ( 1.0, -1.0, 0.0) 4 ( -1.0, -1.0, 0.0) 三角形 1 1-3-2 三角形 2 3-4-2 マテリアル 4 (今回は省略) 3 30 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

32.

Mesh クラス 作る系メソッド サブメッシュ指定 いる SetIndices() いらない インデックス トポロジー SetVertices() SetNormals( )SetTangents() SetUVs() SetColors() boneWeight s 位置 法線 タンジェント UV カラー インフルーエンス 頂点に関するメソッドはサブメッシュの指定が不要 (*) ミリシタ調べ。Unity 5.6 の場合。 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 31

33.

『Mesh』や『SubMesh』って? Mesh 頂点バッファー Sub Mesh インデックス バッファー Sub Mesh Sub Mesh インデックス バッファー インデックス バッファー 仮説 ひとつの頂点バッファーを 複数のサブメッシュで小分けに描画している? SubMesh = インデックスバッファー? ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 32

34.

ネイティブ実装なら Mesh 頂点バッファー 頂点バッファー インデックスバッファーをひとつだけつくる インデックスバッファー インデックスバッファー インデックスの範囲指定で、部分 or 全体を描画 33 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

35.

SubMesh を追加すればいいんじゃない? 全 SubMesh をマージした SubMeshを追加 Mesh 頂点バッファー Sub Mesh インデックス バッファー Sub Mesh インデックスバッファーーーーーーー 34 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

36.

試してみよう サブメッシュだけを追加してみた 何も変わらない マテリアルの配列を拡張、りんかく線だけのマテリアルを追 加 ちゃんと出た! できた! 35 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

37.
[beta]
SubMesh の追加はこんな感じです
マージ SubMesh の追加
var

rend = go.GetComponent<SkinnedMeshRenderer>();

Mesh mesh = rend.sharedMesh;
var
new_indices = new List<int>();

全 SubMesh の……

for(int i = 0;i < mesh.subMeshCount;i++) {
var indices = mesh.GetIndices(i);

}

for(int j = 0;j < indices.Length;j++) {
new_indices.Add(indices[j]);
}

mesh.subMeshCount++;

インデックスをひとつのリストにコピー

SubMesh の数
を増やしておく

マージされた SubMesh を
セット

mesh.SetTriangles(new_indices.ToArray(), mesh.subMeshCount - 1);
36
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

38.
[beta]
Material の追加はこんな感じです
Material の追加
var

rend = go.GetComponent<SkinnedMeshRenderer>();

Material[] materials = rend.materials;
Material[] new_materials = new Material[rend.materials.Length + 1];
for(int i = 0;i < materials.Length;i++) {
new_materials[i] = materials[i];
new_materials[i].shader = find_no_outline_shader(materials[i])
}
new_materials[new_materials.Length - 1] = outline_only_material;

ひとつ大きなサイズの配列を確保

りんかく線なしのシェーダーに置き
かえる
りんかく線のみのマテリアルをセット

rend.materials = new_materials;

37
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

39.

Unity の中身を想像してみた たぶん、こう 頂点バッファーをバインド mesh.vertexBuffer.Bind(); for(int i = 0;i < mesh.subMeshes.Count;i++) { mesh.materials[i].Bind(); } サブメッシュごとに描 画 マテリアルをバインド mesh.subMeshes[i].DrawIndexed(); インデックス描画 (ドローコール) (*) 疑似コードです 38 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

40.

お仕事結果 25→17 あまり減ってない? もっと減らしなよ~ 13人) 5人いますから(今は最大 クオリティーを下げない 『アセットの作り直し』もない ローンチにも間に合ったよ! 39 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

41.

最適化前 (*) UI 等も含みます 40 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

42.

最適化後 44 → 36 8 Draw call の減少 (*) UI 等も含みます 41 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

43.

次の 目標 マテリアル LOD New! 近距離 遠距離 1ドロー化 42 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

44.

マテリアルLOD の要件 サブメッシュ単位のビジブル制御 リフレクション High LOD Low LOD A B A+B なし あり なし Show Show Show 43 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

45.

Command Buffer サブメッシュ単位で描画できる CommandBuffer.DrawRenderer() 44 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

46.

SkinnedMeshRenderer の描画を off にするには? enabled を false にする スキニングまで止まっちゃう! Renderer.materials[ ] を空っぽにする スキニングは生きている ついでにフラスタムカリングも 45 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

47.

SkinnedMeshRenderer の描画を off にするには? 描画だけ Off var rend = go.GetComponent<SkinnedMeshRenderer>(); 描画のときのために保存しておく org_materials = rend.materials; rend.materials = new Material[0]; 大きさ 0 の Material 配列を セット 46 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

48.

Command Buffer Command Buffer を作る CommandBuffer command_buffer = new CommandBuffer(); command_buffer.name = "Nantoh“; Camera.main.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, command_buffer); 名前をつけておくと便利です カメラに関連付ける 47 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

49.

Command Buffer 毎フレームの描画 前のフレームの描画コマンドを削除 command_buffer.Clear(); if(rend.isVisible) { フラスタムカリングの結果を利用 for(int i = 0;i < org_materials.Length;i++) { } } command_buffer.DrawRenderer(rend, org_materials[i], i); 48 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

50.

Materials 空っぽ化前 49 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

51.

Materials 空っぽ化後 こ ↑のあたりに注目 50 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

52.

Command Buffer の良いところ 描画順のコントロールが容易 サブメッシュ単位でのビジブル制御 マテリアルの切り替えも簡単 51 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

53.

Command Buffer おまけ Scene View のカメラも忘れずに! Camera[] cameras = UnityEditor.SceneView.GetAllSceneCameras(); foreach(var camera in cameras) { } if(camera.cameraType == CameraType.SceneView) { camera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, command_buffer); } Scene View のカメラにも Command Buffer を関連づける 52 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

54.

応用例 サブメッシュ単位のビジブル Wire on shade(デバッグ用) 53 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

55.

サブメッシュ単位のビジブル 54 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

56.

Wire on shade(デバッグ用) Mesh 頂点バッファー ワイヤーフレーム用 SubMesh トポロジーは “Lines” 55 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

57.

最適化の考え方 ~ AKANE 大作戦の場合 ~ 一般的な描画手法をどうやって Unity 上で実現するか Unity の仕様を眺めているだけではダメ ネイティブ実装の知識を生かした高速化 Unity は『ブラックボックス』? でも『謎のテクノロジー』ではない 56 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

58.

よくある質問 「どうして『AKANE 大作戦』なの?」 高速化を始めたのは 2017 年のお正月 57 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

59.

よくある質問 「どうして『AKANE 大作戦』なの?」 高速化を始めたのは 2017 年のお正月 今年の干支は酉(とり) 58 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

60.

よくある質問 「どうして『AKANE 大作戦』なの?」 高速化を始めたのは 2017 年のお正月 今年の干支は酉(とり) 西 ← 酉 → 茜 59 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント

61.

よくある質問 「どうして『AKANE 大作戦』なの?」 高速化を始めたのは 2017 年のお正月 今年の干支は酉(とり) 西 ← 酉 → 茜 命名『AKANE 大作戦!』 60 ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント