最適な解像度の選択
プレイヤーは、電話、タブレット、PC、TV など、さまざまなデバイスにゲームをストリーミングします。これらは、低解像度から高解像度のディスプレイ、32:9 のウルトラワイドスクリーンから正方形のタブレット、縦長のポータブル デバイスまで多岐にわたります。プレイヤーは、レターボックスなしでゲームが画面またはウィンドウ全体を満たすことを好みます。可能であれば、スケーリングなしでクライアントのディスプレイに一致すれば、画像もより鮮明になります。最後に、クライアントに最適な解像度は、ハードウェアおよびネットワーク条件に応じて異なる場合があります。 XGameStreamingGetDisplayDetails API は、これらすべての要素を考慮し、「preferred (推奨)」の幅と高さを返します。理想的な条件下では、「preferred」解像度はクライアントの画面の解像度およびアスペクト比になりますが、その解像度が不可能な場合は、ストリームおよびXGameStreamingGetDisplayDetails に渡されたパラメーターの制約に合う最も近い解像度およびアスペクト比になります。
ゲームが任意の解像度でレンダリングできる場合、単に XGameStreamingSetResolution を呼び出してレンダリング解像度を推奨解像度に設定するだけで、最良の結果が得られます。
多くのゲームは、固定された解像度セットに対して設計されています。たとえば、ゲームの PC 版が複数の解像度をサポートしていて、XBOX 上では通常 1 つに絞られている場合があります。そのような場合、Microsoft は推奨解像度をガイドとして使用し、ゲームがサポートする最も近い解像度を選ぶことをお勧めします。その良い方法の 1 つは、推奨アスペクト比に最も近い一致を見つけて、ゲームがクライアントの画面をできるだけ多く埋めるようにすることです。XGameStreamingDisplayDetails 構造体には、設定できる解像度の制限が含まれていることに注意してください。また、現在のストリームが非標準の解像度およびプレゼント スケーリングをサポートするかどうかを示すフラグも含まれます。
解像度を自動で選択するのが現実的ではないが、ゲームの PC 版に解像度ピッカーが含まれている場合は、その解像度が XGameStreamingDisplayDetails の制約内に収まる限り、プレイヤーに解像度を選択させることもできます。
更新をリッスンする
ストリーム中、最適な解像度はさまざまな理由で変わる可能性があります。- クラウド サーバーではストリーミング クライアントが接続する前にゲームが起動されるため、推奨解像度はすぐには利用できません。
- 電話またはタブレットを持つプレイヤーが、縦向きと横向きの間でデバイスを回転させる場合があります。
- PC のプレイヤーが、ストリーミング クライアント ウィンドウのサイズを変更したり、全画面表示を切り替えたりする場合があります。
- ネットワーク条件が変化し、異なるストリーム解像度が必要になる場合があります。
XGameStreamingClientProperty::DisplayDetails プロパティを確認して) クライアントの推奨解像度が変わったかを検出します。これらのイベントが発生したときに、新しい XGameStreamingDisplayDetails に合わせて解像度を変更します。
少なくとも、クラウド サーバーのプレイヤーが合致した解像度を得るために、最初のクライアント接続イベントを処理することが非常に重要です。
変更に関する制限
ストリーム解像度の変更は、プレイヤーには短いフラッシュのように見えます (PC でゲームの解像度を変更するときのような感じです)。中断を最小限に抑えるため、Microsoft では上記のイベントに応じてのみ解像度を変更することを推奨しています。 プレイヤー体験とは別に、ビデオ エンコーダーがゲームの解像度に合わせる時間が足りず、一時的な視覚的な引き伸ばしが発生する可能性があるため、ストリーム解像度を 200 ミリ秒に 1 回以上変更することは推奨されません。上記のイベントは、200 ミリ秒に 1 回以上は発生しません。XGameStreamingGetDisplayDetails のパラメーターの設定
XGameStreamingGetDisplayDetails API には、ゲームの制約を指定するパラメーターが含まれています。これらが正しく設定されていれば、API はそれらの制約内に収まる最適な解像度を計算します。パラメーターは以下のとおりです。
maxSupportedPixels: これは、ゲームが超えてはならないピクセル数の合計です。パフォーマンスを維持するための良い経験則としては、現在のシステム デバイス タイプでゲームが通常レンダリングする幅と高さを掛け合わせます。たとえば、ゲームが XBOX Series S 上で通常 1440p でレンダリングする場合、そのデバイス タイプでは maxSupportedPixels=2560*1440=3686400 を渡します。
widestSupportedAspectRatio と tallestSupportedAspectRatio: これらはゲームのアスペクト比の制限です。テスト済みの最も広い、そして最も高いアスペクト比を設定することで、すべてのデバイスでゲームを美しく表示できます。
タッチ入力とカスタム解像度
XGameStreamingSetResolution を介して解像度を変更すると、新しいアスペクト比に合わせてタッチ入力座標空間が変わります。GameInputTouchState には、0-1 の正規化された範囲でタッチ座標が含まれています。解像度を変更するとき、その範囲は同じままですが、今度は新しい解像度を表します。たとえば、1920x1080 のゲームでカスタム解像度なしの場合、(0.5, 0.5) のタッチは (960, 540) を表しますが、XGameStreamingSetResolution を呼び出して 1600x800 に変更すると、(0.5, 0.5) のタッチは (800, 400) を表します。GameInputTouchSensorInfo の解像度とアスペクト比の値は、解像度を変更しても更新されないことに注意してください。タッチの位置を計算するには、GameInputTouchSensorInfo ではなく、XGameStreamingSetResolution に渡した値を使用してください。
セーフ エリア
多くのデバイスでは、ノッチ、丸い角、オーバーレイされたスワイプ バーによって画面の一部が塞がれています。XGameStreamingDisplayDetails には、画面中央の遮られていない矩形を表す safeArea 矩形が含まれます。重要なコンテンツを表示するには、この矩形をタイトル セーフ スペースの境界として扱ってください。その外側の領域も表示される場合があるため、コンテンツを含めてもかまいませんが、重要な UI 要素は含めないようにしてください。
