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
© Copyright 2024 ExpyDoc