モバイルプラットフォーム向けのゲームの開発と適応

画像

適応(緯度から適応-適応)は、環境条件の変化に適応するプロセスです。



近年、モバイルシステムに急速な進化の変化が見られます。 真新しいものが現れ、既存のものは変わります。 生産性は向上しており、ラップトップはウルトラブックに置き換わっています。ウルトラブックは、外観だけでなく、新しいフォームファクター、タッチスクリーン、タッチセンサーなどの点でも前身とは異なります。

そして、これらの変化に適応する必要があります。

この記事では、ラップトップ、ネットブック、ウルトラブックなどのモバイルプラットフォームでゲームをより使いやすくするためのいくつかの例と推奨事項を紹介します。





当初、ラップトップの計算能力は優先事項ではありませんでしたが、メーカーはサイズと消費電力のパフォーマンスを犠牲にして妥協点を探していました。 しかし、進歩は止まりませんでした。プロセッサーは改善され、加速され、「食いしん坊」が少なくなりました。その結果、現在では、デスクトップに劣らない、またはパフォーマンスに優れたモバイルシステムを見つけることができます。



モバイルシステム用の第2世代のSandy Bridgeの出現により、ラップトップはゲームシステムと呼ばれるようになりました。 近年のみ、ゲームで達成可能なフレームの平均数(中程度の設定でプレイする場合)が大幅に増加しました。









したがって、パーソナルシステム市場の予測では、デスクトップPCは時代遅れであり、モバイルPCがそれらに取って代わっていることが示されています。 販売量は年々増加します。 市場は、モバイルの中で最もモバイル性が高いウルトラブックにも移行しています。 悲観的な予測によると、2015年までの売上は年間5,000万台を超えると予測されています。 楽観によると-約150。







それかどうか-自分自身で判断してください:ほとんどのユーザーは、自宅のPCをアップグレードすることを考え、ラップトップを選択しますが、同じパフォーマンスとモビリティを実現します。 近い将来、デザイン、センサーなどの特徴的な機能を備えた、より軽量で生産性の高いプラットフォームとして、ウルトラブックが好まれます。













初めての体験



ラップトップまたはウルトラブックのユーザーが評価できるゲームを作成する場合に最初に考慮する必要があるのは、ゲームのメインメニューです。 第一印象は決定的であり、ユーザーがさらなるアクションをとる(ゲームを開始する)動機付けをしたり、ゲームを削除して二度と戻ってこないように促すことができます。 理由はネガティブなエクスペリエンスかもしれません。たとえば、ユーザーは平凡なシステムを持っているので、ゲームを作成するときに、すべてがアニメーション化され、多くの効果があり、すべてが輝き、きらめく、見事なメインメニューでヒットすることにしました。 その結果、起動後、ユーザーには「スライドショー」が表示され、第一印象は台無しになります。 ここで重要なのは、ゲームを起動するプロセスで、システムの機能を判断し、ゲームが「弱い」ラップトップで実行されている場合、パフォーマンスのためにインターフェイスの美しさを犠牲にすることです。







さらに、ゲームの設定を入力するためのシンプルでわかりやすい方法をユーザーに提供します。この方法では、システムの機能に合わせてゲームを個別に調整できます。 また、ユーザーへのもう1つのステップは、選択した設定を適用した後の使用の確認です。 ユーザーが誤って、または無知で、最大設定またはサポートされていない解像度を選択し、最も永続的なものだけが(現状のまま)戻ることができることがあります(設定、レジストリ内のブランチなどでファイルを検索して削除します)。



システムパラメータの定義



場合によっては、設定を定義する場合でも、ゲームのパフォーマンスに問題が依然として発生する可能性があります。 これは、システムパラメータが良くも悪くも間違って決定されるために発生します。 理由は、GPUの機能の誤った決定である可能性があります。







pFactory->EnumAdapters( FIRST_GFX_ADAPTER, &pAdapter ) ; { DXGI_ADAPTER_DESC adapterDesc; pAdapter->GetDesc( &adapterDesc ); *VendorId = adapterDesc.VendorId; *DeviceId = adapterDesc.DeviceId; }
      
      









しかし、この解決策は不完全です。 最新のIntel HD Graphicsモデルでは、基本周波数は異なり、通常モードでは350 MHzまたは650 MHz(モデルに応じて)、ターボモードでは1100 MHzおよび1300 MHzになります。 より完全な画像を取得するには、頻度も考慮する必要があります。



 pDevice->CheckCounter( &Description, &Type, &SlotsRequired, sName, ……) ; if ( strcmp(sName ,"Intel Device Information“) == 0 ) { ……… pImmediateContext->GetData(pCounter, pData, sizeof(SQueryDeviceInfo), NULL); *pGPUMinFrequency = (SQueryDeviceInfo*)pData[0]->GPUMinFreq; }
      
      









より詳細なソースの例は、 GPU検出ページにあります。



動的解像度レンダリング



画面解像度が次のボトルネックになる可能性があります。 解像度が高いほど、システムが画面に画像を表示するためにより多くのリソースを必要とします。 たとえば、WXGAとWQHDの間の画面上のピクセル数の比率は4です。 つまり 大きなシーンの4倍のレンダリングが必要になり、4倍のメモリが必要になります。 解決策は、動的解像度でレンダリングすることです。 一般的に言えば、この方法の本質は、シーンをより低い解像度でレンダリングし、その後に画像を目的の解像度にスケーリングすることです。







この方法について詳しくは、 software.intel.com / ru- ru / articles / dynamic-resolution-rendering- articleをご覧ください。



Intel GPUで3Dグラフィックを最適化するための具体的なヒント、およびIntel HDグラフィックの機能、パフォーマンス、開発に関するストーリーは、この記事( habrahabr.ru/company/intel/blog/144486)にあります。



バッテリーの寿命



開発者は、モバイルプラットフォーム向けにゲームを最適化および調整するためのすべてのテクニックを考慮し、ユーザーはあなたがプレイできるゲームを受け取りました。 次は? できるだけ長くプレイできるようにする プレイヤーだけでなく、開発者にとっても興味深いものになります。 現在、多くのゲームでは、ゲームオブジェクトを実際のお金で購入できます。 そのような場合、「時は金なり」という表現は、開発者にとって文字通りの意味を持ちます。



解決策を見つけるには、問題の原因を理解する必要があります。 エネルギー消費の観点からシステムのコンポーネントを検討する場合、次の図があります。







画面がリーダーであり、プロセッサ、メモリなどがそれに続きます。 画面に影響を与えることはできないようです。CPUに対処しようとします。



プロセッサにはさまざまな状態があり、条件付きでアクティブ状態とアイドル状態に分けることができます。 主なエネルギー消費は、アクティブな状態に加えて、ある状態から別の状態への遷移です。 ロジックは、消費を最小限に抑えるために、プロセッサをできるだけ長くアイドル状態にし、できるだけまれにプロセッサを切り替える必要があることを示唆しています。 これは、次の2つの規則に従って実現できます。



できるだけ早く







できるだけ少なくする







最初の点が多かれ少なかれ明確な場合、2番目の点について少し説明したいと思います。 次の図は、タスク(アクティビティ)の組み合わせによって得られるものを明確に示しています。







アクティブ状態への移行中にタスクが実行されると、スレッドはスリープ状態になり、プロセッサのよりエネルギー効率の高い状態への移行を妨げません。



2番目のサブタスクは、イベント依存モデルに移行することで解決できます。 作業タスクはサイクル内の条件をチェックしませんが、イベントがアクティブ状態になるまでスリープします。



悪い例



 while(1) { if(bDoSomething == TRUE) { DoSomething(); } Sleep(100); }
      
      





方法



 while(1) { WaitForSingleObject(someEvent); DoSomething(); }
      
      





この記事-habrahabr.ru/post/134559でエネルギー効率と最適化の詳細を読むことができます。



不当に高いFPS



ゲームでFPSを増やすことは、実行するタスクの頻度を増やすことです。頻繁に画面を更新すると、システムが実質的にアイドルモードにならず、バッテリー電力をはるかに速く消費します。 1つの最適化手法は、FPSの数を制限することです。 最適なFPS値は存在せず、すべてゲームのジャンルに依存します。ここでは、いわば個人的なアプローチが必要です。 FPSを制限することで達成できることは、下の写真で見ることができます。 これらの結果は、 Microsoft GPUViewを使用してアプリケーションの動作を分析することにより得られました。



制限前













ゲームのジャンルで許可されている場合(たとえば、3Dシューティングゲームではない)-FPSを試してみると、ユーザーは違いに気付かない可能性があり、その代わりにラップトップがバッテリーで動作しているとゲーム時間が長くなります。



モビリティ適応



モバイルシステムを含む、仕事を目的としたゲームを開発する場合は、以下を考慮することも必要です。







最後のポイントは特に重要です。 ある状態から別の状態へのシステムの移行を無視するゲームやプログラムがあり、その結果、システムがスリープモードになった(ユーザーがラップトップの蓋を閉じた、または電源ボタンを押した)後に単に「フリーズ」または「フォール」 。 このようなプログラムの振る舞いは、特にプレイヤーが既にゲームに多くの時間を費やしており、そのような移行の後、現在の進行を保存せずにゲームが「倒れた」場合、ゲームを終わらせることができます。



Windowsでは、WM_POWERBROADCASTイベントを監視して、そのような電力関連のイベントを追跡できます。 RegisterPowerSettingNotification()を呼び出して、変更通知をサブスクライブすることもできます。 関数を呼び出した後、アプリケーションは発生したイベントを認識し、それらを正しく処理できるようになります。



すべてが制御されている



モバイルプラットフォーム固有のさまざまな情報を簡単に取得できるようにするために、Intelは無料のIntel Laptop Gaming TDKを提供しています。 シンプルなAPIを使用して、次に関する情報を取得できます。





Intel Laptop Gaming TDKが提供する機能の詳細については、こちらをご覧ください: Intel Laptop Gaming TDK



これをゲームにどのように適用できますか? ゲームインターフェースに次の要素が表示されたと想像してください。







ゲーム(予期せずゲームを最小化するシステムダイアログではありません)は、プレーヤーにゲームのバッテリー残量と、ゲームに費やすことができるおよその時間を通知します。 オンラインゲームでは、プレーヤーはゲームインターフェースでワイヤレスネットワークの現在の状態と信号強度を確認でき、遅延が発生した接続で何が起こっているかを理解するためにゲームをオフにする必要はありません。 シンプル、視覚的、便利。



おわりに



ゲームをよりモバイルフレンドリーにするには:







それだけです。幸運と創造的な成功をお祈りします!



All Articles