SHIELD Stories が興味深い

NVIDIAはいくつかのゲームの移植感想記事を公開している。これの内容が絶妙に興味深い。

iOSとかXbox、PSのようなプラットフォームだとなかなか移植記が話題になりづらい気もするが、冷静に考えるとNVIDIA SHIELD専用ゲームって覚えがないので重要なポイントと言える。
下記のゲームだとOUYA出身のWhispering Willowsを除くと、Android上ではSHIELD限定となっている(= 要するにPCゲームあるいはコンソール志向のゲームである)。個々のエントリはここに挙げた以外にも移植時につまづいた点やチョイスをかなり語っている。

Doom3 BFGは、DOOM3に過去作をセットにしたリファイン版。SHIELDでは、GLESではなく素のOpenGLを使用。ちなみに、DOOM3 BFGのソースコードGitHubに上がっているが(GPL https://github.com/id-Software/DOOM-3-BFG )、基本的にWin32ポートのみでAndroidサポートは含まれていない。

We narrowed it down to FMOD and Miles, both of which have nice APIs with great support. Ultimately, we chose FMOD because it had support for low latency audio on Android (Rad Game Tools tells us they are planning to add this to Miles).

移植元ではオーディオにMultiStream(PS3のオーディオ合成ライブラリ)とXaudio2を採用していて、AndroidではFMODを選択したとしている。MultiStreamもXaudio2もプラットフォーム標準のオーディオライブラリで、追加の出費を伴なってもAndroidのOpenSLを避けるのはミキシングやストリーム機能性の問題か。
SHIELDにとって不幸なのは、GLES3の登場でデスクトップOpenGLとGLESの差が急速に埋まってしまったことかもしれない。もちろん、常識的なパフォーマンスやキャプチャ等Android環境の開発プラットフォームとしての優秀さは有るかもしれないが。。(他のSHIELD限定APIとしてはCUDAも有るが。。)

Never AloneはUnity4製のパズルプラットフォーマーで、日本ではUnityゲームスがパブリッシャ。こちらもAndroid版はSHIELD限定で日本の公式サイトには特に言及が無い( http://www.unity-games.jp/games/neveralone/ )。

Unity 4.3 only allowed us to render graphics in the gamma color space for the Android platform but the Tegra chips support linear color space. Luckily the NVIDIA team provided in-depth support on this issue and a modified playback engine for Android which supported linear space in the render textures. This saved us several days of cumbersome changes to our shaders.

興味深いのは、NVIDIAと協業してlinear color spaceへの対応をUnity4(のAndroid版プレーヤ)に追加したとしている点。Unity4のリリースは2015年内で終了なので、Unity4製のゲームは絶妙な状況にある。Never Aloneでは5への移行は"what went wrong"に挙げている。

Whispering Willowsはこの中では唯一日本未発売で、かつ、OUYA出身のゲーム。なのでこのゲームは通常のAndroidiOSにも移植されている。2DベースのアドベンチャーでUnity製。

NVIDIA reached out to us after seeing Whispering Willows on the OUYA console. They thought it would be a great fit for their platform, and once we tried out their devices we certainly agreed!

元々モバイルプラットフォーム(であるTegra4を採用したOUYA)をターゲットにしたゲームだけあって、Challengesに挙げているのはUI上の事項でパフォーマンス上の問題には触れていない。

Chariotは2DパズルプラットフォーマーだがUnity製ではなく自前のエンジンを使用している。モバイル出身でもなく、最初からホームコンソールでのローカルCo-Opをターゲットにしたタイトルとなっている。日本語版のパブリッシャはクロスファンクション( https://www.crossfunction.co.jp/chariot_p4/ )。
ゲームはPS3にも移植されているものの、実際にはPS4、XboxOne、WiiUをターゲットにしたデザインで、ゲーム中でもMRTの使用を挙げている:

... However, the game was built with deferred lighting and many post-process effects, so MRT support was a necessity if we wanted to keep to exact same look and feel as on other consoles. Thankfully, targeting the Shield TV has allowed us to move to OpenGL ES 3 which supports MRT out-of-the-box.

実際blog中のスクリーンショットのように、薄暗い中を進む幻想的なデザインになっている。
"Challenges"に挙げているのも興味深いが、"What went wrong"に挙げているのは、GoogleのゲームプラットフォームであるGoogle Playへの統合のみ。これだけでかなりの分量を割いている

One other thing that puzzled us is why you can't reset a published achievement in the developer console. It's true that there's a REST API to do that, but you need to create a Web app and be logged with the user for which you want to reset an achievement.

... マジで?
他にコンソールとの違いで挙げているのは:

  • Google+プロフィールが無くてもゲームを開始することができるが、この場合本当にローカルプロファイルが無いためオフラインセーブデータをオンラインプロフィールと関連付ける手段が存在しない。
  • ユーザがオフラインだとPlayサービスは一切機能しない。例えば実績をオフライン中にunlockしても、オンラインになった際に自動的に同期されたりしない。
  • ゲームは最低5つの実績を定義しないとオンラインのPlayサービスで使用できないため、実績を定義しない状態だと他のPlayサービスの機能を使えない。

たしかにSDKとしてはかなり厳しいというか、SteamworksなりXbox LIVEの考察を単に採用すれば良いと思うんだけど。。現状のGoogle PlayのゲームサービスはどちらかというとFacebookのようなWebサービスに近いものがある(実際Webサイトから実績を供給することも可能になっている)ので、コンソールゲームの文化によくマッチしていないのかもしれない。