SlideShare a Scribd company logo
1 of 61
Download to read offline
なんとっ!ユナイト!
ミリシタをささえる
『AKANE大作戦』とは?
DAY2 2018/5/8
池田 早人
株式会社バンダイナムコスタジオ/リードプログラマ
加藤 政樹
株式会社バンダイナムコスタジオ/プログラマーーーーー
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
自己紹介
2
池田 早人
Hayato Ikeda
株式会社 バンダイナムコスタジオ / リードプログラマ
・1996年にナムコにハードエンジニアとして入社
・2003年からモバイルアプリ向けプログラマとして今に至る
・ミリシタでは、クライアントエンジニアのまとめ役として、進行管理や
プロジェクトのバージョン管理(Perforce)などを担当
のり子、ジュリア 担当
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
ミリシタって、なんなん?
3
『アイドルマスター ミリオンライブ! シアターデイズ』は
株式会社バンダイナムコエンターテイメントからAndroid/iOS用に配信されている
アイドルライブ&プロデュースゲームで、略称は『ミリシタ』です。
765プロライブ劇場(シアター)を舞台に
765 ミリオンオールスターズのアイドルたちをプロデュース!
ステージでのライブやお仕事、劇場でのコミュニケーションを通じて、
アイドルと「もっとふれあえる」要素がもりだくさん!
http://millionlive.idolmaster.jp/theaterdays/
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
ライブシーンについて
リリース時
5人のアイドルが歌って踊る
配置換えや、衣装変更が任意に出来る
5人が個別のモーションで踊る曲もある(フォーメーション)
51人のキャラで歌い分けが出来る曲もある
途中でスペシャルアピール(別モーション)が入る
運営中
4人や3人や2人で歌って踊る
52人のキャラで歌い分けが出来る曲もある
変身する曲もある
最新
13人のアイドルが歌って踊る 4
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
モデルデータについて
1体につき10000ポリゴンくらい(顔1500/髪3000/体5500)
衣装テクスチャは1024×1024を1枚
表情はブレンドシェイプ
5
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
ステージデータについて
1ステージにつき15000ポリゴンくらい(ステージ10000/演出系5000)
ステージテクスチャは1024×1024が2枚
客席のコンサートライトは1メッシュなので描画負荷は軽い
6
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
ポストエフェクトと解像度について
被写界深度(DoF)
Bloom
Blur
フレア(光を被せるエフェクト)
UnityのImage Effectsは高品質だがモバイルには重いので、軽量化したシェーダーを独自実装
中間バッファの使い回しでメモリを節約
余分なパスなしで描画と同時にデプステクスチャを作ってDoFを実現
解像度:1280×720
低解像度+MSAA
GPU性能の低い端末向けに低解像度モードを用意したが、ジャギーが目立つためMSAAを検討
若干負荷は上がるが描画面積の多いシーンでは解像度を落とす効果の方が高く、メリットあり
7
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
タイミングシート(ステージイベントツール)について
いわゆるタイムラインツールで、家庭用にあった仕様を元にUnityで新規作成
ライブシーンの演出を作るために使用
ゲームデザイナーやビジュアルアーティストの要望を受けて、改良し続けている
カメラ、キャラの位置、キャラの表情、ステージ演出、コンサートライトの動きなど
全て制御している
カメラ用とステージ演出用の2種類がある
8
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
歌い分け
家庭用アイマスにあった機能で、アイドル毎にボーカルを収録している
ユニットを組んだメンバーの位置で歌うパートが異なる曲がある
52名のアイドルから5人を順番に選ぶ組み合わせは52P5で約3.1億通り
1曲2分半として、全部の組み合わせを聴こうと思うと465億秒必要になる(538194日で1474年必要)
サウンドはCRIのADX2を使用している
ボーカル用に複数チャンネルを使用し、ミュートを使うことで歌い分けを実現した
歌い分けのデータも前述のステージイベントツールで管理している
9
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
開発スケジュール
~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. 配信元:株式会社バンダイナムコエンターテインメント
モバイル開発あるある
「端末での確認は、快適に動くiPhoneの最新機種でしか、やってませんでしたー」
その結果…「iPhone5sやAndroidでは、ガクガクでゲームになりません!」
分かってたけど、ミリシタでもやっちゃいました…
なんとかして対応しないとリリース出来ないが、開発メンバーは機能実装で手一杯。
開発プロジェクトとは別に動ける、最適化プロジェクトを立ち上げないと…
11
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
『AKANE大作戦』始動
簡単に言うと、Androidで快適にライブが遊べるための最適化プロジェクトの事です!
開発終盤からスタートしたため、開発チームとは別ラインで動ける
スペシャルチームを結成しました。
コードネームを付けた方が盛り上がりそうなので、ひとまず『AKANE大作戦』と命名。
Android Kousoku-ka And NativE-ka 大作戦
12
• 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. 配信元:株式会社バンダイナムコエンターテインメント
『AKANE大作戦』のアプローチ
プロジェクト設定の見直し
3D描画部分の高速化
CPUとGPUを効率良く見て行く
2D描画部分の高速化
CanvasからSpriteへ、透明部分の無駄な描画はないか、イメージのアトラス化など
スパイクさせない工夫
GCをしない、させない、やらせない
13
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
『AKANE大作戦』の目標
SetPassCall(DrawCall)の削減
GPU負荷の軽減
テクスチャーのアトラス化
Indexバッファの統合
マテリアルの削減
描画順序の調整
CPU負荷の軽減
揺れものの計算処理の高速化
処理のスレッド化(仕事をしてないCPUに働いてもらう)
メモリの最適化
GCを発生させないための工夫はないか?
結果として、平均FPSが60に近づくようにする。
(=16.6666…ms内に処理を終らせる)
14
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
『AKANE大作戦』のポリシー
ビジュアルのクオリティは下げない
多くの端末に対応させる(描画設定)
ギリギリまでエンジニアで頑張る
ポストエフェクトなしで…
揺れ物どうしよう…
LoDの検討…
フレームスキップは…
レンダリング解像度を下げる…
Boneのインフルエンス数を減らす…
15
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
プロファイル
大まかなCPU処理の傾向はUnityProfilerで見れる
GPUを見る場合は、Qualcommが配布しているSnapdragon Profilerを使う
計測環境を整えて、数値化して比較する
闇雲に最適化案を実装しても効果が計測出来ないので、変更を入れた場合は面倒でも
必ずProfileして、数値化して比較する
大きな変更も大した効果が無かったり、逆に些細なことが大きく影響したりするので
必ず計測環境を整えて監視することが重要
端末のクセを知る事も重要
機種により性能も動作の癖も千差万別なので、通常はこうしたらこうなるだろうという思い込みが
外れることは日常茶飯事
また、発熱によるクロックダウンの傾向は知っておいた方が良い
16
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
改修のアイデア
『AKANE大作戦』では様々な最適化のアイデアを出してもらい、リスト化し
優先順位を付けて、実装とテストを繰り返しました
数μSECでも縮められるなら、トライしてみる価値はある
ときには明らかに勝算が無さそうな事でも、あえて試してみることも大事
別の事で役に立つこともある!
頭の中だけで判断せず、たくさん手を動かすことが重要
17
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
実装とテスト
P 最適化アイデアの優先順位付け
D 実装
C ビルド&計測(Profile)
A 更なるアイデア出し
※ Plan(計画)→ Do(実行)→ Check(評価)→ Act(改善)
テストしやすいように、最適化項目をON/OFF出来るようにしておく
ビジュアルアーティストにチェックしてもらう時にも楽になる
負荷の重いキャラ(重い子5)で、計測する
18
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Unityに関して
ゲームエンジンを使っている以上、出来る事と出来ない事がある
マルチスレッド化は、早めに手を引いた
短期間で実装出来ない事はやらない
そのうちUnityが対応してくれる機能もある
Uniteの講演動画や、Unity道場の資料はとても役に立ちます
Unity ForumやUnity Issue Trackerも活用してます
リリース後にUnityのバージョンを上げるのは大変なので、慎重に!
開発中は出来るだけ最新版を使うようにしてました
19
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
日々改善
リリース後も最適化作業は継続中!
ポストエフェクトの改修
マテリアルの統合
ステージ演出の軽量化
アニメーションシステムの独自実装による、処理負荷とデータサイズの削減
GCの削減
新機能の実装も行われているので、定期的にProfileを実行しています。
20
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
13人ライブ
それは昨年末、企画・開発プロデューサーの「ライブで5人以上出せない?」で始まった…
実は負荷テスト用に5人以上のキャラを表示する仕組みは、過去に用意していたので
ライブで15体表示する検証用プロジェクトをサクっと作成したところ
「あれ?けっこうちゃんと動く!」
と言う経緯で、3ヶ月弱で が完成しました。
13人ライブ用に、メモリ削減や負荷軽減のための特別な実装は行っていません。
バランス良く全体の負荷を下げる事で実現しています。
今までの最適化の積み重ねです。
塵も積もれば13人踊る!
21
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
前半まとめ
最適化の工数は事前に見積もっておきましょう
Profileは重要です
効果の見える化をしよう
最適化のPDCAを回そう
どんな些細な事でも、「ちりつも」で大きな結果となる
あと、コードネームを付けると楽しく最適化出来る… かもね!
22
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
プロフィール
23
(*) ビジュアル系プログラマー … モーション、グラフィクス系プログラマーのこと。
けっしてかっこいいわけではありません。
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
ミッション
24
見た目を変えずに
『アセットの作り直し』はしない
キャラのドローコールを減らそ
う
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
REPORT
25
25→171体あたりのドローコール
サブメッシュ統合
モデル描画の細い制御が可能に
Command Buffer
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
キャラ のモデルはこうなっております
26
パス2パス1
反転ポリゴンによる描画
頂点シェーダーで膨らませる
メッシュは具と共通
りんかく線
パス1:本体
パス2:りんかく線
シェーダー
服
スパン
コール
肌
キャラ
カラー
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
立ちはだかるサブメッシュの壁
27
ドローコールを
まとめたい
でも……
サブメッシュの壁は越えられない
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Model と Mesh と SubMesh のわかれめ
28
Model
体
Sub Mesh
頂点構造の違い マテリアルの違
い
Mesh
頭 (省略)
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
29
ところで
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
一般的な描画の話
30
頂点バッファー
インデックスバッファー
頂点の位置、UVなど
頂点を結ぶ順番
描画に必要なもの
1 ( 1.0, 1.0, 0.0)
2 ( -1.0, 1.0, 0.0)
3
4
( 1.0, -1.0, 0.0)
( -1.0, -1.0, 0.0)
三角形 1 1-3-2
三角形 2 3-4-2
1
2
3
4
マテリアル
(今回は省略)
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Mesh クラス 作る系メソッド
31
いる いらない
インデックス
トポロジー
位置
UV
法線
カラー
インフルーエンス
頂点に関するメソッドはサブメッシュの指定が不要
(*) ミリシタ調べ。Unity 5.6 の場合。
サブメッシュ指定
SetIndices() SetVertices()
SetUVs()
boneWeight
s
SetNormals(
)
SetColors()
SetTangents() タンジェント
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
『Mesh』や『SubMesh』って?
32
ひとつの頂点バッファーを
複数のサブメッシュで小分けに描画している?
仮説
Mesh
頂点バッファー
Sub Mesh
インデックス
バッファー
Sub Mesh
インデックス
バッファー
Sub Mesh
インデックス
バッファー
SubMesh = インデックスバッファー?
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
ネイティブ実装なら
33
インデックスの範囲指定で、部分 or 全体を描画
頂点バッファー
インデックスバッファー
Mesh
頂点バッファー
インデックスバッファー
インデックスバッファーをひとつだけつくる
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Mesh
頂点バッファー
Sub Mesh
インデックス
バッファー
Sub Mesh
インデックスバッファーーーーーーー
SubMesh を追加すればいいんじゃない?
34
全 SubMesh をマージした SubMeshを追加
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
試してみよう
35
何も変わらない
ちゃんと出た!
できた!
サブメッシュだけを追加してみた
マテリアルの配列を拡張、りんかく線だけのマテリアルを追
加
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
マージ SubMesh の追加
SubMesh の追加はこんな感じです
36
var rend = go.GetComponent<SkinnedMeshRenderer>();
Mesh mesh = rend.sharedMesh;
var new_indices = new List<int>();
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++;
mesh.SetTriangles(new_indices.ToArray(), mesh.subMeshCount - 1);
インデックスをひとつのリストにコピー
全 SubMesh の……
SubMesh の数
を増やしておく
マージされた SubMesh を
セット
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Material の追加
Material の追加はこんな感じです
37
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;
ひとつ大きなサイズの配列を確保
りんかく線なしのシェーダーに置き
かえる
りんかく線のみのマテリアルをセット
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
たぶん、こう
Unity の中身を想像してみた
38
mesh.vertexBuffer.Bind();
for(int i = 0;i < mesh.subMeshes.Count;i++) {
mesh.materials[i].Bind();
mesh.subMeshes[i].DrawIndexed();
}
(*) 疑似コードです
サブメッシュごとに描
画
マテリアルをバインド
頂点バッファーをバインド
インデックス描画
(ドローコール)
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
もっと減らしなよ~
お仕事結果
39
クオリティーを下げない
5人いますから(今は最大13人)
あまり減ってない?
25→17
『アセットの作り直し』もない
ローンチにも間に合ったよ!
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
最適化前
40
(*) UI 等も含みます
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
最適化後
41
44 → 36
8 Draw call の減少
(*) UI 等も含みます
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
次の 目標
42
マテリアル LOD
New!
近距離
遠距離
1ドロー化
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
マテリアルLOD の要件
43
サブメッシュ単位のビジブル制御
High LOD
Low LOD
Show
Show
Show
リフレクション なし あり なし
A B A + B
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Command Buffer
44
サブメッシュ単位で描画できる
CommandBuffer.DrawRenderer()
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
SkinnedMeshRenderer の描画を off にするには?
45
Renderer.materials[ ] を空っぽにする
スキニングは生きている
ついでにフラスタムカリングも
enabled を false にする
スキニングまで止まっちゃう!
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
描画だけ Off
SkinnedMeshRenderer の描画を off にするには?
46
var rend = go.GetComponent<SkinnedMeshRenderer>();
org_materials = rend.materials;
rend.materials = new Material[0];
描画のときのために保存しておく
大きさ 0 の Material 配列を
セット
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Command Buffer
47
Command Buffer を作る
CommandBuffer command_buffer = new CommandBuffer();
command_buffer.name = "Nantoh“;
Camera.main.AddCommandBuffer(CameraEvent.BeforeForwardOpaque,
command_buffer);
名前をつけておくと便利です カメラに関連付ける
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Command Buffer
48
毎フレームの描画
command_buffer.Clear();
if(rend.isVisible) {
for(int i = 0;i < org_materials.Length;i++) {
command_buffer.DrawRenderer(rend, org_materials[i], i);
}
}
前のフレームの描画コマンドを削除
フラスタムカリングの結果を利用
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Materials 空っぽ化前
49
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Materials 空っぽ化後
50
↑
こ
の
あ
た
り
に
注
目
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Command Buffer の良いところ
51
描画順のコントロールが容易
サブメッシュ単位でのビジブル制御
マテリアルの切り替えも簡単
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Command Buffer おまけ
52
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 を関連づける
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
応用例
53
サブメッシュ単位のビジブル
Wire on shade(デバッグ用)
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
サブメッシュ単位のビジブル
54
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
Wire on shade(デバッグ用)
55
Mesh
頂点バッファー
ワイヤーフレーム用 SubMesh
トポロジーは “Lines”
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
最適化の考え方 ~ AKANE 大作戦の場合 ~
56
Unity は『ブラックボックス』?
でも『謎のテクノロジー』ではない
Unity の仕様を眺めているだけではダメ
ネイティブ実装の知識を生かした高速化
一般的な描画手法をどうやって Unity 上で実現するか
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
よくある質問 「どうして『AKANE 大作戦』なの?」
57
高速化を始めたのは 2017 年のお正月
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
よくある質問 「どうして『AKANE 大作戦』なの?」
58
高速化を始めたのは 2017 年のお正月
今年の干支は酉(とり)
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
よくある質問 「どうして『AKANE 大作戦』なの?」
59
高速化を始めたのは 2017 年のお正月
今年の干支は酉(とり)
西 ← 酉 → 茜
©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
よくある質問 「どうして『AKANE 大作戦』なの?」
60
高速化を始めたのは 2017 年のお正月
今年の干支は酉(とり)
西 ← 酉 → 茜
命名『AKANE 大作戦!』

More Related Content

What's hot

それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイントそれを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイントMakoto Goto
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングSatoshi Kodaira
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法モノビット エンジン
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Yoshifumi Kawai
 
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編UnityTechnologiesJapan002
 
Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!NishoMatsusita
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]DeNA
 
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~UnityTechnologiesJapan002
 
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステムAndroid向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステムKLab Inc. / Tech
 
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントhistoria_Inc
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステムSEGADevTech
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計UnityTechnologiesJapan002
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~UnityTechnologiesJapan002
 
「宴」実装時に得られたUnityプログラムノウハウ
「宴」実装時に得られたUnityプログラムノウハウ「宴」実装時に得られたUnityプログラムノウハウ
「宴」実装時に得られたUnityプログラムノウハウRyohei Tokimura
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 

What's hot (20)

それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイントそれを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
Unity2018/2019における最適化事情
Unity2018/2019における最適化事情Unity2018/2019における最適化事情
Unity2018/2019における最適化事情
 
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
 
Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
 
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステムAndroid向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
 
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow) UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
「宴」実装時に得られたUnityプログラムノウハウ
「宴」実装時に得られたUnityプログラムノウハウ「宴」実装時に得られたUnityプログラムノウハウ
「宴」実装時に得られたUnityプログラムノウハウ
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編
 

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

Employees become corporate engineers
 Employees become corporate engineers Employees become corporate engineers
Employees become corporate engineersTakashi Hasegawa
 
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]Google Cloud Platform - Japan
 
GDC2013ローカリゼーションサミット報告会
GDC2013ローカリゼーションサミット報告会GDC2013ローカリゼーションサミット報告会
GDC2013ローカリゼーションサミット報告会Hiromi Watanabe
 
Unityとbishamonで作り上げるゲームエフェクトの未来
Unityとbishamonで作り上げるゲームエフェクトの未来Unityとbishamonで作り上げるゲームエフェクトの未来
Unityとbishamonで作り上げるゲームエフェクトの未来Makoto Goto
 
未踏カンファレンス2012「メルコグループと未踏ソフト」(スポンサーPR枠)<字幕付き>
未踏カンファレンス2012「メルコグループと未踏ソフト」(スポンサーPR枠)<字幕付き>未踏カンファレンス2012「メルコグループと未踏ソフト」(スポンサーPR枠)<字幕付き>
未踏カンファレンス2012「メルコグループと未踏ソフト」(スポンサーPR枠)<字幕付き>Daisuke Maki
 
アメーバピグのユーザ体験を定量/定性で捉える方法
アメーバピグのユーザ体験を定量/定性で捉える方法アメーバピグのユーザ体験を定量/定性で捉える方法
アメーバピグのユーザ体験を定量/定性で捉える方法寛 水野
 
AbemaTVのUIデザイン 僕なりの運用の心得
AbemaTVのUIデザイン 僕なりの運用の心得AbemaTVのUIデザイン 僕なりの運用の心得
AbemaTVのUIデザイン 僕なりの運用の心得Shunsuke Matsumoto
 
これまでのあらすじ〜世界初の運用型モバイルARシューティングバトルを作るまでの試行錯誤〜
これまでのあらすじ〜世界初の運用型モバイルARシューティングバトルを作るまでの試行錯誤〜これまでのあらすじ〜世界初の運用型モバイルARシューティングバトルを作るまでの試行錯誤〜
これまでのあらすじ〜世界初の運用型モバイルARシューティングバトルを作るまでの試行錯誤〜Graffity Inc
 
機械学習ベースの自動プレイエージェントを用いたバランス設計効率化の追求
機械学習ベースの自動プレイエージェントを用いたバランス設計効率化の追求機械学習ベースの自動プレイエージェントを用いたバランス設計効率化の追求
機械学習ベースの自動プレイエージェントを用いたバランス設計効率化の追求gree_tech
 
B2B2Cアプリ開発で感じたpush通知の勘所とは
B2B2Cアプリ開発で感じたpush通知の勘所とはB2B2Cアプリ開発で感じたpush通知の勘所とは
B2B2Cアプリ開発で感じたpush通知の勘所とはyukiyama_kdl
 
自動化ツールの違いを探る
自動化ツールの違いを探る自動化ツールの違いを探る
自動化ツールの違いを探るToshiya Mabuchi
 
SAP Inside Track Tokyo 2023 前夜祭 Takayuki Tanaka_Naoto Akiyama.pptx
SAP Inside Track Tokyo 2023 前夜祭 Takayuki Tanaka_Naoto Akiyama.pptxSAP Inside Track Tokyo 2023 前夜祭 Takayuki Tanaka_Naoto Akiyama.pptx
SAP Inside Track Tokyo 2023 前夜祭 Takayuki Tanaka_Naoto Akiyama.pptxssuserc4d605
 
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)Masataka Sato
 
D.N.A. Softwares ご紹介
D.N.A. Softwares ご紹介D.N.A. Softwares ご紹介
D.N.A. Softwares ご紹介IGDA Japan
 
AngularJSとバックエンドサービスAppPotで作る業務システムハンズオン
AngularJSとバックエンドサービスAppPotで作る業務システムハンズオンAngularJSとバックエンドサービスAppPotで作る業務システムハンズオン
AngularJSとバックエンドサービスAppPotで作る業務システムハンズオンTakuya Kitamura
 
アメーバピグとJenkinsと私
アメーバピグとJenkinsと私アメーバピグとJenkinsと私
アメーバピグとJenkinsと私Takashi Maruyama
 
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏Yusuke Hirao
 
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!Yasuhiko Yamamoto
 

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

Employees become corporate engineers
 Employees become corporate engineers Employees become corporate engineers
Employees become corporate engineers
 
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
 
GDC2013ローカリゼーションサミット報告会
GDC2013ローカリゼーションサミット報告会GDC2013ローカリゼーションサミット報告会
GDC2013ローカリゼーションサミット報告会
 
Unityとbishamonで作り上げるゲームエフェクトの未来
Unityとbishamonで作り上げるゲームエフェクトの未来Unityとbishamonで作り上げるゲームエフェクトの未来
Unityとbishamonで作り上げるゲームエフェクトの未来
 
未踏カンファレンス2012「メルコグループと未踏ソフト」(スポンサーPR枠)<字幕付き>
未踏カンファレンス2012「メルコグループと未踏ソフト」(スポンサーPR枠)<字幕付き>未踏カンファレンス2012「メルコグループと未踏ソフト」(スポンサーPR枠)<字幕付き>
未踏カンファレンス2012「メルコグループと未踏ソフト」(スポンサーPR枠)<字幕付き>
 
アメーバピグのユーザ体験を定量/定性で捉える方法
アメーバピグのユーザ体験を定量/定性で捉える方法アメーバピグのユーザ体験を定量/定性で捉える方法
アメーバピグのユーザ体験を定量/定性で捉える方法
 
AbemaTVのUIデザイン 僕なりの運用の心得
AbemaTVのUIデザイン 僕なりの運用の心得AbemaTVのUIデザイン 僕なりの運用の心得
AbemaTVのUIデザイン 僕なりの運用の心得
 
これまでのあらすじ〜世界初の運用型モバイルARシューティングバトルを作るまでの試行錯誤〜
これまでのあらすじ〜世界初の運用型モバイルARシューティングバトルを作るまでの試行錯誤〜これまでのあらすじ〜世界初の運用型モバイルARシューティングバトルを作るまでの試行錯誤〜
これまでのあらすじ〜世界初の運用型モバイルARシューティングバトルを作るまでの試行錯誤〜
 
機械学習ベースの自動プレイエージェントを用いたバランス設計効率化の追求
機械学習ベースの自動プレイエージェントを用いたバランス設計効率化の追求機械学習ベースの自動プレイエージェントを用いたバランス設計効率化の追求
機械学習ベースの自動プレイエージェントを用いたバランス設計効率化の追求
 
B2B2Cアプリ開発で感じたpush通知の勘所とは
B2B2Cアプリ開発で感じたpush通知の勘所とはB2B2Cアプリ開発で感じたpush通知の勘所とは
B2B2Cアプリ開発で感じたpush通知の勘所とは
 
自動化ツールの違いを探る
自動化ツールの違いを探る自動化ツールの違いを探る
自動化ツールの違いを探る
 
SAP Inside Track Tokyo 2023 前夜祭 Takayuki Tanaka_Naoto Akiyama.pptx
SAP Inside Track Tokyo 2023 前夜祭 Takayuki Tanaka_Naoto Akiyama.pptxSAP Inside Track Tokyo 2023 前夜祭 Takayuki Tanaka_Naoto Akiyama.pptx
SAP Inside Track Tokyo 2023 前夜祭 Takayuki Tanaka_Naoto Akiyama.pptx
 
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
 
Yapc::Asia 2013
Yapc::Asia 2013Yapc::Asia 2013
Yapc::Asia 2013
 
D.N.A. Softwares ご紹介
D.N.A. Softwares ご紹介D.N.A. Softwares ご紹介
D.N.A. Softwares ご紹介
 
AngularJSとバックエンドサービスAppPotで作る業務システムハンズオン
AngularJSとバックエンドサービスAppPotで作る業務システムハンズオンAngularJSとバックエンドサービスAppPotで作る業務システムハンズオン
AngularJSとバックエンドサービスAppPotで作る業務システムハンズオン
 
『修羅道』制作事例 モバイルハイエンドグラフィックゲーム実現まで
『修羅道』制作事例 モバイルハイエンドグラフィックゲーム実現まで『修羅道』制作事例 モバイルハイエンドグラフィックゲーム実現まで
『修羅道』制作事例 モバイルハイエンドグラフィックゲーム実現まで
 
アメーバピグとJenkinsと私
アメーバピグとJenkinsと私アメーバピグとJenkinsと私
アメーバピグとJenkinsと私
 
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
 
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
 

More from UnityTechnologiesJapan002

10分でわかる Unityコンピュータービジョン
10分でわかる Unityコンピュータービジョン10分でわかる Unityコンピュータービジョン
10分でわかる UnityコンピュータービジョンUnityTechnologiesJapan002
 
ROSのロボットモデルでバーチャルロボット受肉する
ROSのロボットモデルでバーチャルロボット受肉するROSのロボットモデルでバーチャルロボット受肉する
ROSのロボットモデルでバーチャルロボット受肉するUnityTechnologiesJapan002
 
Unityでロボットの教師データは作れる!
Unityでロボットの教師データは作れる!Unityでロボットの教師データは作れる!
Unityでロボットの教師データは作れる!UnityTechnologiesJapan002
 
産業用ロボット開発におけるUnityの活用
産業用ロボット開発におけるUnityの活用産業用ロボット開発におけるUnityの活用
産業用ロボット開発におけるUnityの活用UnityTechnologiesJapan002
 
建設シミュレータOCSの開発 / OCS・VTC on Unity におけるROS対応機能について
建設シミュレータOCSの開発 / OCS・VTC on Unity におけるROS対応機能について建設シミュレータOCSの開発 / OCS・VTC on Unity におけるROS対応機能について
建設シミュレータOCSの開発 / OCS・VTC on Unity におけるROS対応機能についてUnityTechnologiesJapan002
 
中国深センから盛り上がる、ソフトウェアフレンドリーなロボティクス
中国深センから盛り上がる、ソフトウェアフレンドリーなロボティクス中国深センから盛り上がる、ソフトウェアフレンドリーなロボティクス
中国深センから盛り上がる、ソフトウェアフレンドリーなロボティクスUnityTechnologiesJapan002
 
Unityでお手軽ロボット開発「toio SDK for Unity」最新事例
Unityでお手軽ロボット開発「toio SDK for Unity」最新事例Unityでお手軽ロボット開発「toio SDK for Unity」最新事例
Unityでお手軽ロボット開発「toio SDK for Unity」最新事例UnityTechnologiesJapan002
 
集まれ!Dreamingエンジニア! 〜箱庭で紡ぎ出されるIoT/クラウドロボティクス開発の新しいカタチ〜
集まれ!Dreamingエンジニア! 〜箱庭で紡ぎ出されるIoT/クラウドロボティクス開発の新しいカタチ〜集まれ!Dreamingエンジニア! 〜箱庭で紡ぎ出されるIoT/クラウドロボティクス開発の新しいカタチ〜
集まれ!Dreamingエンジニア! 〜箱庭で紡ぎ出されるIoT/クラウドロボティクス開発の新しいカタチ〜UnityTechnologiesJapan002
 
BIMからはじまる異世界転生 ~Unity Reflect が叶える新しい建築の世界~
BIMからはじまる異世界転生 ~Unity Reflect が叶える新しい建築の世界~BIMからはじまる異世界転生 ~Unity Reflect が叶える新しい建築の世界~
BIMからはじまる異世界転生 ~Unity Reflect が叶える新しい建築の世界~UnityTechnologiesJapan002
 
【Unity道場 自動車編】Unityで実現する産業向けxRソリューション
【Unity道場 自動車編】Unityで実現する産業向けxRソリューション【Unity道場 自動車編】Unityで実現する産業向けxRソリューション
【Unity道場 自動車編】Unityで実現する産業向けxRソリューションUnityTechnologiesJapan002
 
【Unity道場 自動車編】トヨタのxR活用で進める現場DXへの挑戦 ~UnityとHoloLens 2を用いて~
【Unity道場 自動車編】トヨタのxR活用で進める現場DXへの挑戦 ~UnityとHoloLens 2を用いて~【Unity道場 自動車編】トヨタのxR活用で進める現場DXへの挑戦 ~UnityとHoloLens 2を用いて~
【Unity道場 自動車編】トヨタのxR活用で進める現場DXへの挑戦 ~UnityとHoloLens 2を用いて~UnityTechnologiesJapan002
 
【Unity道場 自動車編】空間再現ディスプレイの概要と活用事例
【Unity道場 自動車編】空間再現ディスプレイの概要と活用事例【Unity道場 自動車編】空間再現ディスプレイの概要と活用事例
【Unity道場 自動車編】空間再現ディスプレイの概要と活用事例UnityTechnologiesJapan002
 
【Unity道場 自動車編】 リアルタイム3D技術が支えるデジタルツイン
【Unity道場 自動車編】 リアルタイム3D技術が支えるデジタルツイン【Unity道場 自動車編】 リアルタイム3D技術が支えるデジタルツイン
【Unity道場 自動車編】 リアルタイム3D技術が支えるデジタルツインUnityTechnologiesJapan002
 
【Unity道場 自動車編】モビリティへの活用に向けて
【Unity道場 自動車編】モビリティへの活用に向けて【Unity道場 自動車編】モビリティへの活用に向けて
【Unity道場 自動車編】モビリティへの活用に向けてUnityTechnologiesJapan002
 

More from UnityTechnologiesJapan002 (20)

5分でわかる Sensor SDK
5分でわかる Sensor SDK5分でわかる Sensor SDK
5分でわかる Sensor SDK
 
10分でわかる Unityコンピュータービジョン
10分でわかる Unityコンピュータービジョン10分でわかる Unityコンピュータービジョン
10分でわかる Unityコンピュータービジョン
 
5分でわかる Unity Forma
5分でわかる Unity Forma5分でわかる Unity Forma
5分でわかる Unity Forma
 
ROSのロボットモデルでバーチャルロボット受肉する
ROSのロボットモデルでバーチャルロボット受肉するROSのロボットモデルでバーチャルロボット受肉する
ROSのロボットモデルでバーチャルロボット受肉する
 
Unityでロボットの教師データは作れる!
Unityでロボットの教師データは作れる!Unityでロボットの教師データは作れる!
Unityでロボットの教師データは作れる!
 
ARとUnity-Robotics-Hubの連携
ARとUnity-Robotics-Hubの連携ARとUnity-Robotics-Hubの連携
ARとUnity-Robotics-Hubの連携
 
産業用ロボット開発におけるUnityの活用
産業用ロボット開発におけるUnityの活用産業用ロボット開発におけるUnityの活用
産業用ロボット開発におけるUnityの活用
 
建設シミュレータOCSの開発 / OCS・VTC on Unity におけるROS対応機能について
建設シミュレータOCSの開発 / OCS・VTC on Unity におけるROS対応機能について建設シミュレータOCSの開発 / OCS・VTC on Unity におけるROS対応機能について
建設シミュレータOCSの開発 / OCS・VTC on Unity におけるROS対応機能について
 
UnityとROSの連携について
UnityとROSの連携についてUnityとROSの連携について
UnityとROSの連携について
 
中国深センから盛り上がる、ソフトウェアフレンドリーなロボティクス
中国深センから盛り上がる、ソフトウェアフレンドリーなロボティクス中国深センから盛り上がる、ソフトウェアフレンドリーなロボティクス
中国深センから盛り上がる、ソフトウェアフレンドリーなロボティクス
 
Unityでお手軽ロボット開発「toio SDK for Unity」最新事例
Unityでお手軽ロボット開発「toio SDK for Unity」最新事例Unityでお手軽ロボット開発「toio SDK for Unity」最新事例
Unityでお手軽ロボット開発「toio SDK for Unity」最新事例
 
集まれ!Dreamingエンジニア! 〜箱庭で紡ぎ出されるIoT/クラウドロボティクス開発の新しいカタチ〜
集まれ!Dreamingエンジニア! 〜箱庭で紡ぎ出されるIoT/クラウドロボティクス開発の新しいカタチ〜集まれ!Dreamingエンジニア! 〜箱庭で紡ぎ出されるIoT/クラウドロボティクス開発の新しいカタチ〜
集まれ!Dreamingエンジニア! 〜箱庭で紡ぎ出されるIoT/クラウドロボティクス開発の新しいカタチ〜
 
5分でわかる Unity点群
5分でわかる Unity点群5分でわかる Unity点群
5分でわかる Unity点群
 
5分でわかる Unity Reflect
5分でわかる Unity Reflect5分でわかる Unity Reflect
5分でわかる Unity Reflect
 
BIMからはじまる異世界転生 ~Unity Reflect が叶える新しい建築の世界~
BIMからはじまる異世界転生 ~Unity Reflect が叶える新しい建築の世界~BIMからはじまる異世界転生 ~Unity Reflect が叶える新しい建築の世界~
BIMからはじまる異世界転生 ~Unity Reflect が叶える新しい建築の世界~
 
【Unity道場 自動車編】Unityで実現する産業向けxRソリューション
【Unity道場 自動車編】Unityで実現する産業向けxRソリューション【Unity道場 自動車編】Unityで実現する産業向けxRソリューション
【Unity道場 自動車編】Unityで実現する産業向けxRソリューション
 
【Unity道場 自動車編】トヨタのxR活用で進める現場DXへの挑戦 ~UnityとHoloLens 2を用いて~
【Unity道場 自動車編】トヨタのxR活用で進める現場DXへの挑戦 ~UnityとHoloLens 2を用いて~【Unity道場 自動車編】トヨタのxR活用で進める現場DXへの挑戦 ~UnityとHoloLens 2を用いて~
【Unity道場 自動車編】トヨタのxR活用で進める現場DXへの挑戦 ~UnityとHoloLens 2を用いて~
 
【Unity道場 自動車編】空間再現ディスプレイの概要と活用事例
【Unity道場 自動車編】空間再現ディスプレイの概要と活用事例【Unity道場 自動車編】空間再現ディスプレイの概要と活用事例
【Unity道場 自動車編】空間再現ディスプレイの概要と活用事例
 
【Unity道場 自動車編】 リアルタイム3D技術が支えるデジタルツイン
【Unity道場 自動車編】 リアルタイム3D技術が支えるデジタルツイン【Unity道場 自動車編】 リアルタイム3D技術が支えるデジタルツイン
【Unity道場 自動車編】 リアルタイム3D技術が支えるデジタルツイン
 
【Unity道場 自動車編】モビリティへの活用に向けて
【Unity道場 自動車編】モビリティへの活用に向けて【Unity道場 自動車編】モビリティへの活用に向けて
【Unity道場 自動車編】モビリティへの活用に向けて
 

Recently uploaded

情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 

Recently uploaded (12)

情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 

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

  • 2. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント
  • 3. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 自己紹介 2 池田 早人 Hayato Ikeda 株式会社 バンダイナムコスタジオ / リードプログラマ ・1996年にナムコにハードエンジニアとして入社 ・2003年からモバイルアプリ向けプログラマとして今に至る ・ミリシタでは、クライアントエンジニアのまとめ役として、進行管理や プロジェクトのバージョン管理(Perforce)などを担当 のり子、ジュリア 担当
  • 4. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント ミリシタって、なんなん? 3 『アイドルマスター ミリオンライブ! シアターデイズ』は 株式会社バンダイナムコエンターテイメントからAndroid/iOS用に配信されている アイドルライブ&プロデュースゲームで、略称は『ミリシタ』です。 765プロライブ劇場(シアター)を舞台に 765 ミリオンオールスターズのアイドルたちをプロデュース! ステージでのライブやお仕事、劇場でのコミュニケーションを通じて、 アイドルと「もっとふれあえる」要素がもりだくさん! http://millionlive.idolmaster.jp/theaterdays/
  • 5. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント ライブシーンについて リリース時 5人のアイドルが歌って踊る 配置換えや、衣装変更が任意に出来る 5人が個別のモーションで踊る曲もある(フォーメーション) 51人のキャラで歌い分けが出来る曲もある 途中でスペシャルアピール(別モーション)が入る 運営中 4人や3人や2人で歌って踊る 52人のキャラで歌い分けが出来る曲もある 変身する曲もある 最新 13人のアイドルが歌って踊る 4
  • 6. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント モデルデータについて 1体につき10000ポリゴンくらい(顔1500/髪3000/体5500) 衣装テクスチャは1024×1024を1枚 表情はブレンドシェイプ 5
  • 7. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント ステージデータについて 1ステージにつき15000ポリゴンくらい(ステージ10000/演出系5000) ステージテクスチャは1024×1024が2枚 客席のコンサートライトは1メッシュなので描画負荷は軽い 6
  • 8. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント ポストエフェクトと解像度について 被写界深度(DoF) Bloom Blur フレア(光を被せるエフェクト) UnityのImage Effectsは高品質だがモバイルには重いので、軽量化したシェーダーを独自実装 中間バッファの使い回しでメモリを節約 余分なパスなしで描画と同時にデプステクスチャを作ってDoFを実現 解像度:1280×720 低解像度+MSAA GPU性能の低い端末向けに低解像度モードを用意したが、ジャギーが目立つためMSAAを検討 若干負荷は上がるが描画面積の多いシーンでは解像度を落とす効果の方が高く、メリットあり 7
  • 9. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント タイミングシート(ステージイベントツール)について いわゆるタイムラインツールで、家庭用にあった仕様を元にUnityで新規作成 ライブシーンの演出を作るために使用 ゲームデザイナーやビジュアルアーティストの要望を受けて、改良し続けている カメラ、キャラの位置、キャラの表情、ステージ演出、コンサートライトの動きなど 全て制御している カメラ用とステージ演出用の2種類がある 8
  • 10. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 歌い分け 家庭用アイマスにあった機能で、アイドル毎にボーカルを収録している ユニットを組んだメンバーの位置で歌うパートが異なる曲がある 52名のアイドルから5人を順番に選ぶ組み合わせは52P5で約3.1億通り 1曲2分半として、全部の組み合わせを聴こうと思うと465億秒必要になる(538194日で1474年必要) サウンドはCRIのADX2を使用している ボーカル用に複数チャンネルを使用し、ミュートを使うことで歌い分けを実現した 歌い分けのデータも前述のステージイベントツールで管理している 9
  • 11. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 開発スケジュール ~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
  • 12. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント モバイル開発あるある 「端末での確認は、快適に動くiPhoneの最新機種でしか、やってませんでしたー」 その結果…「iPhone5sやAndroidでは、ガクガクでゲームになりません!」 分かってたけど、ミリシタでもやっちゃいました… なんとかして対応しないとリリース出来ないが、開発メンバーは機能実装で手一杯。 開発プロジェクトとは別に動ける、最適化プロジェクトを立ち上げないと… 11
  • 13. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 『AKANE大作戦』始動 簡単に言うと、Androidで快適にライブが遊べるための最適化プロジェクトの事です! 開発終盤からスタートしたため、開発チームとは別ラインで動ける スペシャルチームを結成しました。 コードネームを付けた方が盛り上がりそうなので、ひとまず『AKANE大作戦』と命名。 Android Kousoku-ka And NativE-ka 大作戦 12 • 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
  • 14. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 『AKANE大作戦』のアプローチ プロジェクト設定の見直し 3D描画部分の高速化 CPUとGPUを効率良く見て行く 2D描画部分の高速化 CanvasからSpriteへ、透明部分の無駄な描画はないか、イメージのアトラス化など スパイクさせない工夫 GCをしない、させない、やらせない 13
  • 15. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 『AKANE大作戦』の目標 SetPassCall(DrawCall)の削減 GPU負荷の軽減 テクスチャーのアトラス化 Indexバッファの統合 マテリアルの削減 描画順序の調整 CPU負荷の軽減 揺れものの計算処理の高速化 処理のスレッド化(仕事をしてないCPUに働いてもらう) メモリの最適化 GCを発生させないための工夫はないか? 結果として、平均FPSが60に近づくようにする。 (=16.6666…ms内に処理を終らせる) 14
  • 16. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 『AKANE大作戦』のポリシー ビジュアルのクオリティは下げない 多くの端末に対応させる(描画設定) ギリギリまでエンジニアで頑張る ポストエフェクトなしで… 揺れ物どうしよう… LoDの検討… フレームスキップは… レンダリング解像度を下げる… Boneのインフルエンス数を減らす… 15
  • 17. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント プロファイル 大まかなCPU処理の傾向はUnityProfilerで見れる GPUを見る場合は、Qualcommが配布しているSnapdragon Profilerを使う 計測環境を整えて、数値化して比較する 闇雲に最適化案を実装しても効果が計測出来ないので、変更を入れた場合は面倒でも 必ずProfileして、数値化して比較する 大きな変更も大した効果が無かったり、逆に些細なことが大きく影響したりするので 必ず計測環境を整えて監視することが重要 端末のクセを知る事も重要 機種により性能も動作の癖も千差万別なので、通常はこうしたらこうなるだろうという思い込みが 外れることは日常茶飯事 また、発熱によるクロックダウンの傾向は知っておいた方が良い 16
  • 18. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 改修のアイデア 『AKANE大作戦』では様々な最適化のアイデアを出してもらい、リスト化し 優先順位を付けて、実装とテストを繰り返しました 数μSECでも縮められるなら、トライしてみる価値はある ときには明らかに勝算が無さそうな事でも、あえて試してみることも大事 別の事で役に立つこともある! 頭の中だけで判断せず、たくさん手を動かすことが重要 17
  • 19. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 実装とテスト P 最適化アイデアの優先順位付け D 実装 C ビルド&計測(Profile) A 更なるアイデア出し ※ Plan(計画)→ Do(実行)→ Check(評価)→ Act(改善) テストしやすいように、最適化項目をON/OFF出来るようにしておく ビジュアルアーティストにチェックしてもらう時にも楽になる 負荷の重いキャラ(重い子5)で、計測する 18
  • 20. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Unityに関して ゲームエンジンを使っている以上、出来る事と出来ない事がある マルチスレッド化は、早めに手を引いた 短期間で実装出来ない事はやらない そのうちUnityが対応してくれる機能もある Uniteの講演動画や、Unity道場の資料はとても役に立ちます Unity ForumやUnity Issue Trackerも活用してます リリース後にUnityのバージョンを上げるのは大変なので、慎重に! 開発中は出来るだけ最新版を使うようにしてました 19
  • 21. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 日々改善 リリース後も最適化作業は継続中! ポストエフェクトの改修 マテリアルの統合 ステージ演出の軽量化 アニメーションシステムの独自実装による、処理負荷とデータサイズの削減 GCの削減 新機能の実装も行われているので、定期的にProfileを実行しています。 20
  • 22. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 13人ライブ それは昨年末、企画・開発プロデューサーの「ライブで5人以上出せない?」で始まった… 実は負荷テスト用に5人以上のキャラを表示する仕組みは、過去に用意していたので ライブで15体表示する検証用プロジェクトをサクっと作成したところ 「あれ?けっこうちゃんと動く!」 と言う経緯で、3ヶ月弱で が完成しました。 13人ライブ用に、メモリ削減や負荷軽減のための特別な実装は行っていません。 バランス良く全体の負荷を下げる事で実現しています。 今までの最適化の積み重ねです。 塵も積もれば13人踊る! 21
  • 23. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 前半まとめ 最適化の工数は事前に見積もっておきましょう Profileは重要です 効果の見える化をしよう 最適化のPDCAを回そう どんな些細な事でも、「ちりつも」で大きな結果となる あと、コードネームを付けると楽しく最適化出来る… かもね! 22
  • 24. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント プロフィール 23 (*) ビジュアル系プログラマー … モーション、グラフィクス系プログラマーのこと。 けっしてかっこいいわけではありません。
  • 25. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント ミッション 24 見た目を変えずに 『アセットの作り直し』はしない キャラのドローコールを減らそ う
  • 26. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント REPORT 25 25→171体あたりのドローコール サブメッシュ統合 モデル描画の細い制御が可能に Command Buffer
  • 27. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント キャラ のモデルはこうなっております 26 パス2パス1 反転ポリゴンによる描画 頂点シェーダーで膨らませる メッシュは具と共通 りんかく線 パス1:本体 パス2:りんかく線 シェーダー 服 スパン コール 肌 キャラ カラー
  • 28. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 立ちはだかるサブメッシュの壁 27 ドローコールを まとめたい でも…… サブメッシュの壁は越えられない
  • 29. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Model と Mesh と SubMesh のわかれめ 28 Model 体 Sub Mesh 頂点構造の違い マテリアルの違 い Mesh 頭 (省略)
  • 30. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 29 ところで
  • 31. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 一般的な描画の話 30 頂点バッファー インデックスバッファー 頂点の位置、UVなど 頂点を結ぶ順番 描画に必要なもの 1 ( 1.0, 1.0, 0.0) 2 ( -1.0, 1.0, 0.0) 3 4 ( 1.0, -1.0, 0.0) ( -1.0, -1.0, 0.0) 三角形 1 1-3-2 三角形 2 3-4-2 1 2 3 4 マテリアル (今回は省略)
  • 32. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Mesh クラス 作る系メソッド 31 いる いらない インデックス トポロジー 位置 UV 法線 カラー インフルーエンス 頂点に関するメソッドはサブメッシュの指定が不要 (*) ミリシタ調べ。Unity 5.6 の場合。 サブメッシュ指定 SetIndices() SetVertices() SetUVs() boneWeight s SetNormals( ) SetColors() SetTangents() タンジェント
  • 33. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 『Mesh』や『SubMesh』って? 32 ひとつの頂点バッファーを 複数のサブメッシュで小分けに描画している? 仮説 Mesh 頂点バッファー Sub Mesh インデックス バッファー Sub Mesh インデックス バッファー Sub Mesh インデックス バッファー SubMesh = インデックスバッファー?
  • 34. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント ネイティブ実装なら 33 インデックスの範囲指定で、部分 or 全体を描画 頂点バッファー インデックスバッファー Mesh 頂点バッファー インデックスバッファー インデックスバッファーをひとつだけつくる
  • 35. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Mesh 頂点バッファー Sub Mesh インデックス バッファー Sub Mesh インデックスバッファーーーーーーー SubMesh を追加すればいいんじゃない? 34 全 SubMesh をマージした SubMeshを追加
  • 36. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 試してみよう 35 何も変わらない ちゃんと出た! できた! サブメッシュだけを追加してみた マテリアルの配列を拡張、りんかく線だけのマテリアルを追 加
  • 37. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント マージ SubMesh の追加 SubMesh の追加はこんな感じです 36 var rend = go.GetComponent<SkinnedMeshRenderer>(); Mesh mesh = rend.sharedMesh; var new_indices = new List<int>(); 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++; mesh.SetTriangles(new_indices.ToArray(), mesh.subMeshCount - 1); インデックスをひとつのリストにコピー 全 SubMesh の…… SubMesh の数 を増やしておく マージされた SubMesh を セット
  • 38. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Material の追加 Material の追加はこんな感じです 37 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; ひとつ大きなサイズの配列を確保 りんかく線なしのシェーダーに置き かえる りんかく線のみのマテリアルをセット
  • 39. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント たぶん、こう Unity の中身を想像してみた 38 mesh.vertexBuffer.Bind(); for(int i = 0;i < mesh.subMeshes.Count;i++) { mesh.materials[i].Bind(); mesh.subMeshes[i].DrawIndexed(); } (*) 疑似コードです サブメッシュごとに描 画 マテリアルをバインド 頂点バッファーをバインド インデックス描画 (ドローコール)
  • 40. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント もっと減らしなよ~ お仕事結果 39 クオリティーを下げない 5人いますから(今は最大13人) あまり減ってない? 25→17 『アセットの作り直し』もない ローンチにも間に合ったよ!
  • 41. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 最適化前 40 (*) UI 等も含みます
  • 42. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 最適化後 41 44 → 36 8 Draw call の減少 (*) UI 等も含みます
  • 43. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 次の 目標 42 マテリアル LOD New! 近距離 遠距離 1ドロー化
  • 44. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント マテリアルLOD の要件 43 サブメッシュ単位のビジブル制御 High LOD Low LOD Show Show Show リフレクション なし あり なし A B A + B
  • 45. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Command Buffer 44 サブメッシュ単位で描画できる CommandBuffer.DrawRenderer()
  • 46. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント SkinnedMeshRenderer の描画を off にするには? 45 Renderer.materials[ ] を空っぽにする スキニングは生きている ついでにフラスタムカリングも enabled を false にする スキニングまで止まっちゃう!
  • 47. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 描画だけ Off SkinnedMeshRenderer の描画を off にするには? 46 var rend = go.GetComponent<SkinnedMeshRenderer>(); org_materials = rend.materials; rend.materials = new Material[0]; 描画のときのために保存しておく 大きさ 0 の Material 配列を セット
  • 48. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Command Buffer 47 Command Buffer を作る CommandBuffer command_buffer = new CommandBuffer(); command_buffer.name = "Nantoh“; Camera.main.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, command_buffer); 名前をつけておくと便利です カメラに関連付ける
  • 49. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Command Buffer 48 毎フレームの描画 command_buffer.Clear(); if(rend.isVisible) { for(int i = 0;i < org_materials.Length;i++) { command_buffer.DrawRenderer(rend, org_materials[i], i); } } 前のフレームの描画コマンドを削除 フラスタムカリングの結果を利用
  • 50. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Materials 空っぽ化前 49
  • 51. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Materials 空っぽ化後 50 ↑ こ の あ た り に 注 目
  • 52. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Command Buffer の良いところ 51 描画順のコントロールが容易 サブメッシュ単位でのビジブル制御 マテリアルの切り替えも簡単
  • 53. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Command Buffer おまけ 52 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 を関連づける
  • 54. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 応用例 53 サブメッシュ単位のビジブル Wire on shade(デバッグ用)
  • 55. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント サブメッシュ単位のビジブル 54
  • 56. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント Wire on shade(デバッグ用) 55 Mesh 頂点バッファー ワイヤーフレーム用 SubMesh トポロジーは “Lines”
  • 57. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント 最適化の考え方 ~ AKANE 大作戦の場合 ~ 56 Unity は『ブラックボックス』? でも『謎のテクノロジー』ではない Unity の仕様を眺めているだけではダメ ネイティブ実装の知識を生かした高速化 一般的な描画手法をどうやって Unity 上で実現するか
  • 58. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント よくある質問 「どうして『AKANE 大作戦』なの?」 57 高速化を始めたのは 2017 年のお正月
  • 59. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント よくある質問 「どうして『AKANE 大作戦』なの?」 58 高速化を始めたのは 2017 年のお正月 今年の干支は酉(とり)
  • 60. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント よくある質問 「どうして『AKANE 大作戦』なの?」 59 高速化を始めたのは 2017 年のお正月 今年の干支は酉(とり) 西 ← 酉 → 茜
  • 61. ©窪岡俊之 ©BANDAI NAMCO Entertainment Inc. 配信元:株式会社バンダイナムコエンターテインメント よくある質問 「どうして『AKANE 大作戦』なの?」 60 高速化を始めたのは 2017 年のお正月 今年の干支は酉(とり) 西 ← 酉 → 茜 命名『AKANE 大作戦!』