見出し画像

ゲーム開発から見たAndroid端末とiOS端末

ゲームを開発していると、iOS向けよりAndroid向けの方が大変と言う話は結構あるあるだと思います。

何が大変なのかと言う所を言語化したいと思ったので何となく記事を書く事にしました。

Android端末種類の豊富さ

iPhoneは毎年新しいのが出てきますし、iPad / iPad Proなども出てきます。
端末の種類も iOSであっても画一的ではないのです…

しかし、Androidはそれと段違いに種類が多いです。
そもそも iOS端末はApple社からしか出ませんが、Android端末は様々なメーカーから発売されています。
ざっと上げるだけでも SONY(Xperia) / Samsung (Galaxy) / Google(Pixel) / Sharp( AQUOS ) / Fujitsu ( arrows ) 等々…沢山あります。

メーカー独自の機能を搭載していたりとかもしていますが、それが原因でアプリに悪い影響を及ぼすといったこともまぁ・・あります・・。

iOSではデバイスが1社から供給されていますが、Androidでは様々なメーカーから多種多様なデバイスが提供されており、色々な端末に対応する必要があり大変なのです…

OSのバージョンの分布…

iOSは新しいバージョンに追従していっているユーザーが多いのですが、Androidはそうではありません。
この大きな違いは、Appleが比較的古い端末でもOSアップデートしていますが、AndroidではメーカーにOSアップデートが委ねられていますがあまりOSアップデートされないメーカーもあるためです。

iOSでは最新のOSバージョンから2世代前位までで利用者の90%以上をカバーできるような状況です。

それに対してAndroidは本当にまちまちです。2023年3月現在、Androidの最新バージョン13を利用している人は本当に一握りです。
いまだに9や10のバージョンの人も多いというのが実情です

OSが新しくなると、機能が増えたりします。(例えば使えるAPI増えたり…)
皆が新しいOS使っている前提であればその新機能ありきで考えられますが、みんなが新しいとは限らないならそうはいきません。
古いOSを使っている人の事も考慮しなければなりません。

GPUメーカーの違い…

ゲームを作るうえでGPUは欠かせない存在です。GPUでは3Dグラフィックスの高度な処理などを担ってくれます。
GPUは色々とありますが、特定のGPUだとうまくグラフィックスが表示されない、ひどい時にはアプリケーションがクラッシュしてしまう等の問題があります。これも種類が多いと、その対応に追われる事になります。

iOSでも、特定のGPUを持っている端末だけチラツキが発生するみたいな問題はたまにおきます。
しかし、Androidに比べて、その頻度は少し下がってきます。

理由として、iOSは基本的にApple社のGPUが搭載されているのですが…Androidでは複数のメーカーからGPUが供給されています。

2023年現在、大きく三つのメーカーのGPUがAndroid向けに出荷されています
・Qualcom社のAdreno GPUシリーズ
・Arm社のMali GPUシリーズ
・Imagination Technologies社のPowerVR GEシリーズ

メーカーによってやっぱり癖があって、その辺の際を吸収したりしなきゃいけないのです。。
結構あるのですが…MaliGPUでは動作していたプログラムがAdrenoGPUではクラッシュする・画面がチカチカするみたいな現象も起きます…
(逆もありますが、どちらかと言うとAdreno GPUでのみ起きる現象の方が多いです)

他にも分かりやすい話だと、MaliGPUではMSAAはx4での利用、AdrenoGPUではMSAAはx2での利用、PowerVRGEではMSAAはx2 での利用と言った感じで…それぞれのハードウェアによって最適解が異なるという所です。

このような感じで、GPU毎以外にも、メーカーごとの癖もあったりして、厄介です。

AndroidのGPUの種類

iOSでは基本的に新しい機種は基本的にはマシンパワーが向上したモノ。
また廉価版についても、中身のGPUは何世代前のものを流用すると言った形になっています。
※iPadPro向けと言った特殊な状況を除きます

しかし、AndroidのGPUでは少し事情が違います。
GPUメーカーと端末のメーカーが分かれているのもあってか…
GPUメーカーからハイエンド・ミドルエンド・エントリーモデルのような形で、同じ時期でも高くて強いGPU、価格を抑えたコスパ重視のGPUなど状況が分かれてしまっています。

このような状況もあってか、Androidでは同時期に発売されている端末であっても描画性能がかなりマチマチになってしまっています。
同時期であっても性能差があり、これをカバーする必要があり大変になります。

Galaxy同じ名前でも別GPU搭載

一部では有名な話ですが…
SamsungのGalaxyシリーズは名前が一緒でも地域によって搭載しているGPUが異なるという事です。(正確にはSoCも異なっており、そのためGPUに違いが出るのですが…)

例えばGalaxy S21では、日本や米国では「Qualcomm Snapdragon 888」というQualcom社のSoCを搭載していますが、ヨーロッパなどの地域ではSamsung社の「Exynos 2100」というSoCを搭載しています。
この違いによって、日本や米国ではAdreno 660と言うGPU搭載の「Galaxy S21」、ヨーロッパなどではARM Mali-G78 MP14というGPU搭載の「GalaxyS21」と言った感じで、同じ端末名なのに異なるデバイスが出来上がっています

Graphics API…

iOSではGraphisの表示にはMetalAPIを使う事になります。
一昔前まではOpenGLESが利用可能でしたが、Appleにより非推奨化され廃止となりました。
そのため iOS向けに出すときは何も悩まず Metal一択です。

たいしてAndroidでは、現在VulkanとOpenGLESの二つの選択肢があります。
VulkanはOpenGLESの後継となるGraphicsAPIです。
VulkanではOpenGLESでは出来なかったハードウェアに近い部分を触れるようになったりするなどで性能が向上する…はず……です。またパイプラインという概念の導入によってCPUのオーバーヘッドも減るはず…です…

しかし現実は案外そうもいかず、古めのGPUだとドライバの不具合などによってうまく動かない、性能も言うほど向上しない等の問題がありVulkan選んでおけば万事解決とはなりません…。

そのため2023年に出た最新ゲームでもVulkanではなくOpenGLESでリリースされてるゲームはいまだに数多くあります。

この2系統ある事が悩みの種になっています。

終わりに…

このような感じでAndroidはiOSに比べて多様性に富んだ端末となっており、その対応が大変と言う所でした。

あとこの記事ではAndroidを下げる意図はありません。
私個人はAndroidは好きで、Xperia/Galaxy/Pixelなどを端末を乗り換えています。iPhoneを所持したことはないです。ただタブレッドはiPadマンです。


この記事が気に入ったらサポートをしてみませんか?