2014年5月21日水曜日

[UE4] Androidでレンダリング解像度を変えてみよう!!

[UE4] Androidパフォーマンスチェック!!、の続きです。

さて、せっかくなので次はレンダリング解像度を変更して、パフォーマンスをみてみよう!!
UE4には、起動時にデバイスの種類を判別して、そのデバイス合ったパフォーマンス設定を適用する、という機能があります。
起動時のログをみてると、Nexus7(2013)は、DeviceProfile=Android_Adreno320で実行されているのが分かります。

各DeviceProfileの設定は、以下のファイルに書かれています。
<Install Dir>\Unreal Engine\<Version>\Engine\Config\BaseDeviceProfiles.ini
----------------------------------------------------------
[Android DeviceProfile]
DeviceType=Android
BaseProfileName=
+CVars=r.MobileContentScaleFactor=1
...
[Android_Mid DeviceProfile]
DeviceType=Android
BaseProfileName=Android
+CVars=r.MobileContentScaleFactor=0.8
...
[Android_Adreno320 DeviceProfile]
DeviceType=Android

BaseProfileName=Android_Mid
----------------------------------------------------------
この場合、
[Android]の値 -> [Android_Mid]の値で上書き -> [Android_Adreno320]の値で上書き
となるので、Nexus7(2013)でのMobileContentScaleFactorは0.8という事になります。

で、MobileContentScaleFactorがどういう値かというと、コードには、
// CSF is a multiplier to 1280x720
と書いてあるので、1280x720をベースにした解像度のスケール値という事のようです。
(ちなみにiOSでは、違う意味合いのようなので注意!!)

という訳で、レンダリング解像度を変更してみましょう。
プロジェクト特有のiniファイルは、
<My Documents>\Unreal Projects\<Project Name>\Config
に置くようなので、今回は、
<My Documents>\Unreal Projects\Mobile Temple 4.1\Config\DefaultDeviceProfiles.ini
というファイルを作成して、以下のように記述します。
----------------------------------------------------------
[Android_Adreno320 DeviceProfile]
DeviceType=Android
BaseProfileName=Android_Mid
+CVars=r.MobileContentScaleFactor=0.4
----------------------------------------------------------

さて、これで作ったビルドを実行してみると、結果は以下の通り。
ScaleFactor=0.4, 12FPS, Frame:84ms, Draw:40ms

レンダリング解像度が半分になった!!
デバッグ出力が画面からはみ出ちゃって、読めなくなっちゃったけど、まあその辺はご愛嬌(^_^;
前回のScaleFactor=0.8のデフォルト状態と比べても、ほとんどフレームレートは変わってないので、drawcallそのものがボトルネックみたい、という読みは当たってたっぽい(^o^)

せっかくなので、他の値も試してみました。
ScaleFactor=1.0, 12FPS, Frame:80ms, Draw:35ms
ScaleFactor=1.0。
あまりフレームレートは変わらず。Adreno320なら720p位がちょうどいい落としどころなのかも。

ScaleFactor=2.0, 7FPS, Frame:138ms, Draw:68ms
ScaleFactor=2.0。
超綺麗、だけどさすがに重い。っていうかデバッグ出力が小さすぎて読めない(^_^;
さすが720pの倍解像度...、という訳ではなくてNativeResolutionでClampしているようなので、Nexus7(2013)の解像度1900x1200でレンダリングしているものと思われます(未確認)。

うーん、.iniファイルでGPU毎にレンダリング設定を変えられるのは嬉しい機能だけど、やっぱAndroidの機種対応は大変だなぁ(^_^;
EpicがちゃんとGPU毎のUE4最適設定をしてくれるといいのだけど…。
まだAdreno系しかデバイス認識はしてないっぽいけど、他のメーカーのデバイスはとりあえず[Android_Low/Mid/High]に振り分けてくれるのかな?手持ちのデバイスがないから確認出来ず。
Nvidia Tegra K1には割と力を入れてくるっぽいので、次当たりは入ってくるかも。

UNREAL ENGINE 4.2 UPDATE PREVIEW
  • Lots of iOS, Android, and HTML5 improvements – full details will be in the final release notes.
まあ、4.2ではAndroid周りも書ききれないほどのアップデートが入るようなので、期待しましょう~(^o^)

0 件のコメント:

コメントを投稿