以下のリストに、さまざまな世代の iOS デバイスをまとめてあります。現在のデバイスシェーダーのパフォーマンスとは、gfxbench で、ベンチマークを使い、ハードウェア性能の違いを比較できます。
A5 チップ搭載の iPhone 4S は、画面全体に複雑なシェーダーをレンダリングすることができます。イメージエフェクトさえも可能です。ただし、シェーダー最適化は依然として重要です。ゲームがデバイスをハードウェア性能の限界まで使用していない場合、この世代のデバイスでは、スクリプトやゲームの最適化は PC デバイス同様に必要ありません。
iPad2:A5はフルスクリーンバンプマッピングを行うことができます。シェーダーが十分シンプルであると仮定します。ただし、重要なオブジェクトにのみバンプマッピングを使用すると、ゲームのパフォーマンスが最高になる場合があります。フルスクリーンの画像効果はまだ手の届かないところにあります。スクリプティングの最適化はそれほど重要ではありません。
iPad 3 では反射する水やフルスクリーンのイメージエフェクトといったテクスチャへのレンダーの効果を実現できます。ただし、シェーダー最適化は依然として重要です。ゲームがデバイスをハードウェア性能の限界まで使用していない場合、この世代のデバイスでは、スクリプトやゲームの最適化は PC デバイス同様に必要ありません。
iPhone/iPad グラフィックスプロセッシングユニット (GPU) はタイルベースのディファードレンダラーです。デスクトップコンピューターの多くの GPU と比較して iPhone/iPad GPU はシーンで、イメージを描画するために必要な処理を最小化することに集中しています。これにより、表示ピクセルのみが処理対象となります。
GPU のフレームバッファはタイルに分割され、レンダリングはタイルごとに行われます。最初に、フレーム全体の三角形が集積されてタイルに割り当てられます。次に各三角形の表示されているフラグメントが選ばれます。最後に、選ばれた三角形フラグメントはラスタライザーに渡されます (カメラからオクルージョンされた三角形フラグメントはこの段階で排除されます)。
言い換えると、iPhone/iPad GPU は Hidden Surface Removal (隠面消去) でコストを削減します。そのようなアーキテクチャはメモリの消費を抑え、使用電力を節約し、テクスチャキャッシュをより良く活用します。タイルベースのディファードレンダリングにより、塞がれたフラグメントを実際のラスタライゼーションの前に排除でき、オーバードローを低く抑えることができます。
詳細については、以下を参照してください。
iOS デバイスは次のテクスチャ圧縮形式をサポートしています。
PVRTC は RGB と RGBA (カラー情報とアルファチャンネル) のテクスチャ形式をサポートし、1 ピクセルを 2 ビットか 4 ビットに圧縮することができます。PVRTC 形式はメモリフットプリントを削減し、メモリ帯域幅の消費を削減するために不可欠です。なぜなら、データをメモリから読み取る速度に関して、メモリ帯域幅は通常、モバイルデバイスでは非常に制限されているからです。
ETC は 4x4 ピクセルブロックを 64 ビット数に圧縮しますが、アルファチャンネルは含まれません。
ETC2 は、1 ビットと 8 ビットの両方のアルファチャンネル圧縮に対応しています。
ASTC はピクセルブロックサイズを使用する柔軟な形式です。これは、Metal API と OpenGL ES 3.0 グラフィック API でサポートされています。
注意 iOS デバイスの DXT テクスチャ圧縮形式はサポートされていません。
iOS のテクスチャ圧縮の詳細については、iOS 2D テクスチャのオーバーライド を参照してください。
iPhone/iPad には、ラスタライゼーションと並行で計算を行う頂点処理専用のユニットがあります。よりよい並行処理を得るために、iPhone/iPad はラスタライザーより 1 フレーム先に頂点処理をします。
iPhone/iPad の CPU と GPU の双方とも、同じメモリを共有します。長所はテクスチャのビデオメモリ不足を気にする必要がないことです(もちろんメインメモリを使い切らないかぎり)。短所はゲームプレイやグラフィックスで同じメモリ帯域幅を共有することです。メモリ帯域幅をグラフィックスで占有するほど、ゲームプレイや物理計算で使用できる量は減ります。
iPhone/iPad メイン CPU は強力な SIMD (Single Instruction、Multiple Data) コプロセッサーを備えていて、VFP と NEON アーキテクチャのいずれかを採用しています。Unity iOS ランタイムはこれらのユニットを、スキンメッシュの変換、ジオメトリバッチング、音声処理、その他計算負荷の大きい演算など、複数のタスクで活用します。