講演ファイルのダウンロード(PDF)

Unity for Newニンテンドー3DS
Hiroki Omae@
Unity Technologies
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Unity for Newニンテンドー3DS って何?
• Newニンテンドー3DS をサポートするUnity
• Unity 5 ベース
• Newニンテンドー3DS の開発ができる開発者は自由
に利用可能
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Newニンテンドー3DS
• Newニンテンドー3DSのサポートを求める声は度々頂いていた
• 他のハードとだいぶ違うので、実際に対応してみなさんにメリット
があるものが提供できるか慎重に調査研究を実施(8ヶ月くらい)
• 市場のiOS/Androidのアプリをいくつか選んで移植可能性を検討した
ところ、8割以上のゲームはそのまま移植して動作するのでは、
と結論
• それならメリットがあるから、やろう!と判断
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Newじゃないニンテンドー3DS は?
• アーキテクチャ的には近いので、技術的にはサポート
可能
• ただし、メモリ/CPUの両面から、Unityを使って開発する
にはかなり制限がある
• 市場のiOS/Androidのアプリで移植可能性を検討したとこ
ろ、選んだタイトルのうちの3割くらいが可能性があった
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
リリースプラン
• 2015年夏:任天堂に提出可能なベータ版を
リリース / 一部クローズになる可能性あり
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
トピック
• 行った調査研究と考え方の話
• Newニンテンドー3DS 向けにUnityでゲームを移植・
開発した話
• 実機デモ
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
調査研究
• モチベーション
• Newニンテンドー3DSでUnityを使って、どのくらい
みんなのゲームが動くのかが知りたい → 動くゲームが多いならやる価値あり
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
調査研究
• 方法
• 市場で現在出ているUnity利用のゲームを調査 → アプリのメモリ
使用量やCPU使用率などをチェック
• ハードのパフォーマンスを比較検証
• ユニティ・ゲームス・ジャパンで扱っているゲームなど、実際に
移植してみてデータを取る
• その結果からかなり高精度で判断できるはず!
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
ということで開発開始
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
IN THE BEGINNING…
•
•
•
•
画面にキューブを出す テクスチャを追加 スクリプトのサポートを実装 物理のサポートを実装 •
…開発は続く…
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
サンプルプロジェクトで検証
• 大体一通りの機能を実装したので…
• 2Dプラットフォーマーや
3Dシューターでまずは検証
• キー入力やオーディオなども
テスト
• そして実際のゲームの移植に入る(3タイトルく
らいチャレンジ)
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
ねじ巻きナイト2
• Robot Invaderの傑作アクションゲーム
• Wii U版をユニティ・ゲームス・
ジャパンで担当
• 製品リリースするつもりで
Newニンテンドー3DSに移植開始
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
*画面は開発版です
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
*画面は開発版です
3DSへのゲーム移植時の課題
• メモリ容量が他のプラットフォームより少なめ • シェーダの制限がある • 画面が2つ/立体視対応で3回描画 • AOTのみのサポート(iOSや他のコンソールも同様)
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
最初にやったこと
• オリジナルのゲームは Unity 4.3 ベース • Unity 5の自動アップデートで5.1にアップグレード • 問題なく動作!🙌
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
テクスチャの最適化と調整
• オリジナル版はRetina用に高解像度のテクスチャを使用=
3DSの解像度( 400 x 240 ドット ) では不要 • とりあえずすべてのテクスチャサイズを64x64まで下げる • 汚いけど動く • 画面の見た目の悪い部分のテクスチャサイズを上げて調整 • 最大 512x512まで上げる
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
スマートフォン版とのメモリ使用量比較
• ゲームによって削減率は違うが、テクスチャサイズ
を中心にリソースを小さくできるのでかなり削減さ
れる
• 大体50~60%くらいのメモリ使用量に。大きく減る
ものは40%以下にも。
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
スマートフォン版とのメモリ使用量比較
ナイト2
Block
Legend
2D
Space
Platformer Shooter
Android
(Nexus 5)
260MB
95MB
102MB
62MB
New
Nintendo
3DS
92MB
69MB
42.4MB
37.83MB
ねじ巻き
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Unityでのスクリプト実行速度
Time to Generate 1024 x 1024 x 128 Mandelbrot Set
(shorter is better)
Android Nexus 5 (Mono)
2.33
iPad Mini Re=na (IL2CPP)
2.52
New Nintendo 3DS (IL2CPP)
2.76
4.51
iPad Mini Re=na (Mono)
4.98
Android Nexus 4 (Mono)
5.35
iPhone 5 (Mono)
0.00
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
1.50
3.00
4.50
6.00
マンデルブロ集合での単純比較
• New Nintendo 3DSでのスクリプト実行性能(il2cpp)
は、Nexus 5(mono)や iPad mini Retina(il2cpp) なみ
の性能を発揮。
• 現在のミドルレンジのスマートフォンを対象にした
ゲームならまったく不足ないパフォーマンス
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
エンジンの最適化: 描画 & CPU
• 任天堂さんにもいくつかアドバイスをいただきました
• さらにUnityストックホルムオフィスに遠征
• Unityの中核デベロッパーの一人、Erik Hemmingと一緒
に描画エンジン、ShaderLabの対応改善、最適化など
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
エンジンの最適化: Z-Buffer更新On/Off
• Z-­‐Bufferの必要ないゲーム(2D/2.5Dなゲーム)では、
更新をオフにできる設定を追加 • メモリ/GPUバンド幅に貢献
Z-Bufferが必要な描画
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
エンジンの最適化: Z-Buffer更新On/Off
2D Platformer での速度比較(fps)
130
112.2
104
98.1
78
52
2D Platformer
26
0
Z-­‐Buffer ON
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Z-­‐Buffer OFF
ねじ巻きナイト2: 2画面化
• もともとは1画面ゲームなので、
タッチ画面にUIなどを追加
*画面は開発版です
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
CPUパフォーマンス:ねじ巻きナイト2
• 3画面(上両眼+下画面)を描画しながら60fps維持
• CPU的にはインゲームでも58%空きの状態
• ねじ巻きナイト2はNexus 5でも40%のCPU稼働率なので、
同じくらいのパフォーマンスが発揮できている
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
CPUパフォーマンス:ねじ巻きナイト2
順位(処理時間)
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
実行時間(%)
実行時間(%) exclusive
関数名
種類
1
58.29
58.29
System Idle Thread
空き
5
20.82
0.03
RenderManager::RenderCameras
描画
15
6.96
0.02
il2cpp::vm::Runtime::Invoke
スクリプト
シェーダーの実装
• 3DSはプログラマブルな vertex shader を搭載 • ただし、プログラマブルなpixel shaderがない☹
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
ピクセルシェーダー対応
• ShaderLabを使った一般的な解決方法をチャレンジ中
• ShaderLabから3DS用の固定ピクセルシェーダーに
マップ
• 結構大変なので最初のリリースでは別のやり方を
採るかも
• 最終的にはこの方法で解決したい
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
スクリプト
• il2cpp のみ対応
• il2cpp=AOTなので、AndroidのようなJIT対応のプラットフォームから
移植する場合はテンプレート+動的コード生成を使用するようなコー
ドで移植に問題が出る(JSONライブラリなどでよくぶつかる問題)
• iOSや他のコンソール等からの移植の場合は問題にならない
• il2cppはやっぱり速い!(数学系のコードでは最大5x)
• 今後他のコンソール機もil2cpp中心に → 移植の問題も減るものと期待
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
スクリプト対応: ねじ巻きナイト2
• ねじ巻きナイト2は、Android & iOS でリリース(Wii Uでも予定)
• 今回はAndroid/iOSのプロジェクトデータからNew Nintendo 3DSに移植
• AndroidのビルドではJIT機能を使うコードあり、一部コードを変更
• 検索&置換
#if (UNITY_IOS)
→
#if (UNITY_IOS || UNITY_N3DS) • iOSのGame Centre関連の参照を修正 • 動作!
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
ねじ巻きナイト2: オーディオサポート
• iOS/Androidではラインタイムでは Ogg Vorbis
フォーマット • Unity for New Nintendo 3DSでは、エディタ上で
ビルド時にNintendo 3DS用フォーマットに変換 • サウンドエフェクトは圧縮してメモリ内に置く • 音楽はストリーム再生に設定
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
DEMO
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
エンジンの最適化: UI再描画の抑制(今後)
• ゲームは毎フレーム再描画が必要 • UIは更新が必要ない場合あり→ 変更があるときの
み描画したい • 3DSはフレームバッファを再利用できる • UIの描画は時折重いので、不要な時は特定画面を
描きなおさないオプションの追加を検討 • Screen.SetRedraw(false) • Screen.SetDirty()
*画面は開発版です
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
エンジンの最適化: 2Dモードの改善 (今後)
• 3Dボリュームはオフにできる
• 3Dボリュームがオンの場合は3画面描画するが、オフの場合
は2画面で済む
• CPU、GPUともに空きができる
• この空きをどう使うべき?(今後)
• アンチエイリアス処理など
• ゲーム側にどっちのモードで描画中かわかるようにする
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
まとめ
• Newニンテンドー3DS をサポートするUnityをリリースします
• ミッドレンジのスマートフォンをターゲットにするような
ゲームならサポートは一考の価値あり
• 2015年夏に任天堂に提出可能なベータ版をリリース準備中
• UGJが先行してタイトルをリリースすることでエンジンの完成度
を高めます
• Unityのブースでさわれるので是非触ってみてね!
COPYRIGHT 2015 @ UNITY TECHNOLOGIES