IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ソニー・インタラクティブエンタテインメント エルエルシーの特許一覧

特開2024-61779グラフィック処理のためのアセット認識コンピューティングアーキテクチャ
<>
  • 特開-グラフィック処理のためのアセット認識コンピューティングアーキテクチャ 図1A
  • 特開-グラフィック処理のためのアセット認識コンピューティングアーキテクチャ 図1B
  • 特開-グラフィック処理のためのアセット認識コンピューティングアーキテクチャ 図1C
  • 特開-グラフィック処理のためのアセット認識コンピューティングアーキテクチャ 図2
  • 特開-グラフィック処理のためのアセット認識コンピューティングアーキテクチャ 図3
  • 特開-グラフィック処理のためのアセット認識コンピューティングアーキテクチャ 図4
  • 特開-グラフィック処理のためのアセット認識コンピューティングアーキテクチャ 図5
  • 特開-グラフィック処理のためのアセット認識コンピューティングアーキテクチャ 図6A
  • 特開-グラフィック処理のためのアセット認識コンピューティングアーキテクチャ 図6B
  • 特開-グラフィック処理のためのアセット認識コンピューティングアーキテクチャ 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024061779
(43)【公開日】2024-05-08
(54)【発明の名称】グラフィック処理のためのアセット認識コンピューティングアーキテクチャ
(51)【国際特許分類】
   G06T 15/00 20110101AFI20240426BHJP
   A63F 13/52 20140101ALI20240426BHJP
【FI】
G06T15/00 501
A63F13/52
【審査請求】有
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2024034649
(22)【出願日】2024-03-07
(62)【分割の表示】P 2022168273の分割
【原出願日】2020-05-14
(31)【優先権主張番号】16/503,378
(32)【優先日】2019-07-03
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】518187455
【氏名又は名称】ソニー・インタラクティブエンタテインメント エルエルシー
(74)【代理人】
【識別番号】100099324
【弁理士】
【氏名又は名称】鈴木 正剛
(72)【発明者】
【氏名】マーク イー. セルニー
(57)【要約】
【課題】中央処理装置(CPU)及びグラフィック処理装置(GPU)を使用してビデオフレームを生成するコンピューティングシステムにより、ゲームを実行するための方法を提供する。
【解決手段】CPUにより、ビデオフレームの描画呼び出しが生成される。CPUによりGPU APIを使用してGPUコマンドを書き込む時に、アセット認識データ(AAD)がコマンドバッファに書き込まれ、アセットからシステムメモリへの1つ以上の詳細度(LOD)データのロードが要求される。GPUは、システムメモリへ書き込まれたLODデータを使用して、フレームの描画呼び出しを実行し、GPUは、AADに基づいて少なくとも最小限のLODデータを使用する。さらに、GPUは、まだロードが終わっていないLODへのアクセスを避けるために、描画呼び出しを実行する時にLODロード状態に関する情報を使用する。
【選択図】図2
【特許請求の範囲】
【請求項1】
中央処理装置(CPU)及びグラフィック処理装置(GPU)を使用してビデオフレームを生成するコンピューティングシステムにより、ゲームを実行するための方法であって、
前記CPUにより、前記ビデオフレームのうちの1つのビデオフレームの描画呼び出しを生成し、
バインド時に、前記描画呼び出しの1つ以上のコマンドをコマンドバッファに書き込み、
前記バインド時に、前記描画呼び出しのアセット認識データ(AAD)を前記コマンドバッファに書き込んで、前記バインド時に、アセットストアから前記コンピューティングシステムが使用するシステムメモリへ1つ以上の詳細度(LOD)データのロード開始を行い、
前記GPUにより、前記システムメモリへ書き込まれたLODデータを使用して、前記フレームの前記描画呼び出しを実行し、前記GPUは、前記AADに基づいて少なくとも最小限のLODデータを使用する、方法。
【請求項2】
前記1つ以上の詳細度(LOD)データのロード開始では、
前記アセットストアから前記システムメモリへ前記1つ以上のLODデータをロードする要求を、前記バインド時に前記CPUからアセットストアコントローラに送信する、請求項1に記載の方法。
【請求項3】
さらに、前記描画呼び出しの前記AADを、格納のために前記アセットストアコントローラに送信し、前記AADを前記要求として受信すると、前記アセットストアコントローラから前記システムメモリへ前記1つ以上のLODデータの前記ロードがトリガーされる、請求項2に記載の方法。
【請求項4】
前記GPUによる前記描画呼び出しの処理の開始時に、前記描画呼び出しが使用するアセットに関して、前記システムメモリにロード済みの最も高いLODデータを特定し、
前記ロード済みの最も高いLODデータは、前記アセットの最小限LODデータよりも、詳細度が低いと判断し、
前記アセットの前記最小限LODデータの緊急ロードを要求する、請求項1に記載の方法。
【請求項5】
さらに、前記GPUによる前記描画呼び出しの処理の開始前に、前記描画呼び出しが使用するアセットに関して、前記システムメモリにロード済みの最も高いLODデータを特定し、
前記ロード済みの最も高いLODデータは、前記アセットの最小限LODデータよりも、詳細度が低いと判断し、
前記アセットの前記最小限LODデータの緊急ロードを要求する、請求項1に記載の方法。
【請求項6】
さらに、前記描画呼び出しが使用するアセットに関して、前記システムメモリにロード済みの最も高いLODデータを特定し、
前記ロード済みの最も高いLODデータは、前記アセットの最小限LODデータよりも、詳細度が低いと判断し、
前記描画呼び出しをスキップする、請求項1に記載の方法。
【請求項7】
さらに、前記描画呼び出しが使用するアセットに関して、前記システムメモリにロード済みの最も高いLODデータを特定し、
前記ロード済みの最も高いLODデータは、前記アセットの最小限LODデータよりも、詳細度が低いと判断し、
プロキシアセットのロードを要求する、請求項1に記載の方法。
【請求項8】
前記描画呼び出しの描画時に、前記描画呼び出しが使用するアセットに関して、前記システムメモリにロード済みの最も高いLODデータを特定し、
前記ロード済みの最も高いLODデータは、前記アセットの最小限LODデータよりも、詳細度が高いと判断し、
前記最も高いLODデータを表す値に、LODクランプを設定し、
前記LODクランプをGPUキャッシュに格納し、
前記描画呼び出しの実行中に使用されるLODデータを、前記LODクランプに基づいて、前記最も高いLODデータにクランプする、請求項1に記載の方法。
【請求項9】
前記GPUにより、前記コマンドバッファ内の最初のコマンドを実行し、前記最初のコマンドは、前記システムメモリへの前記アセットのロードステータスを照会するように構成される、請求項8に記載の方法。
【請求項10】
さらに、前記アセットストアコントローラにより、前記システムメモリへの前記アセットの複数のLODデータの前記ロードを追跡し、
前記アセットストアコントローラにより、GPU APIを使用して、前記アセットのロードステータスを前記GPUに通知する、請求項8に記載の方法。
【請求項11】
さらに、前記描画呼び出しの描画時より前に、前記描画呼び出しが使用するアセットに関して、前記システムメモリにロード済みの最も高いLODデータを特定し、
前記ロード済みの最も高いLODデータは、前記アセットの最小限LODデータよりも、詳細度が高いと判断し、
前記最も高いLODデータを表す値に、LODクランプを設定し、
前記LODクランプをGPUキャッシュに格納し、
前記描画呼び出しの実行中に使用されるLODデータを、前記LODクランプに基づいて、前記最も高いLODデータにクランプする、請求項1に記載の方法。
【請求項12】
前記1つ以上のLODデータのロードの開始では、
アセットの複数のLODデータから、最小限LODデータをロードし、
前記アセットの前記最小限LODデータをロードした後、前記複数のLODデータから残りのLODデータを、詳細度の最も低いものから詳細の最も高いものへとロードする、請求項1に記載の方法。
【請求項13】
対応するアセットの1つ以上の詳細度(LOD)データのそれぞれは、テクスチャであり、
前記対応するアセットの前記1つ以上のLODデータのそれぞれは、対応するミップマップである、
請求項1に記載の方法。
【請求項14】
対応するアセットの1つ以上のLODデータのそれぞれは、モデルである、
請求項1に記載の方法。
【請求項15】
前記描画呼び出しに使用される対応するアセットの前記AADは、対応するアセットIDと、対応する最小限LODデータと、フレームに描画される他のアセットに対する前記対応するアセットの対応するロード優先度とを含む、
請求項1に記載の方法。
【請求項16】
さらに、前記描画呼び出しの実行が完了したことを、前記GPUにより前記CPUに通知し、
前記CPUにより、前記1つ以上のLODデータを格納するために使用された前記システムメモリ内のメモリスペースを解放する、請求項1に記載の方法。
【請求項17】
前記コンピューティングシステムは、サーバの分散ネットワークまたはゲームコンソールである、請求項1に記載の方法。
【請求項18】
さらに、前記CPUにより、前記システムメモリに格納されている前記アセットに関して、前記アセットストアコントローラに問い合わせるか、または、
前記CPUにより、対応するビデオフレームに使用されるアセットを有するかに関して、前記アセットストアコントローラに問い合わせるか、または、
前記CPUにより、前記アセットストアに格納されている前記アセットに関して、前記アセットストアコントローラに問い合わせる、請求項1に記載の方法。
【請求項19】
さらに、前記LODデータの優先度情報に従って、予測される描画呼び出しまたはオブジェクトのアセットのLODデータをロードするように有益な助言を、前記CPUにより前記アセットストアコントローラに与える、請求項1に記載の方法。
【請求項20】
さらに、ビデオフレームをレンダリングするために、前記GPUにより、1つ以上のアセットの使用状況を追跡する、請求項1に記載の方法。
【請求項21】
前記GPUにより、対応するアセットの1つ以上のLODデータの使用状況を追跡する、請求項20に記載の方法。
【請求項22】
前記GPUにより、テクスチャアセットの使用される最小限LODデータまたは最大限LODデータを追跡するか、または、
前記GPUにより、前記テクスチャアセットへのアクセス回数を追跡するか、または、
前記GPUにより、LODデータによる前記テクスチャアセットへのアクセス回数を追跡する、請求項20に記載の方法。
【請求項23】
前記GPUにより、モデルアセットの使用される最小限LODデータまたは最大限LODデータを追跡するか、または、
前記モデルアセットにより使用される頂点の数を追跡する、請求項20に記載の方法。
【請求項24】
さらに、前記システムメモリから解放するための1つ以上の識別されたアセット、または前記1つ以上の識別されたアセットの1つ以上の識別されたLODデータを特定する際、アセットの使用状況の追跡情報を使用するか、または、
アセットの使用状況の追跡情報を使用して、2つ以上のアセットの解放に優先度を付ける、請求項20に記載の方法。
【請求項25】
アセットの使用状況の追跡情報を使用して、前記システムメモリにロードする1つ以上の識別されたアセット、または前記1つ以上の識別されたアセットの1つ以上の識別されたLODデータを特定するか、または、
アセットの使用状況の追跡情報を使用して、2つ以上のアセットのロードに優先度を付ける、請求項20に記載の方法。
【請求項26】
さらに、アセットを認識した方法で、前記アセットストアを更新する、請求項1に記載の方法。
【請求項27】
1つ以上のアセットがローカルで生成された時に、前記アセットを認識した方法で前記アセットストアを更新するか、または、
データセンタ内から、前記アセットを認識した方法で前記アセットストアを更新するか、または、
ネットワーク経由で、前記アセットを認識した方法で前記アセットストアを更新する、請求項26に記載の方法。
【請求項28】
ゲームを実行してビデオフレームを生成するコンピューティングシステムであって、
前記ゲームを実行するように構成された中央処理装置(CPU)を有し、前記CPUは、前記ビデオフレームのうちの1つのフレームのために、コマンドを含む描画呼び出しを生成するものであり、
アセット認識データ(AAD)及び前記描画呼び出しの前記コマンドを格納するように構成されてバインド時に前記CPUにより前記AAD及び前記コマンドが書き込まれるコマンドバッファを有し、
アプリケーションの複数のアセットを格納するように構成されて前記描画呼び出しが使用する1つ以上の詳細度(LOD)データを含むアセットストアを有し、
前記描画呼び出しが使用する前記1つ以上の詳細度(LOD)データを格納するように構成されたシステムメモリを有し、前記アセットストアからの前記LODデータの前記ロードは、前記バインド時に前記CPUによりトリガーされ、前記LODデータの前記システムメモリへの前記ロードは、前記AADを前記コマンドバッファに書き込んでいる間に開始されるものであり、
前記システムメモリに書き込まれた前記LODデータを使用して前記フレームの前記描画呼び出しの前記コマンドを実行するように構成されたグラフィック処理装置(GPU)を有し、前記GPUは、前記AADに基づいて少なくとも最小限のLODデータを使用するものである、コンピューティングシステム。
【請求項29】
中央処理装置(CPU)及びグラフィック処理装置(GPU)を使用してビデオフレームを生成するコンピューティングシステムによりゲームを実行するためのコンピュータプログラムを格納する非一時的コンピュータ可読媒体であって、
前記CPUにより、前記ビデオフレームのうちの1つのビデオフレームの描画呼び出しを生成するためのプログラム命令と、
バインド時に、前記描画呼び出しの1つ以上のコマンドをコマンドバッファに書き込むためのプログラム命令と、
前記バインド時に、前記描画呼び出しのアセット認識データ(AAD)を前記コマンドバッファに書き込んで、前記バインド時に、アセットストアから前記コンピューティングシステムが使用するシステムメモリへ1つ以上の詳細度(LOD)データのロードを開始するためのプログラム命令と、
前記GPUにより、前記システムメモリへ書き込まれた前記LODデータを使用して、前記フレームの前記描画呼び出しを実行するためのプログラム命令とを有し、前記GPUは、前記AADに基づいて少なくとも最小限のLODデータを使用するものである、非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コンピューティングシステムアーキテクチャに関し、より具体的には、ゲームまたは他のインタラクティブアプリケーションのビデオフレームを生成する時にアセットを認識する中央処理装置及びグラフィック処理装置を含むアセット認識コンポーネントを有するコンピューティングシステムアーキテクチャに関する。
【背景技術】
【0002】
ビデオゲームは、仮想化されたゲーム世界でのゲームプレイを提供する。対応するゲームを実行することにより、ゲーム世界の様々なシーンが作成され得る。シーンは、テクスチャ及びモデルなどの様々な種類のアセットを使用して生成され得る。これらのアセットは、シーンを生成するためにグラフィックプロセッサにより使用される。アセットは大きすぎて、全て同時にシステムメモリに収容できないため、アセットは通常、光学式メディア、ハードドライブ、またはソリッドステートデバイスに格納され、必要に応じてシステムメモリにロードされる。その結果、ユーザは、アセットロード時に長い遅延を経験する可能性があり、システムメモリへのアセットのロードを管理すること、及びさらなるアセットを受け取るためにシステムメモリを解放することは、ゲーム開発者にとって大きな負担となり得る。よって、ゲーム開発者は、ユーザの遅延及び必要なアセット管理を軽減するために、シーンの複雑さを削減できるものの、結果的に、プレーヤが得る臨場感体験も低下する。
【0003】
本開示の実施形態は、このような背景においてなされたものである。
【発明の概要】
【0004】
本開示の実施形態は、グラフィックスパイプラインを介してテクスチャ、モデル、または他のアセットを処理する時にアセット認識を行うように構成された中央処理装置及びグラフィック処理装置を含むコンピューティングシステムアーキテクチャ、並びにこれを実施するための方法に関する。アセット認識は、グラフィックスパイプラインにおいて、処理に必要なアセットの識別、及び使用するアセットのロードの追跡を提供する。また、アセット認識により、グラフィックスパイプラインを介した処理のために最小限のアセット(例えばより低いLOD)のロードが完了した時を知ることができ、これにより、特に仮想化されたゲーム世界のシーン間を遷移する時に、グラフィックスパイプラインのあらゆるストールの影響が軽減される。
【0005】
本開示の実施形態は、グラフィックスパイプラインがアセットを必要とする時にシステムメモリへのアセットのロードを管理し、アセットが必要なくなった時にシステムメモリの解放を管理するように構成されたアセット認識コンピューティングアーキテクチャを開示する。コンピューティングアーキテクチャは、高速アクセスを提供するメモリデバイスで構成されたアセットストアを含み、これにより、ビデオフレームに描画されるシーンのアセットを、システムメモリに数ミリ秒または数十ミリ秒でロードすることが可能となる。具体的には、バインド時トリガーを使用して、アセットは、アセットストアからシステムメモリにロードされる。
このようにして、ビデオフレームのレンダリングに使用される1つ以上の描画呼び出しのアセットのロードは、対応する描画呼び出しにアセットがバインドされる時に(例えばバインド時に)、及びゲームを実行する中央処理装置(CPU)がグラフィックスアプリケーションプログラミングインターフェース(API)を使用して、グラフィックスパイプラインを実施するグラフィック処理装置(GPU)により実行される描画呼び出しの1つ以上のコマンドバッファを構築する時に、トリガーされる。
コンピューティングアーキテクチャはアセットを認識するため、GPUは、ビデオフレームの1つ以上の描画呼び出しに必要な最小限のアセットを使用して、必要なアセットが完全にロードされるのを待たずに、実行可能である。アセットストアコントローラは、アセットストア内のアセットの管理と、アセット認識コンピューティングアーキテクチャ全体におけるアセットの配信とを、制御するように構成される。
一実施形態では、アセットストアコントローラは、他のオンチップユニットからの支援を受けてCPU上で実行されるソフトウェアであり得る。あるいは、アセットストアコントローラは、追加のCPUなどのコプロセッサを含むオンチップコンプレックスであり得る。CPU及びGPUの両者は、アセットストアコントローラとの統合及び/またはインターフェースのために、変更され得る。
アセットストアは、ゲームのテクスチャ、モデル、及び他のデータを含む。アセットストアは、システムメモリよりもはるかに大きい。アセットストアは、アセット識別子(アセットID)を使用して識別される及び/またはタグ付けされたアセットを含むアセットストアのコンテンツ、並びにコンテンツ及び/またはアセットの詳細(例えば対応するアセットの詳細度)を認識する。
アセットストアは、例えば、アセットがローカルで生成された時、またはアセットがラック内の大容量ストレージからアクセスされた時、またはアセットがデータセンタ内からアクセスされた時、またはアセットがネットワーク経由で配信された時など、アセットを認識した様々な方法で更新される。従来、CPU上で実行されるゲームは、GPU APIを使用して、1つ以上のアセット(例えばテクスチャ、詳細度-LOD、モデルなど)を描画呼び出しにバインドすることにより、描画呼び出しがレンダリングするオブジェクトにアセットが使用されることを可能にする。
アセット認識コンピューティングアーキテクチャでは、GPU APIは、CPU上で実行されるゲームから追加情報を受信する。例えば、描画呼び出しごとに、追加アセット認識データ(Asset Aware Data:AAD)は、描画呼び出しに使用されるアセットのアセットIDと、グラフィックスパイプラインで描画呼び出しが実行され得る前にアセットのロードされるべき最小限LODと、描画呼び出しが使用する他のアセットのロードと比較した場合のそのアセットのロードの優先度と、を含む。
GPU APIは、対応する描画呼び出しのコマンドバッファに、AADの少なくとも一部(例えばアセットID、最小限LODなど)を配置し、AADの全てではなくとも少なくとも一部をアセットストアコントローラに渡すように構成される。さらに、GPU APIはまた、例えばコマンドをコマンドバッファに配置することにより、レンダリングの各ビデオフレームが完了した時をアセットストアコントローラに通知するように使用され得る。
よって、アセット認識アーキテクチャでは、アセットストアコントローラは、ビデオフレームに必要なアセットの少なくとも全てなどのAADストリームを優先度付け情報と共に、及びこれらのアセットなどを使用したレンダリングの終了の通知を、受信する。アセットストアコントローラは、AADを受信すると、アセットストアからシステムメモリにアセットのロードを開始する。ロードプロセスは、ロード優先度を使用する。例えば、全てのテクスチャ及び/またはモデル及び/または他のアセットの「最小限LOD」がロード可能であり、その後、アセットのロード優先度情報に基づいて、より高いLODのロードが実行され得る。
ロードが完了すると、GPUは、アセットのロードが完了したこと、またはアセットがロード中であり、どの程度ロードされたか(例えばアセットのどのLODのロードが完了したか)が通知される(例えばアセットIDを使用して)。いくつかの実施形態では、レンダリング(例えばグラフィックスパイプラインにおける対応する描画呼び出しの実行)が開始され、その描画呼び出しに必要なアセットのロードがまだ完了していない場合には、アセットの「緊急ロード」が存在し得る。
他の実施形態では、コマンドバッファ内の条件付きコマンドを使用して、LODデータのロードステータスを照会し、コマンドフローを変更することができ、例えば、最小限LODデータのロードが完了していない場合は描画呼び出しが完全にスキップされる(すなわちGPUのストールが回避される)、またはプロキシアセットを使用してレンダリングが行われる、またはロードされたLODに基づいてカスタマイズされたレンダリングが可能となる。さらに他の実施形態では、GPUは、AADを使用して、これらの同じ決定を行うことができ、例えば最小限LODデータのロードが完了していない場合は、描画呼び出しが完全にスキップされる(すなわちGPUのストールが回避される)。アセットストアコントローラはまた、フレームのレンダリング中にアセットが使用されなかった場合など、不要なメモリを解放するように構成されるため、そのアセットを格納しているメモリスペースは解放され得る。GPUは、アセットを認識するように変更され得る。例えば、オブジェクトがレンダリングされる時、GPUは、アセットの必要なLODのロードが完了したか否かを認識する。GPUは、必要なLODの「緊急ロード」要求を発行し、必要なLODがロードされるまでストールし得る。さらに、GPUは、特定のアセットに関して、メモリにロード済みの最も高いLODを認識し、その最も高いLODまでを使用するが、その最も高いLODを超えるLODは使用せずに、対応するビデオフレームをレンダリングする。システムメモリのロード及び解放の一環として、ページテーブル、CPUキャッシュ、及びGPUキャッシュの操作が必要になり得、従って、アセットストアコントローラ、CPU、及びGPUは、これらの動作を加速するように構成され得る。このように、CPU上で実行されるゲームの観点からすると、対応する描画呼び出しに必要なアセットは、使用される時に「魔法のように」システムメモリに現れる。すなわち、ゲームは、GPU APIを使用して描画呼び出しを行うだけでよく、必要なアセット(例えば最小限LOD)は、グラフィックスパイプラインで使用される準備ができている。
【0006】
一実施形態では、中央処理装置及びグラフィック処理装置を使用してビデオフレームを生成するコンピューティングシステムにより、ゲームを実行するための方法が開示される。方法は、CPUにより、ビデオフレームのうちの1つのビデオフレームの描画呼び出しを生成することを含む。方法は、バインド時に、描画呼び出しの1つ以上のコマンドをコマンドバッファに書き込むことを含む。方法は、GPU APIを使用して、バインド時に、描画呼び出しのアセット認識データ(AAD)をコマンドバッファに書き込んで、バインド時に、アセットストアからコンピューティングシステムが使用するシステムメモリへ1つ以上の詳細度(Level Of Detail:LOD)データのロードを開始することを含む。方法は、GPUにより、システムメモリへ書き込まれたLODデータを使用して、フレームの描画呼び出しを実行することを含み、GPUは、AADに基づいて少なくとも最小限のLODデータを使用する。
【0007】
他の実施形態では、ゲームを実行してビデオフレームを生成するコンピューティングシステムが開示される。コンピューティングシステムは、ゲームを実行するように構成された中央処理装置を含む。CPUは、ビデオフレームのうちの1つのフレームの描画呼び出しを生成し、描画呼び出しはコマンドを含む。コンピューティングシステムは、アセット認識データ及び描画呼び出しのコマンドを格納するように構成されたコマンドバッファを含み、AAD及びコマンドは、CPUにより、バインド時にGPU APIを使用してコマンドバッファに書き込まれる。
コンピューティングシステムは、アプリケーションの複数のアセットを格納するように構成されたアセットストアを含み、これは、描画呼び出しが使用するアセットの1つ以上の詳細度を含む。
コンピューティングシステムは、描画呼び出しが使用する1つ以上の詳細度データを格納するように構成されたシステムメモリを含み、アセットストアからのLODデータのロードは、バインド時にCPUによりトリガーされ、LODデータのシステムメモリへのロードは、AADをコマンドバッファに書き込んでいる間に開始される。コンピューティングシステムは、システムメモリに書き込まれたLODデータを使用してフレームの描画呼び出しのコマンドを実行するように構成されたグラフィック処理装置を含み、GPUは、AADに基づいて少なくとも最小限のLODデータを使用する。
【0008】
さらに他の実施形態では、中央処理装置及びグラフィック処理装置を使用してビデオフレームを生成するコンピューティングシステムによりゲームを実行するためのコンピュータプログラムを格納する非一時的コンピュータ可読媒体が開示される。非一時的コンピュータ可読媒体は、CPUによりビデオフレームのうちの1つのビデオフレームの描画呼び出しを生成するためのプログラム命令を含む。
非一時的コンピュータ可読媒体は、バインド時に、描画呼び出しの1つ以上のコマンドをコマンドバッファに書き込むためのプログラム命令を含む。非一時的コンピュータ可読媒体は、バインド時に、GPU APIを使用して描画呼び出しのアセット認識データ(AAD)をコマンドバッファへ書き込み、バインド時に、アセットストアからコンピューティングシステムが使用するシステムメモリへ1つ以上の詳細度(LOD)データのロードを開始するためのプログラム命令を含む。非一時的コンピュータ可読媒体は、GPUにより、システムメモリへ書き込まれたLODデータを使用して、フレームの描画呼び出しを実行するためのプログラム命令を含み、GPUは、AADに基づいて少なくとも最小限のLODデータを使用する。
【0009】
本開示の他の態様は、本開示の原理の実施例として示される添付図面と併せて、下記の発明を実施するための形態から、明らかになるであろう。
【0010】
本開示は、添付図面と併せて、以下の説明を参照することにより、最も良く理解されるであろう。
【図面の簡単な説明】
【0011】
図1A】本開示の一実施形態による、ゲームを提供するためのシステムの図である。
図1B】本開示の一実施形態による、サポートサービスを提供するバックエンドクラウドゲームネットワークを有するゲームを提供するためのシステムの図である。
図1C】本開示の一実施形態による、クラウドゲームネットワーク経由でゲームを提供するためのシステムの図である。
図2】本開示の一実施形態による、中央処理装置(CPU)がゲームを実行している間にビデオフレームを生成する時にアセットを認識する中央処理装置及びグラフィック処理装置を含むコンピューティングシステムを示す。
図3】本開示の一実施形態による、中央処理装置(CPU)がゲームを実行している間にビデオフレームを生成する時にアセットを認識する中央処理装置及びグラフィック処理装置を含むコンピューティングシステムのレンダリングパイプラインを示す。
図4】本開示の一実施形態による、中央処理装置(CPU)がゲームを実行している間にビデオフレームを生成する時の、中央処理装置及びグラフィック処理装置を含むコンピューティングシステムによるアセット認識データの使用を示す。
図5】本開示の一実施形態による、中央処理装置により実行されるゲームのビデオフレームを生成する時に使用される対応するアセットの詳細度データ、及びLODデータをロードしている間のロードクランプの実施の例示である。
図6A】本開示の一実施形態による、中央処理装置及びグラフィック処理装置を使用してビデオフレームを生成するコンピューティングシステムによるゲーム実行方法を示すフロー図である。
図6B】本開示の一実施形態による、ビデオフレームを生成するために対応する描画呼び出しを実行する時に、アセットのLODデータのロードステータスを考慮することを示すフロー図である。
図7】本開示の様々な実施形態の態様を実行するために使用することができる例示的なデバイスのコンポーネントを示す。
【発明を実施するための形態】
【0012】
以下の発明を実施するための形態は、例示目的で多数の具体的な詳細を含むが、当業者であれば、以下の詳細に対する多数の変形及び変更が本開示の範囲に含まれることを理解するであろう。従って、後述の本開示の態様は、発明を実施するための形態に続く特許請求の範囲の普遍性を損なうことなく、かつ特許請求の範囲に限定を課すことなく、明記される。
【0013】
概して、本開示の様々な実施形態は、グラフィックスパイプラインを介してビデオフレームを生成する中央処理装置及びグラフィック処理装置などのアセット認識コンポーネントを含むコンピューティングシステムアーキテクチャ、及びこれを実施するための方法を説明する。CPU及びGPUによるアセット認識は、グラフィックスパイプラインで使用されるアセットの識別及び追跡を提供し、これにより、対応するビデオフレームを生成する時のグラフィックスパイプラインを介した処理に、最小限のアセット(例えば最小限の詳細度-LOD)を使用することができる。具体的には、CPU上で実行されるゲームコードは、必要なアセットをタイムリーにシステムメモリにロードするために、アセットが必要になる時を予測できる。
例えば、アセットは、ディスプレイのピクセルを通して表示されるビデオフレームを生成するために、グラフィックスパイプラインのシェーダプログラムを介して処理されるテクスチャ及び/またはモデルであり得る。例えば、森のシーンでは、木のテクスチャが入力として受信でき、グラフィックスパイプラインを介して処理される。処理のために、テクスチャ及び/またはモデルの大量のLODデータをシステムメモリにロードする時間が十分にない場合、GPUのストールを回避するために、本開示のGPU実施形態は、アセット認識を提供し、これにより、GPUは、識別されたアセットのロードを追跡し、アセットの少なくとも最小限のLODを使用してシーンを生成するように構成される。
最初にシーンは低解像度でレンダリングされ得るが、後続のフレームでは、より完全なLODデータを使用してシーンはレンダリングされ得る。このようにして、仮想化されたゲーム世界の大きく複雑なシーンが、グラフィックスパイプラインを介して効率的に生成され、同時に、アセットのロードを待機してGPUをストールする可能性が低減され得る。
これは、特に、ゲームがあるシーンから別のシーンへ2つのビデオフレーム間を遷移する、ゲーム内のシーンカット(例えば映画的流れにおけるシーン変更、または一連のメニューの後のインタラクティブなゲームプレイの開始)に遭遇した場合に役に立つ。LODデータ全体がロードされるのを待機して、新たなシーンが生成される代わりに、グラフィックスパイプラインを介した処理に必要なアセットごとに最小限のLODデータをロードして、対応するビデオフレームが生成され得る。例えば、複雑なシーンをレンダリングしている間でもGPUのストールを減らすことにより、ゲームをプレイするユーザの臨場感体験は、大幅に向上する。
【0014】
様々な実施形態の上記の概要的理解と共に、ここで実施形態の例示的な詳細が、様々な図面を参照して説明される。
【0015】
本明細書全体を通して、「ゲーム」または「ビデオゲーム」または「ゲームアプリケーション」への言及は、入力コマンドの実行を通じて指示される任意の種類のインタラクティブアプリケーションを表すことを意味する。単なる例示として、インタラクティブアプリケーションには、ゲーム、ワード処理、ビデオ処理、ビデオゲーム処理などのアプリケーションが含まれる。さらに、上記で紹介した用語は、同じ意味で使用される。
【0016】
図1Aは、本開示の一実施形態による、ゲームを提供するためのシステム100Aの図である。示されるように、ゲームは、ゲームをプレイしている対応ユーザのクライアントデバイス110(例えばゲームコンソール)上でローカルに実行されている。具体的には、ゲームのインスタンスは、ゲームタイトル処理エンジン111により実行される。クライアントデバイス110は、ユーザのためにシングルプレーヤモードで作動していてもよい。
ゲームを実施するゲームロジック115(例えば実行可能コード)は、クライアントデバイス110に格納され、ゲームを実行するために使用される。例示として、ゲームロジック115は、ポータブルメディア(例えば光学式メディア)を介して、またはネットワークを介して、クライアントデバイス110に配信され得る(例えばインターネットを介してゲームプロバイダからダウンロードされ得る)。
【0017】
一実施形態では、クライアントデバイス110のゲームタイトル処理エンジン111は、ゲームアプリケーションに関連付けられたゲーム及びサービスを実行するための基本的なプロセッサベース機能を含む。例えば、プロセッサベース機能には、2Dまたは3Dレンダリング、物理学、物理シミュレーション、スクリプト、オーディオ、アニメーション、グラフィック処理、ライティング、シェーディング、ラスター化、レイトレーシング、シャドウイング、カリング、変換、人工知能などが含まれる。
さらに、ゲームアプリケーションのサービスには、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅テスト、ソーシャルネットワーキング、ソーシャルネットワークの友人管理、友人のソーシャルネットワークとの通信、通信チャネル、テキスト送信、インスタントメッセージング、チャットサポートなどが含まれる。
具体的には、クライアントデバイス110は、グラフィックスパイプラインを介してビデオフレームを生成する中央処理装置及びグラフィック処理装置などのアセット認識コンポーネントを含むコンピューティングシステムアーキテクチャとして構成される。このように、コンピューティングシステムアーキテクチャは、対応するビデオフレームを生成する時、グラフィックスパイプライン(例えば描画呼び出しの実行)で使用されるアセットの少なくとも最小限のLODデータを識別し、追跡し、使用するように構成される。
【0018】
クライアントデバイス110は、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラにより取り込まれたジェスチャ、マウス、タッチパッドなどの様々な種類の入力デバイスからの入力を受信できる。クライアントデバイス110は、少なくともメモリとプロセッサモジュールとを有する任意の種類のコンピューティングデバイスとすることができ、ゲームタイトル処理エンジン111により実行されるレンダリング画像を生成し、レンダリング画像をディスプレイ(例えばディスプレイ11、またはヘッドマウントディスプレイ-HMDなどを含むディスプレイ11)に表示するように構成される。
例えば、レンダリング画像は、ゲームプレイの駆動に使用される入力コマンドを介するなどして、対応ユーザのゲームプレイを実施するようにクライアントデバイス110のローカルで実行されるゲームのインスタンスに、関連付けられ得る。クライアントデバイス110のいくつかの例には、パーソナルコンピュータ(PC)、ゲームコンソール、ホームシアターデバイス、汎用コンピュータ、モバイルコンピューティングデバイス、タブレット、電話、または、ゲームのインスタンスを実行できる任意の他の種類のコンピューティングデバイスが挙げられる。
【0019】
図1Bは、本開示の一実施形態による、サポートサービスを提供するバックエンドクラウドゲームネットワークを有するゲームを提供するためのシステム100Bの図である。示されるように、ゲームは、ゲームをプレイしている対応ユーザのクライアントデバイス110(例えばゲームコンソール)上でローカルに実行されており、クライアントデバイス110は、図1Aで既に紹介済みである。具体的には、ゲームのインスタンスは、前述のように、ゲームタイトル処理エンジン111により実行される。
すなわち、クライアントデバイス110のゲームタイトル処理エンジン111は、ゲームアプリケーションに関連するゲーム及びサービスを実行するための基本的なプロセッサベース機能を含む。ゲームを実施するゲームロジック115(例えば実行可能コード)は、クライアントデバイス110に格納され、ゲームを実行するために使用される。
前述のように、クライアントデバイス110は、グラフィックスパイプラインを介してビデオフレームを生成する中央処理装置及びグラフィック処理装置などのアセット認識コンポーネントを含む。このように、CPU及びGPUを含むコンピューティングシステムアーキテクチャは、対応するビデオフレームを生成する時、グラフィックスパイプライン(例えば描画呼び出しの実行)で使用されるアセットの少なくとも最小限のLODデータを識別し、追跡し、使用するように構成される。
【0020】
ゲームサーバ160は、複数のユーザに対応する1つ以上のローカルコンピューティングデバイスをサポートするように構成され得、各ローカルコンピューティングデバイスは、シングルプレーヤモードまたはマルチプレーヤモードなどで、対応するゲームのインスタンスを実行できる。
例えば、マルチプレーヤモードで、ゲームがローカルで実行されている間、クラウドゲームネットワーク190は、ネットワーク150経由で各ローカルコンピューティングデバイスから情報(例えばゲーム状態データ)を同時に受信し、その情報をローカルコンピューティングデバイスのうちの1つ以上にわたり適宜配信し、これにより、各ユーザは、マルチプレーヤゲームの仮想化されたゲーム世界で他のユーザと(例えばゲーム内の対応するキャラクタを通して)インタラクトすることができる。
このように、クラウドゲームネットワーク190は、ネットワーク150経由で情報を渡すことにより、マルチプレーヤゲーム環境内のユーザそれぞれのゲームプレイを調和させ、合併させる。ネットワーク150は、1つ以上の通信技術を含み得る。いくつかの実施形態では、ネットワーク150は、高度な無線通信システムを有する第5世代(5G)ネットワーク技術を含み得る。
【0021】
また、シングルプレーヤモードまたはマルチプレーヤモードのいずれでも、クラウドゲームネットワークは、クライアントデバイス110に付加的なサービスを提供できる。例えば、クラウドゲームネットワーク190は、ゲームプレイのバックアップ、ゲームプレイのハイライトの提供、記録されたゲームプレイに基づいたミニゲームの生成、ゲームプレイに関連する人工知能(AI)に基づいた情報(例えばゲームプレイのサポート)の提供などの目的で、ユーザのゲームプレイにおける1つ以上のポイントのゲーム状態を格納できる。
【0022】
図1Cは、本開示の一実施形態による、クラウドゲームネットワーク190経由でゲームを提供するためのシステム100Cの図であり、ゲームは、ゲームをプレイしている対応ユーザのクライアントデバイス110’(例えばシンクライアント)からリモートで実行されている。システム100Cは、シングルプレーヤモードまたはマルチプレーヤモードのいずれでも、ネットワーク150経由でクラウドゲームネットワーク190を介して1つ以上のゲームをプレイする1人以上のプレーヤに、ゲーム制御を提供できる。
いくつかの実施形態では、クラウドゲームネットワークは、ホストマシンのハイパーバイザ上で実行される複数の仮想マシン(VM)を含むクラウドゲームネットワーク190であり得、1つ以上の仮想マシンは、ホストのハイパーバイザにより使用可能なハードウェアリソースを利用してゲームプロセッサモジュールを実行するように構成される。ネットワーク150は、1つ以上の通信技術を含み得る。いくつかの実施形態では、ネットワーク150は、高度な無線通信システムを有する第5世代(5G)ネットワーク技術を含み得る。
【0023】
示されるように、クラウドゲームネットワーク190は、複数のゲームへのアクセスを提供するゲームサーバ160を含む。ゲームサーバ160は、クラウド内で利用可能な任意の種類のサーバコンピューティングデバイスであり得、1つ以上のホスト上で実行される1つ以上の仮想マシンとして構成され得る。
例えば、ゲームサーバ160は、ユーザのゲームのインスタンスをインスタンス化するゲームプロセッサをサポートする仮想マシンを管理できる。よって、複数の仮想マシンに関連付けられたゲームサーバ160の複数のゲームプロセッサは、複数のユーザのゲームプレイに関連付けられた1つ以上のゲームの複数のインスタンスを実行するように構成される。
このように、バックエンドサーバサポートは、複数の対応ユーザに、複数のゲームアプリケーションのゲームプレイのメディア(例えばビデオ、オーディオなど)のストリーミングを提供する。すなわち、ゲームサーバ160は、対応するクライアントデバイス110’に、ネットワーク150を介してデータ(例えば対応するゲームプレイのレンダリング画像及び/またはフレーム)をストリーミングし返すように構成される。このように、計算が複雑なゲームアプリケーションは、クライアントデバイス110’により受信及び転送されるコントローラ入力に応じて、バックエンドサーバで実行され得る。各サーバは、画像及び/またはフレームをレンダリングすることができ、次にこれらは符号化され(例えば圧縮され)、対応するクライアントデバイスへストリーミングされ、表示される。
【0024】
例えば、複数のユーザは、対応するクライアントデバイス110’を使用してネットワーク150経由でクラウドゲームネットワーク190にアクセスでき、クライアントデバイス110’は、図1A図1Bのクライアントデバイス110と同様に構成され得(例えばゲームタイトル処理エンジン111などを含む)、または計算機能を提供する(例えばゲームタイトル処理エンジン111’を含む)ように構成されたバックエンドサーバとのインターフェースを提供するシンクライアントとして構成され得る。
【0025】
例示を容易にするために、図1Cでは、対応ユーザをサポートする単一のクライアントデバイス110’が示される。具体的には、対応ユーザ(図示せず)のクライアントデバイス110’は、インターネットなどのネットワーク150経由でゲームへのアクセスを要求するように、及びゲームサーバ160により実行され、対応ユーザに関連付けられたディスプレイデバイスに配信されるゲームのインスタンスをレンダリングするように、構成される。
例えば、ユーザは、クライアントデバイス110’を介して、ゲームサーバ160のゲームプロセッサ上で実行されるゲームのインスタンスとインタラクトできる。より具体的には、ゲームのインスタンスは、ゲームタイトル処理エンジン111’により実行される。ゲームアプリケーションを実施する対応するゲームロジック(例えば実行可能コード)115’は、データストア(図示せず)を介して格納されアクセス可能であり、ゲームを実行するために使用される。ゲームタイトル処理エンジン111’は、複数のゲームロジックを使用して、複数のゲームをサポートすることができ、ゲームのそれぞれはユーザにより選択可能である。
【0026】
例えば、クライアントデバイス110’は、ゲームプレイを駆動するために使用される入力コマンドを介するなどして、対応ユーザのゲームプレイに関連して、ゲームタイトル処理エンジン111’とインタラクトするように構成される。具体的には、クライアントデバイス110’は、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラにより取り込まれたジェスチャ、マウス、タッチパッドなどの様々な種類の入力デバイスからの入力を受信できる。クライアントデバイス110’は、少なくともメモリ及びプロセッサモジュールを有する任意の種類のコンピューティングデバイスであり得、ネットワーク150経由でゲームサーバ160に接続することができる。バックエンドゲームタイトル処理エンジン111’は、レンダリング画像を生成するように構成され、生成されたレンダリング画像は、ネットワーク150経由で配信され、クライアントデバイス110’に関連付けられた対応するディスプレイに表示される。
例えば、クラウドベースサービスを介して、レンダリング画像は、ゲームサーバ160のゲームタイトル処理エンジン111’上で実行される対応するゲームのインスタンスにより、配信され得る。すなわち、クライアントデバイス110’は、レンダリング画像を受信し、レンダリング画像をディスプレイ11に表示するように構成される。一実施形態では、ディスプレイ11には、HMD(例えばVRコンテンツを表示する)が含まれる。いくつかの実施形態では、レンダリング画像は、クラウドベースサービスから直接、またはクライアントデバイス110’(例えばPlayStation(登録商標)Remote Play)を介して、無線または有線で、スマートホンまたはタブレットにストリーミングされ得る。
【0027】
一実施形態では、ゲームサーバ160及び/またはゲームタイトル処理エンジン111’は、ゲームアプリケーションに関連付けられたゲーム及びサービスを実行するための基本的なプロセッサベース機能を含む。例えば、プロセッサベース機能には、2Dまたは3Dレンダリング、物理学、物理シミュレーション、スクリプト、オーディオ、アニメーション、グラフィック処理、ライティング、シェーディング、ラスター化、レイトレーシング、シャドウイング、カリング、変換、人工知能などが含まれる。さらに、ゲームアプリケーションのサービスには、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅テスト、ソーシャルネットワーキング、ソーシャルネットワークの友人管理、友人のソーシャルネットワークとの通信、通信チャネル、テキスト送信、インスタントメッセージング、チャットサポートなどが含まれる。
具体的には、ゲームサーバ160及び/またはゲームタイトル処理エンジン111’は、グラフィックスパイプラインを介してビデオフレームを生成する中央処理装置及びグラフィック処理装置などのアセット認識コンポーネントを含むコンピューティングシステムアーキテクチャとして構成される。このように、コンピューティングシステムアーキテクチャは、対応するビデオフレームを生成する時、グラフィックスパイプライン(例えば描画呼び出しの実行)で使用されるアセットの少なくとも最小限のLODデータを識別し、追跡し、使用するように構成される。
【0028】
一実施形態では、クラウドゲームネットワーク190は、分散型ゲームサーバシステム及び/またはアーキテクチャである。具体的には、ゲームロジックを実行する分散型ゲームエンジンは、対応するゲームの対応するインスタンスとして構成される。一般に、分散型ゲームエンジンは、ゲームエンジンの機能のそれぞれを受け持ち、これらの機能を、複数の処理エンティティにより実行されるように分散させる。個々の機能は、1つ以上の処理エンティティにわたりさらに分散され得る。処理エンティティは、物理ハードウェアを含む様々な構成で、及び/または仮想コンポーネントもしくは仮想マシンとして、及び/または仮想コンテナとして、構成可能であり、コンテナは、仮想化されたオペレーティングシステム上で実行されるゲームアプリケーションのインスタンスを仮想化する仮想化マシンとは異なる。
処理エンティティは、クラウドゲームネットワーク190の1つ以上のサーバ(計算ノード)上でサーバ及びその基礎となるハードウェアを利用及び/または依存でき、サーバは、1つ以上のラックに配置され得る。様々な処理エンティティに対するこれらの機能の実行の調整、割り当て、及び管理は、分散同期化層により実行される。
このように、これらの機能の実行は、分散同期化層により制御され、プレーヤによるコントローラ入力に応答して、ゲームアプリケーションのメディア(例えばビデオフレーム、オーディオなど)の生成が可能となる。分散同期化層は、分散された処理エンティティにわたりこれらの機能を効率的に実行することができ(例えば負荷分散を通じて)、これにより、重要なゲームエンジンコンポーネント/機能は分散され、再び集結され、より効率的な処理が可能となる。
【0029】
図1A図1Cのゲームタイトル処理エンジン111及び111’は、マルチテナンシーGPU機能を実行するように構成されたCPU及びGPUグループを含み、一実施形態では、1つのCPU及びGPUグループは、複数のゲームのグラフィックス及び/またはレンダリングパイプラインを実施することができる。すなわち、CPU及びGPUグループは、実行されている複数のゲーム間で共有される。CPU及びGPUグループは、1つ以上の処理デバイスとして構成され得る。他の実施形態では、対応するCPU上で実行されている単一のアプリケーションのグラフィックス処理を実行するために、複数のGPUデバイスが組み合される。
【0030】
図2は、本開示の一実施形態による、CPUがゲームを実行している間にビデオフレームを生成する時にアセットを認識する中央処理装置702及びグラフィック処理装置716などのアセット認識コンポーネントを含むコンピューティングアーキテクチャ200を示す。具体的には、ビデオフレームは、GPU716により実施され、かつCPU702により制御されるグラフィックスパイプラインを使用して生成される。
CPU702及びGPU716によるアセット認識は、グラフィックスパイプラインで使用されるアセットの識別及び追跡を提供し、これにより、対応するビデオフレームを生成する時のグラフィックスパイプラインを介した処理に、最小限のアセット(例えば最小限の詳細度-LOD)を使用することができる。コンピューティングアーキテクチャ200は、図1A~1Cのクライアントデバイス110及び/またはクラウドゲームネットワーク190(例えばゲームサーバ160及び/またはゲームタイトル処理エンジン111と111’)で実施され得る。
【0031】
コンピューティングアーキテクチャ200は、ゲームを実行するように構成されたCPU702を含む。具体的には、CPU702は、ビデオフレームのうちの1つのフレームの描画呼び出しを生成し、描画呼び出しは命令を含む。さらに、描画呼び出しがグラフィックスパイプラインで実行されている間に、描画呼び出しの命令によりアセットが要求され得る。特定のビデオフレームのために、CPU702により生成され、かつGPU716により実行される複数の描画呼び出しが存在できる。処理能力が向上したため、ゲームは、ゲームプレイ中にさらに一層複雑なシーンをレンダリングするように設計されている。
その結果、ゲームは、ゲームのゲームプレイ中に使用されるシーン(例えば森のシーン、海のシーンなど)を生成するために、ビデオフレームごとにますます多くの描画呼び出しをプッシュしている。CPU702上で実行されるゲームコードは、アセットが必要になる時(例えばビデオフレームの1つ以上の描画呼び出しにより必要になる時)を予測し、GPU716がグラフィックスパイプラインを介してシーンをレンダリングするのに適切なタイミングでアセットが利用可能となるように、実際に使用される前に、システムメモリ220へのアセットのロードを調整する。
【0032】
GPU API250は、コンピューティングアーキテクチャ200のコンポーネント間、またはコンピューティングアーキテクチャ200のコンポーネント上で実行されるアプリケーション間で通信するために使用され得る。例えば、GPU API250は、グラフィック処理装置、システムメモリ、コマンドバッファ、アセットストアなどの別のコンポーネントと通信するために、CPU702上で実行され得る、またはCPU702により呼び出され得る。GPU API250は、他のコンポーネントと通信するために、アセットストアコントローラ230またはGPU716内のプロセッサ上で実行でき、いくつかの実施形態では、GPU API250は、この通信の目的で(汎用CPUではなく)固定機能ハードウェアとして部分的に実装され得る。
【0033】
アセット認識のために、CPU702上で実行されるゲームは、各描画呼び出しに使用されるアセットに関する追加情報を生成する。例えば、このアセット認識データ(AAD)は、対応するアセットの識別子(例えばアセットID)と、グラフィックスパイプラインで対応する描画呼び出しが実行され得る前にシステムメモリにロードされるべき最小限LODと、他の描画呼び出しで、またはこの描画呼び出し内で使用される他のアセットのロードと比較した場合の当該アセットのロードの優先度と、を含み得る。
描画呼び出しのAADの少なくとも一部(例えばアセットID)は、GPU API250を使用して、CPU702上で実行されるゲームから、描画呼び出しのコマンドを保持する対応コマンドバッファへ配信される。さらに、描画呼び出しのAADの(全てではなくとも)少なくとも一部は、描画呼び出しのためにグラフィックスパイプラインで使用されるアセットのロードを調整するために、GPU API250を使用して、CPU702上で実行されるゲームから、アセットストアコントローラ230へ配信され得る。いくつかの実施形態では、AADの全てが、アセットストアコントローラ230へ配信される。
【0034】
コンピューティングアーキテクチャ200は、グラフィックスパイプラインを実施するように構成されたGPU716を含む。例えば、シーン内のオブジェクトの頂点に対してシェーダプログラムを実行して、ディスプレイのピクセルのテクスチャ値を生成するように、GPU716によりグラフィックスパイプラインが実施され得、効率性を上げるために、GPU716を介して動作が並行して実行される。一般に、グラフィックスパイプラインは、入力ジオメトリ(例えばゲーム世界内のオブジェクトの頂点)を受信する。頂点シェーダは、シーン内のオブジェクトを構成するポリゴンまたはプリミティブを構築する。
頂点シェーダまたは他のシェーダプログラムは、ポリゴンに対して、ライティング、シェーディング、シャドウイング、及び他の動作を実行できる。頂点シェーダまたは他のシェーダプログラムは、レンダリングされるシーン内で対応する視点から見えるオブジェクトを特定するために、深度またはZバッファリングを実行できる。三次元世界内のオブジェクトを、視点により画定される二次元平面に投影するために、ラスター化が実行される。オブジェクトに関して、ピクセルサイズのフラグメントが生成され、画像を表示する時に対応するピクセルの色に、1つ以上のフラグメントが寄与できる。フラグメントをマージ及び/またはブレンドして、それぞれのピクセルの結合色が特定され、これは、フレームバッファに格納されて表示される。
【0035】
さらに、ゲームを実行するCPU702により制御されて、ゲームは、様々な種類のアセットをグラフィック処理に使用できる。これらのアセットは、ゲーム内のシーンを生成するためのグラフィックスパイプラインにおいてGPU716により使用され得、例えば森のシーンでは、木のテクスチャ及び木のモデルが入力として受信され得、グラフィックスパイプラインを介して処理される。ゲームが進化するにつれて、対応するゲームの実行を通して作成される仮想化されたゲーム世界は、より複雑となり、シーン内のオブジェクトまたはモデルのますます増える頂点及び/またはテクスチャに対して、シェーダプログラムの動作を実行することが必要となり得る。
【0036】
より具体的には、コンピューティングアーキテクチャ200のGPU716は、LODデータを使用してビデオフレームを生成するために描画呼び出しコマンドを実行するように構成される。より具体的には、GPU716は、アセット認識コンピューティングアーキテクチャ200のコンポーネントに通知されたアセット認識データに基づく少なくとも最小限のLODデータを使用する。
前述のように、ビデオフレームは、1つ以上の描画呼び出しの実行を必要とでき、各描画呼び出しは、1つ以上のアセット(例えばテクスチャ、モデルなど)を必要とし得る。これらのアセットは、システムメモリ220にロードされた場合にのみ、GPU716により使用され得るが、これらのアセットは大きすぎて、全て同時にシステムメモリ220に収容できないため、システムメモリ220の外部に、例えばハードドライブまたはソリッドステートデバイス(SSD)に、格納される。
CPU702によりゲームが実行されている間に、CPU702上で実行されるゲームコードは、アセットが必要になる時(例えばビデオフレームの1つ以上の描画呼び出しにより必要になる時)を予測し、GPU716がグラフィックスパイプラインを介してシーンをレンダリングするのに適切なタイミングでアセットが利用可能となるように、実際に使用される前に、GPU APIを使用してシステムメモリ220へアセットをロードすることを調整する。シーンがより複雑となり、より大きいテクスチャデータが必要になると、必要なアセットを完全にロードする時間が長くなり得る。よって、グラフィックスパイプラインは、アセットのロードが完了する前に、アセットを使用することを試み得る。
【0037】
本開示の実施形態では、アセット認識コンピューティングアーキテクチャ200は、アセットがシステムメモリ220に完全にロードされるのを待つ間にGPU716をストールさせることなく、グラフィックスパイプラインにおける処理にアセットを利用可能にすることができる。ストールは、特に従来のコンピューティングアーキテクチャにおいて、シーンをレンダリングするために提供される入力(例えばテクスチャ)が多すぎる時に発生し得る。
例えば、グラフィックスパイプラインにより対応する描画呼び出しが実行される前に、ビデオフレームのテクスチャまたはモデルのアセットデータが完全にロードされていない場合がある。これは、ゲームがあるシーンから別のシーンへ2つのビデオフレーム間を遷移する、ゲーム内のシーンカット(例えば映画的流れにおけるシーン変更、または一連のメニューの後のインタラクティブなゲームプレイの開始)がある場合に、特に当てはまる。従来のコンピューティングアーキテクチャでは、グラフィックスパイプラインは、実行を続行する前に、アセットが完全にロードされるのを待機するためにストールする。
他方、本実施形態のアセット認識コンピューティングアーキテクチャ200は、アセット(例えばテクスチャ及び/またはモデル)が完全にロードされていなくても、グラフィックスパイプラインの実行を開始するように構成される。具体的には、(CPUにより実行される際)ゲームが実行すべきことは、描画呼び出しのためにGPU API250を呼び出すことだけである(本来常に実行しているように)。アセット認識コンピューティングアーキテクチャ200は使用可能なアセットをタイムリーにロードすることができるため、ゲーム開発者は、特に複雑なシーンをレンダリングする時、またはシーンカットでシーンを切り替える時に失速または機能低下を生じ得る、より従来型のコンピューティングアーキテクチャ上で実行するために、ゲームのシーンを調整すること(例えばシーンの複雑さを軽減すること)に集中する必要はない。
【0038】
アセット認識コンピューティングアーキテクチャ200は、ゲームの複数のアセットを格納するように構成されたアセットストア210を含む。いくつかの実施形態では、アセットストア210は、ハードドライブとして、またはSSDを使用して、構成され得る。メモリ技術が進化するにつれて、これまで以上に高速なアクセスを提供する他のメモリデバイスが、アセットストア210に使用され得る。このように、シーンをレンダリングするために使用される全てのアセットは、数ミリ秒もしくは数十ミリ秒、またはそれ以上の速さで、アセットストア210からロードされ得る。
【0039】
実施形態では、アセットストア210と通信するために、様々な通信及び/またはバスインターフェースが使用され得る。例えば、アセットストア210にアクセスするために、PCI Express(PCIe)が使用され得る。一実施形態では、不揮発性メモリエクスプレスまたはNVM Express(NVMe)が、PCIeバスを介して接続された不揮発性記憶媒体にアクセスするためのオープンロジカルデバイスインターフェースの仕様を定義し、アセットストア210へのアクセスは、アセットストア210内のメモリデバイスへのアクセスパフォーマンスを向上させるために、NVMeを介して実施される。
【0040】
実行するゲームをロードする際、アセットがアセットストア210にロードされ得る。具体的には、アセットストア210は、対応する描画呼び出しのLODデータ290を保持し、全ての描画呼び出しの全てのLODデータを保持する。各アセットは、対応する描画呼び出しにより使用され得る1つ以上のLODを含む。例えば、テクスチャアセットは、1つ以上のLODを有するミップマップまたはテクスチャマップのチェーンで表され得、各テクスチャマップ(LOD)または各ミップマップ(LOD)は、テクスチャの異なる解像度または表現を提供する。
例えば、テクスチャマップまたはミップマップは、オブジェクトまたはポリゴンの表面にマッピングされた画像であり得る。テクスチャマッピングは、レンダリングする必要のあるオブジェクトのポリゴンの数を減らすために使用され得る。さらに、モデルアセットは、オブジェクトを表し得る。アセットは、そのオブジェクトを表すための様々な解像度の1つ以上のモデル(例えばLOD)を含み得る。このように、グラフィックスパイプラインを介したレンダリングのために、そのアセットの好適な解像度を有する必要モデルが選択され得る。
【0041】
さらに、アセットストア210は、各アセットのアセット認識データ(AAD)を含み、アセット認識データの全てまたは一部はシステムメモリ220にも常駐する。例えば、各アセットは、対応する識別子(例えばアセットID)によりタグ付けされ得、識別子は、対応するアセットに関連付けてアセットストア210に格納され得る。また、各アセットは、アセットの詳細を提供する他のデータを含み得る。
例えば、各アセットのAADは、そのアセットのLOD集合を記述する情報を含み得る。この代表的な情報は、アセットストア内の対応するアセットに関連付けて格納され得る。AADデータは、例えば、アセットがCPU702またはGPU716によりローカルで生成された時、またはアセットがラック内の大容量ストレージからアクセスされた時、またはアセットがデータセンタ内からアクセスされた時、またはアセットがネットワーク経由でアクセスされた時など、アセットを認識した様々な方法で更新され得る。すなわち、アセットストア210は、ラックから、またはデータセンタ内の他の場所から、またはネットワーク経由で、またはゲームから、アセットを認識した方式で更新され得る。
【0042】
アセット認識コンピューティングアーキテクチャ200は、対応する描画呼び出しが使用する1つ以上のLODデータ290を格納するように構成されたシステムメモリ220を含む。さらに、システムメモリ220には、対応するビデオフレームを生成するために使用される全ての描画呼び出しのLODデータがロードされる。具体的には、一実施形態では、CPU702上で実行されるゲームが、バインド時にGPU API250を使用してアセット(例えばテクスチャ、LODデータ、最小限LODデータなど)を対応する描画呼び出しにバインドする時、CPU702も、アセットストア210からシステムメモリ220へLODデータ290をロードすることを、アセットストアコントローラ230に要求する。LODデータをシステムメモリ220にロードするこの要求は、GPU API250の拡張として、または別個のAPIにより、実施され得る。
【0043】
システムメモリ220は、複数のコマンドバッファ240を含み得る。各コマンドバッファは、AAD260及び対応する描画呼び出しコマンドを格納するように構成され、AAD及びコマンドはバインド時に格納される。GPU716は、対応するコマンドを実行するためにコマンドバッファにアクセスする時に、AAD260を認識させられ得る。具体的には、CPU702は、GPU API250を使用して、描画呼び出しのAAD及びコマンドを、対応するコマンドバッファに書き込む。図2に示されるように、コマンドバッファ240aは、ビデオフレーム-F0(例えばフレーム0)を生成するために使用される。コマンドバッファ240aは、描画呼び出しコマンド241(例えばコマンド241a~241n)と、対応する描画呼び出しのAADとを含む。
前述のように、対応するアセットのアセット認識データは、必要なアセット(例えばテクスチャ、モデルなど)のアセットID261のうちの1つ以上を含み得、また、アセットストア210及び/またはシステムメモリ220内のアセットID261へのポインタ262と、必要なアセットID(及び対応するアセット)の最小限LOD263と、アセットIDのロード状態264と、アセットIDそれぞれのロード優先度265(例えば対応する描画呼び出しまたは他の描画呼び出しが必要とする他のアセットに対するアセットのロード優先度)と含み得る。
例えば、カメラに近いオブジェクトで使用されるアセットの優先度は、高くあり得る、または最も高くあり得る。後続のビデオフレームは、同様に構成されたコマンドバッファを使用してレンダリングされる。例えば、コマンドバッファ240bは、ビデオフレーム-F1(例えばフレーム-1)を生成するために使用され、・・・、コマンドバッファ240nは、ビデオフレーム-Fn(例えばフレーム-n)を生成するために使用される。
【0044】
さらに、コマンドは、CPU702により生成され、コマンドバッファに含められ、対応するフレームがレンダリングされ終わった時に通知を提供できる。一実施形態では、通知は、ビデオフレームの対応するアセットがレンダリングされ終わった時に提供される。よって、通知は、グラフィックスパイプラインで描画呼び出しコマンドを実行するGPU716により生成され、GPU API250を使用してアセットストアコントローラ230へ配信される。
【0045】
アセット認識コンピューティングアーキテクチャ200は、アセットストア210におけるアセットの格納及びアクセスを管理するように、より具体的には、コンピューティングアーキテクチャ200全体にわたるアセット認識情報の流れを管理するように構成されたアセットストアコントローラ230を含む。一実施形態では、アセットストアコントローラ230は、1つ以上のコプロセッサを含む「オンチップ複合体」またはユニットとして構成される。他の実施形態では、アセットストアコントローラ230は、他のオンチップユニットからの支援を受けて、CPU702上で実行されるアプリケーションとして構成される。
【0046】
前述のように、アセットストアコントローラ230は、ビデオフレームを生成するために使用される1つ以上の描画呼び出しのためにGPU API250を使用して、別個のまたはAPIを使用して、CPU702からAAD情報のストリームを受信するように構成される。例えば、AADは、対応するビデオフレームの描画及び/またはレンダリングに必要な全てのアセットの識別(例えばアセットID)と、それらのアセットそれぞれのロード優先度とを含む。例えば、アセットのロードの優先度は、その描画呼び出しが必要とする他のアセットのロードと比較して与えられる。アセットストアコントローラはさらに、グラフィックスパイプラインで描画呼び出しを実行する時に、アセットに必要な最小限LODを優先させ得る。
【0047】
アセット情報を受信すると、アセットストアコントローラ230は、描画呼び出しの1つ以上のアセット(例えばLODデータ)を、AAD(例えばアセットのロード優先度)に基づいて、アセットストア210からシステムメモリ220にロードし始める。具体的には、一実施形態では、描画呼び出しのアセットのLODデータをロードする要求は、描画呼び出しのコマンド及び描画呼び出しのAADがコマンドバッファに書き込まれるのと実質的に同時に発生する。すなわち、描画呼び出しのアセットのLODデータをロードする要求は、バインド時に発生する。
1つ以上のアセットがバインドされた時に、描画呼び出しの1つ以上のアセットのLODデータのロードを同時にトリガーすることにより、少なくとも最小限LODをロードして、GPU716によるグラフィックスパイプラインでの描画呼び出しをタイムリーに実行することができる。さらに、描画呼び出しに必要なアセットの少なくとも最小限LODをロードするバインド時トリガーは、GPU716が必要なアセットのロードを待機するGPUストールの発生を減少させる。LODデータをロードする要求がバインド時に発生する必要はなく、他の実施形態では、AADは描画呼び出しコマンドと共にコマンドバッファに書き込まれ、別個に、かつ別の時に、アセットのロードを要求するために、AADはアセットストアコントローラ230に送信される。
【0048】
一実施形態では、ロードは優先度に従って行われる。例えば、全てのテクスチャの「最小限LOD」が最初にロードされ、次に、優先度情報に基づいて、より高いLODがロードされる。また、ロードに関して、一部のアセットは他のアセットよりも優先度が高く、よって、優先度の高いアセット(例えば最小限LODまたはより高いLOD)が最初にロードされ、その後に優先度の低いアセット(例えばその最小限LODまたはより高いLOD)がロードされる。
一実施形態では、1つ以上のアセットのロードが完了すると、対応するアセットがロードされたこと、及びそのアセットがロードされた程度(例えば対応するLODのロードステータス)が、GPU716に通知される(アセットIDを使用して)。他の実施形態では、例えばGPU716により描画呼び出しコマンドが実行される時に、GPU716は、ロードステータスにアクセスするように構成される。
【0049】
対応するアセットのLODのロードを要求し、追跡するように構成されたアセットストアコントローラ230により、ロードステータスは特定され得る。このように、対応するアセットのロード状態は、例えばGPU API250を直接使用して、またはコマンドバッファを介して、またはGPU716によるロード状態のフェッチを介して、アセットストアコントローラ230からGPU716に通信され得る。
AADは、特定のアセットの最小限LOD及び場合によってはLOD集合、並びにシステムメモリ220へのアセットのロード状態に関連する情報を含むことから、GPU716は、所与のアセットの少なくとも最小限のLODを使用して、描画呼び出しの実行を開始するように構成される。より具体的には、GPU716は、AAD(例えばロード状態)に基づいて、対応する描画呼び出しの特定のアセットでロード済みの最も高いLODを特定できる。よって、GPU716は、ロード済みの最も高いLODを使用して、それより高いLOD(例えばロードされていないLOD)は使用せずに、描画呼び出しを実行できる。
【0050】
さらに、アセット認識は描画呼び出しの対応するアセットのロード状態を含むことから、GPU716は、対応するアセットの必要なLOD(例えば最小限LOD)がシステムメモリにロードされ終わったか否かを判断するように構成される。最小限LODがロードされ終わっていない場合、GPUは、例えば最小限LODまたはプロキシアセット(システムメモリにプロキシアセットがまだない場合)をロードするために、「緊急ロード」要求を発行することができる。
GPUは、最小限LODまたはプロキシアセットのロードが完了するまで、ストールし得る。緊急事態の判断は、描画呼び出しの実行前または実行中に行われ得る。例えば、アセットストアコントローラ230及び/またはGPU716は、前の描画呼び出しがグラフィックスパイプラインで実行されている間に、またはアセットの使用を含むビデオフレームの任意の描画呼び出しがGPU716により実行され終わる前に、判断を行い得る。最小限LODのロードが完了していない場合、アセットストアコントローラ230またはGPU716は、その時点で「緊急ロード」要求を発行し得る。
【0051】
アセットストアコントローラ230はまた、システムメモリの割り当てを解除するように構成される。具体的には、前述のように、ビデオフレームのレンダリングの終了が完了した時に、通知が生成され得る。さらに、AADは、特定のアセットのレンダリング終了に関するコマンドバッファからの通知を含み得る。通知は、GPU API250を使用して、コマンドバッファ内の描画呼び出しコマンドを実行するGPUから、アセットストアコントローラ230へ配信され得、コマンドバッファは、通知を生成し配信するためのコマンドを含み得る。
このように、そのビデオフレームのアセットを対象にできることで、これらのアセットを格納するメモリスペースが解放され得る。さらに、アセットストアコントローラは、システムメモリにロードされたアセットの使用状況を追跡するように構成される(例えばテクスチャが読み出された回数などを含むLODデータの使用状況が追跡される)。よって、ビデオフレームのレンダリングに使用されていないアセットを対象にできることで、これらのアセットを格納するメモリスペースが解放され得る。
アセットは、その全体(全てのLOD)が解放されてもよく、またはLODの部分集合のみが解放されてもよい。これらの決定を行うことを支援するために、いくつかの実施形態では、GPU716は、アセットの使用状況を追跡するように構成され、アセットの使用状況には、例えば、テクスチャの場合は、使用された最小限LOD及び最大限LOD、並びに全体アクセス回数またはLODごとのアクセス回数、描画呼び出しの場合は、描画呼び出しの呼び出しと実行またはそれらの欠如(いくつかの呼び出しは条件付きで実行制御され得る)の結果として書き込まれたピクセルの数、モデルの場合は、使用されたLOD及び生成された頂点の数が挙げられる。
いくつかの実施形態では、部分的にロードされたアセットのロードされたLODの使用状況を使用して、これらのアセットの最も高いLODのロードが優先され得、例えば、2つのアセットのLOD0のロードがまだ完了しておらず、1つのアセットのLOD1はたくさん使用されることが見込まれ得るが、もう1つのアセットのLOD1はそうではない場合、たくさんLOD1が使用されるアセットのLOD0が優先されなくてはならない。
【0052】
システムメモリのロード及び解放の一環として、ページテーブル、CPUキャッシュ、及びGPUキャッシュの操作が必要になることもあり、従って、アセットストアコントローラ、CPU、及びGPUは、これらの動作を加速するように構成され得る。例えば、GPU716は、アセットストアコントローラ230によるシステムメモリ220のロード及び解放を加速するように構成され得る。アセットストアコントローラ230によるメモリのロード及び解放は、ページテーブル及びGPUキャッシュ718の操作を必要とし、よって、GPU716は、これらのプロセスを加速するように変更され得る。さらに、CPU702は、アセットストアコントローラ230によるシステムメモリ220のロード及び解放を高速化するように構成され得る。アセットストアコントローラ230によるメモリのロード及び解放は、ページテーブル及びCPUキャッシュ(図示せず)の操作を必要とし、よって、CPU702は、これらのプロセスを加速するように変更され得る。
【0053】
一実施形態では、CPU702は、どのアセットが現在システムメモリ220内にあるか、またはどのアセットがグラフィックスの特定のフレームに使用されるかに関して、アセットストアコントローラ230に問い合わせるように構成される。CPU702はまた、アセットストアのコンテンツに関して、アセットストアコントローラ230に問い合わせるように構成される。
【0054】
他の実施形態では、CPU702は、対応するアセットのロードに関して、アセットストアコントローラ230に有益な助言を提供するように構成される。有益な助言は、生成されているいずれかの特定の描画呼び出しに必ずしも関連してはいない。例えば、有益な助言は、予測される描画呼び出しに使用され得るアセットのLODデータを、特定の優先度でロードする要求として構成され得る。
【0055】
図3は、本開示の一実施形態による、CPU702がゲームを実行している間にビデオフレームを生成する時にアセットを認識するCPU702及びGPU716を含むコンピューティングシステムのレンダリングパイプラインを示す。フレームの更新は、所定のフレームレンダリング速度に間に合うように実行される。例えば、本開示の実施形態は、毎秒60フレームで、フレームレンダリングを実行できる。他の実施形態は、より低速または高速でフレームレンダリングを実行するのに適している。レンダリングパイプライン301は、前述のように、クライアントデバイス110及びクラウドゲームネットワーク190内で、単独で、または組み合わせて、実施され得る。
【0056】
具体的には、レンダリングパイプラインは、CPU702、GPU716、及びこれら両者によりアクセス可能であり得るメモリ(例えばディスプレイなどに配信されるレンダリングされたビデオフレームを格納するためのアセットストア210、システムメモリ220、共有メモリ、頂点バッファ、インデックスバッファ、深度またはZバッファ、フレームバッファ)を含む。レンダリングパイプライン(またはグラフィックスパイプライン)は、3D(三次元)ポリゴンレンダリングプロセスを使用する時など、画像をレンダリングするための一般的なプロセスを例示する。例えば、レンダリング画像のレンダリングパイプライン301は、ディスプレイにおけるピクセルそれぞれの対応する色情報を出力し、色情報は、テクスチャ及びシェーディング(例えば色、シャドウイングなど)を表し得る。
【0057】
CPU702は、一般に、CPU702上で実行されるゲームのビデオフレームのシーン生成及び/またはオブジェクトアニメーションを実行するように構成され得る。CPU702は、3D仮想環境内のオブジェクトに対応する入力ジオメトリを受信する。入力ジオメトリは、3D環境内の頂点、及び頂点それぞれに対応する情報として表され得る。例えば、3D仮想環境内のオブジェクトは、頂点により画定されたポリゴン(例えば三角形)として表され得、次に、対応するポリゴンの表面は、レンダリングパイプライン301を介して処理されて、最終的な効果(例えば色、テクスチャなど)が実現される。また、テクスチャ及びモデル情報は、グラフィックスパイプラインの入力として提供され得る。
CPU702の動作はよく知られており、本明細書では概略的に説明される。一般的に、CPU702は、フレームからフレームへのオブジェクトアニメーションを実施し、これは、手動での動画化、人間の役者からのキャプチャ、及び/またはオブジェクトにかかる力及び/またはオブジェクトが加える力(例えば重力などの外力、及び動きを誘発するオブジェクトの内力)に応じたシミュレーションにより、行われ得る。例えば、CPU702は、3D仮想環境において、オブジェクトの物理シミュレーション、及び/または他の機能を実行する。次に、CPU702は、GPU716により実行されるポリゴンの頂点の描画呼び出しを発行する。
【0058】
具体的には、CPU702により生成されたアニメーションの結果は、頂点バッファに格納され得、その後、ディスプレイへのポリゴンの頂点の投影、またはポリゴンの頂点をレンダリングするために投影されたポリゴンのテッセレーションを行うように構成されたGPU716により、頂点バッファはアクセスされる。すなわち、GPU716は、3D仮想環境内のオブジェクトを構成するポリゴン及び/またはプリミティブをさらに構築するように構成され得、これには、ポリゴンのライティング、シャドウイング、及びシェーディングの計算を実行することが含まれ、これらはシーンのライティングに依存する。
視錘台(ビュー・フラスタム: view frustum)の外側のプリミティブを識別するまたは無視するためのクリッピング、及びシーン内のオブジェクトをディスプレイ上に投影する(例えばオブジェクトをユーザの視点に関連付けられた画像平面に投影する)ためのラスター化など、さらなる動作が実行され得る。単純なレベルでは、ラスター化は、各プリミティブを調べて、そのプリミティブの影響を受けるピクセルを特定することを含む。プリミティブのフラグメンテーションを使用して、プリミティブはピクセルサイズのフラグメントに分割され得、各フラグメントは、ディスプレイ及び/またはレンダリングの視点に関連付けられた基準面におけるピクセルに対応する。1つ以上のプリミティブの1つ以上のフラグメントは、ディスプレイ上にフレームをレンダリングする時に、ピクセルの色に寄与し得る。
例えば、所与のピクセルに関して、3D仮想環境内の全てのプリミティブのフラグメントは、表示のためにピクセルに結合される。すなわち、対応するピクセルの全テクスチャ及びシェーディング情報が組み合されて、ピクセルの最終的な色値が出力される。これらの色値は、フレームバッファに格納され得、フレームごとにシーンの対応する画像を表示する時にスキャンされ、対応するピクセルに取り込まれる。
【0059】
図3に示されるように、レンダリングパイプラインは、レンダリングされたフレームをディスプレイ710にスキャンアウトするために、CPU702、GPU716、及びラスターエンジンによりシーケンスで行われる動作を含むことが示される。例示として、フレームF0~F4をレンダリングするためのレンダリングパイプラインシーケンス391~395が示される。スペースの制約により、F4を超えるフレームのシーケンスなど、他のパイプラインシーケンスは図示されない。図3に示される例では、レンダリングパイプライン301のコンポーネントのそれぞれは、同じフレーム生成周波数で作動する。例えば、CPU702及びGPU716は、同じフレーム生成周波数で作動して、レンダリングパイプラインを介して、事前に定義されたフレームレートでフレームをレンダリングできる。
【0060】
例えば、時間t-0と示された第1のフレーム期間において、CPU702は、オブジェクトに対し物理学及び他のシミュレーションを実行し、ビデオフレーム(例えばF0)の1つ以上の描画呼び出しと共にポリゴンプリミティブをGPU716に配信する。時間t-1と示された第2のフレーム期間において、GPU716は、プリミティブアセンブリ及び他のタスクを実行して、レンダリングされたフレーム(F0)を生成する。フレームF0は、時間t-2と示された第3のフレーム期間に、スキャンアウトされる。同様に、パイプラインシーケンス392は、第2及び第3のフレーム期間にフレームF1をレンダリングし、時間t-3と示された第4のフレーム期間にフレームF1をスキャンアウトする。
また、パイプラインシーケンス393は、第3及び第4のフレーム期間にフレームF2をレンダリングし、時間t-4と示された第5のフレーム期間にフレームF2をスキャンアウトする。同様に、パイプラインシーケンス394は、第4及び第5のフレーム期間にフレームF3をレンダリングし、時間t-5と示された第6のフレーム期間にフレームF3をスキャンアウトする。また、パイプラインシーケンス395は、第5及び第6のフレーム期間にフレームF4をレンダリングし、時間t-6と示された第7のフレーム期間にフレームF4をスキャンアウトする。
【0061】
図4は、本開示の一実施形態による、CPUがゲームを実行している間にビデオフレームを生成する時の、CPU及びGPUを含むコンピューティングシステムによるアセット認識データの使用を示す。具体的には、ビデオフレームをレンダリングするレンダリング及び/またはグラフィックスパイプラインの一部が示され、これには、CPU702及びGPU716によりシーケンスで実行される動作が含まれる。示されるように、レンダリングパイプラインは、タイムライン490を基準とする。描画時402が示され、これは、GPU716が描画呼び出しの実行を開始してから、GPU716が描画呼び出しの処理を完了するまでの期間に及ぶ。描画時402は、フレーム期間1とフレーム期間2とを分ける。
【0062】
動作410にて、CPU702は、ゲームの実行を介したビデオフレーム1の処理を、フレーム期間1内に行う、及び/またはフレーム期間1の前に開始する。具体的には、ビデオフレームの1つ以上の描画呼び出しが生成され、描画呼び出しは、GPU716により実行される。
バインド時401に、CPU702は、ビデオフレームの一部をレンダリングするために1つ以上の描画呼び出しに必要なアセットをバインドする。より具体的には、バインド時401に、CPU702は、各描画呼び出しのコマンド241(塗りつぶしのないボックス)を、対応するコマンドバッファ(240)に書き込む。示されるように、動作415にて、CPU702は、バインド時401から、GPU API250を使用して、描画呼び出しのコマンド241及びAAD260(塗りつぶされたボックス)を、コマンドバッファ240に書き込む。コマンド241及びAAD260は、互いに規則的な方法で(例えば順番に)、または互いに不規則な方法(例えばインターリーブ方式)で、書き込まれ得る。
【0063】
さらに、ビデオフレームをレンダリングするのに必要な1つ以上の描画呼び出しが要するアセット417は、バインド時401から、システムメモリ220にロードされる。アセット417は、1つ以上のLODデータ290を含み、これには、対応するアセットを使用してビデオフレームをレンダリングする時に使用され得る最小限LODが含まれる。
システムメモリ220へのLODデータ290のロードは、CPU702がビデオフレームの生成に必要な全てのコマンドをコマンドバッファ240に書き込むのを完了することを待たずに開始されるが、アセットストアコントローラ230が、より優先度の高いLODデータなどの他のロード動作を実行するので忙しい場合、アセット417のLODデータがシステムメモリ220にロードされる前に、遅延が発生し得る。システムメモリの割り当て解除411は、アセット417のLODデータ290をロードする前に実行される必要があり得る。
【0064】
CPU702及びGPU716を含むアセット認識コンピューティングアーキテクチャでは、前述のように、LODデータのロードが追跡され得る。このように、GPU716及び/またはアセットストアコントローラ230は、対応するアセットの最小限LODのロードが完了したか否かを判断するように構成され得る。肯定的な判断の場合は、GPU716は、対応するアセットの最小限LODを使用して、ビデオフレームのレンダリングに進み得る。否定的な判断の場合は、GPU716及び/またはアセットストアコントローラは、最小限LODデータの緊急ロード要求を発行することができる。
ロードステータスの判断及び緊急ロードの要求は、描画時402に、または前の描画呼び出しの実行中に、または動作420に示されるフレーム1のGPU処理の開始時に、または別の時に、行われ得る。前述のように、アセットストアコントローラは、GPUに、対応する描画呼び出しのアセットのロードステータスを通知し得る、またはGPUは、アセットストアコントローラからロードステータスを照会及び/またはフェッチするように構成され得る。
いくつかの実施形態では、コマンドバッファ内の条件付きコマンドを使用して、アセット417のLODデータのロードステータスを照会し、コマンドフローを変更することができ、例えば、最小限LODのロードが完了していない場合は描画呼び出しが完全にスキップされる(すなわちGPUのストールが回避される)、またはプロキシアセットを使用してレンダリングが行われる、またはロードされたLODに基づいてカスタマイズされたレンダリングが可能となる。さらに他の実施形態では、GPUは、AADを使用して、これらの同じ決定を行うことができ、例えば最小限LODデータのロードが完了していない場合は、描画呼び出しが完全にスキップされる(すなわちGPUのストールが回避される)。
【0065】
LODデータの使用状況も、LODクランプ403を使用して制御され得る。システムメモリにまだロードされ終わっていないLODデータの使用をGPU716が試みないように、描画時402またはそれより前の時点で、GPUは、ロード済みの最も高いLODの番号(例えばLODクランプ)をキャッシュして、描画呼び出しが開始される前にシステムメモリ内に存在すると特定されたLODデータのみを使用し、すなわちLODデータへのアクセスは、LODクランプ403でクランプされる。例えば、LODクランプは、描画時402に、または前の1つ以上の描画呼び出しの実行中に、またはレンダリングのフレーム全体の開始時に、キャッシュされ得る。
【0066】
動作420にて、GPU716は、ビデオフレーム(例えばフレーム1)のレンダリングを、フレーム期間2内に行う、及び/またはフレーム期間2の前に開始する。前述のように、動作420aにて、描画呼び出しが発行される前であっても、対応する描画呼び出しの特定のアセットの最小限のLODがロードされ終わっているかを、そのアセットのAAD及びロード追跡に基づいて判断する、GPU716による任意の早期処理が存在し得る。
【0067】
図5は、本開示の一実施形態による、中央処理装置により実行されるゲームのビデオフレームを生成する時に使用される対応するアセットの詳細度データ、及びLODデータをロードしている間のロードクランプの実施の例示である。用語LODデータ及びLODは、アセット及び/または複数のアセットに対応するもののように、同じ意味で使用され得る。
具体的には、対応するアセットのLODデータが示される。LODデータには、前述のように、様々な解像度のLOD0、LOD1、LOD2、及びLOD3が含まれ得、慣習に従って、LOD0は詳細度が最も高く、LOD1、2、及び3は徐々に詳細度が低くなる。例えば、テクスチャアセットの場合、LODデータは、テクスチャのミップマップチェーンであり得る。アセットの場合、最小限LODはLOD2と定義され、グラフィックスパイプラインで実行される描画呼び出しの間に、最小限LODがアセットに使用され得、すなわち、描画呼び出しは、より高いLOD1または0なしで続行され得るが、システムメモリ内のLOD3及び2なしでは実行することができない。
【0068】
システムメモリにまだロードされ終わっていないLODデータの使用をGPU716が試みないことを確実にするために、LODクランプが実施され得る。描画時402またはそれより前の時点で、GPUは、ロード済みの最も高いLODを表す番号をキャッシュする。LODクランプのキャッシュされた値は、描画呼び出しを実行する時にGPUにより使用され、よって、GPUは、対応するアセットのLODデータ(例えばテクスチャ及び/またはモデル)へのGPUアクセスを、LODクランプのこのキャッシュされた値にクランプし、この値を超えて、メモリに存在しないものにアクセスしないようにする。
すなわち、(例えば描画時402に)まだロードされ終わっていないLODを、GPUが描画呼び出しを実行する時に使用を試みないことを確実にするために、LODクランプが使用される。さらに、描画呼び出しの実行全体にわたり同じLODデータ集合が使用されることを確実にするために、LODクランプが使用され、よって、描画時402の後(例えば描画呼び出しの実行中)にシステムメモリにロードするために到着するLODデータは、描画呼び出しの実行には使用されない。
【0069】
図5では、線403aにより、LODクランプの一例が示される。この例では、描画時402に、LOD3及びLOD2は完全にロードされ終わっているが、LOD1は部分的にしかロードされていないため、LODクランプは、LOD値の2(LOD2を表す)に設定される。GPU716は、LODクランプよりも高いLOD値を使用しないように構成される。例えば、テクスチャを使用するプリミティブがカメラの近くに存在し、通常LOD1または0を使用してレンダリングする場合でも、LODクランプが2に設定されていると、これらのより高いLODは使用されない。
【0070】
また図5では、線403bにより、LODクランプの別の例が示される。この例では、描画時402に、LOD1が完全にロードされ終わっており、よって、LODクランプはLOD値の1に設定され、描画呼び出しを実行する時に、GPU716によりLOD1が使用される。いくつかの実施形態では、LODクランプは、描画時に設定され、他の実施形態では、LODクランプは、フレームのGPU処理420内の描画時より前の時点で、またはフレームのGPU処理420の開始時などのさらに前の時点で、設定される。
【0071】
図1A図1C及び図2の様々なクライアントデバイス110及び/またはクラウドゲームネットワーク190(例えばゲームサーバ160及び/またはゲームタイトル処理エンジン111及び111’)の詳細説明と共に、図6Aのフロー図600Aは、本開示の一実施形態による、中央処理装置及びグラフィック処理装置を使用してビデオフレームを生成するアセット認識コンピューティングシステムによるゲーム実行方法を例示する。
【0072】
610にて、方法は、CPUにより、ビデオフレームのうちの1つのビデオフレームの描画呼び出しを生成することを含む。描画呼び出しは、CPUによるゲームの実行中に生成される。前述のように、1つ以上の描画呼び出しは、ビデオフレームのレンダリングに関連付けられて生成され得る。
【0073】
例えば、描画呼び出しは、前のシーンと新たなシーンとの間の遷移を定義するカットシーン中に生成される。新たなシーンを描画するには、システムメモリに多くのアセットがロードされる必要があり得る。しかし、アセット認識コンピューティングアーキテクチャは、最小限のLODデータを使用して新たなシーンをレンダリングすることが可能であり、よって、GPUがストールする可能性が削減される。
【0074】
620にて、方法は、バインド時に、描画呼び出しのコマンドをコマンドバッファに書き込むことを含む。具体的には、CPU上で実行されるゲームは、グラフィックスパイプラインを介して描画呼び出しが処理される時に描画呼び出しが要する1つ以上のアセットを、GPU APIを使用してバインド時にバインドし、すなわち、GPU APIを使用して、アセットに関連するコマンドをコマンドバッファに書き込む。
【0075】
630にて、方法は、描画呼び出しのアセット認識データ(AAD)をコマンドバッファに書き込み、またアセットストアからシステムメモリへ1つ以上のLODデータのロードを開始することを含む。具体的には、ゲームがCPU上で実行されると、描画呼び出しごとに、AADが生成され得る、またはアクセス及び/または特定され得る。例えば、AADは、対応する描画呼び出しに必要な各アセットの識別子(例えばアセットID)と、描画呼び出しのレンダリングに使用され得る各アセットの最小限LODと、対応する描画呼び出しに必要な他のアセットの優先度と比較した場合のシステムメモリへの各アセットのロード優先度とを含み得る。
【0076】
CPUが(GPU APIを使用して)描画呼び出しコマンド及びAADをコマンドバッファに書き込むと、CPUはまた、コンピューティングシステムが使用するシステムメモリに描画呼び出しの1つ以上のLODデータをロードすることを、アセットストアコントローラに要求する。アセットストアコントローラに対し要求が発行された時に、LODデータのロードが開始されるが、1つ以上のLODデータの実際のロードは、必ずしもまだ発生していない場合がある。
例えば、アセットの最初の複数のLODデータは、システムメモリにロードされ始め、アセットは描画呼び出しを処理する時に使用され、最初の複数のLODデータは最小限LODを含む。具体的には、アセットストアコントローラは、描画呼び出しに必要な1つ以上のアセットのAADを含む情報のストリームを受信するように構成される。
AADは、ビデオフレームの描画に必要なアセットの識別子と、アセットのロード優先度と、これらのアセットを使用するビデオフレームのレンダリング終了の通知とを含む。LODデータは、アセットストアコントローラにより、アセットストアからシステムメモリへロードされる。前述のように、CPUは、バインド時にGPU APIを使用して、LODデータをロードするようにアセットストアコントローラに要求でき、一実施形態では、例えばAADを有する要求を送信する。また、アセットストアコントローラによりAADが受信されると、AADを使用してLODデータの要求が行われ得、よって、他の実施形態では、AADの受信により、アセットストアからシステムメモリへ1つ以上のLODデータのロードがトリガーされる。
【0077】
アセットストアコントローラは、システムメモリへのアセットのロードを調整するように、また、一実施形態では、ロードステータスをコマンドバッファのAADに書き込むなど、何らかの手段によりロードステータスをGPUに通知するように、構成される。また、条件付きコマンドがコマンドバッファに配置されて実行され得、これにより、GPUは、描画呼び出しで使用されるアセット(例えばLODデータ)のロードステータスを、アセットストアコントローラから照会及び/またはフェッチする。
【0078】
さらに、アセットストアコントローラは、システムメモリの割り当て解除を管理するように構成される。具体的には、CPU及び/またはアセットストアコントローラは、描画呼び出しの実行が完了したことを、GPUにより通知される。例えば、描画呼び出しがビデオフレームのレンダリングを完了したことを示す通知を生成し、CPU及び/またはアセットストアコントローラに通知を配信するコマンドが、描画呼び出しのコマンドバッファに配置され得る。
このようにして、描画呼び出しが使用した1つ以上のアセットを格納するメモリスペースを解放することができる。他の実施形態では、アセットストアコントローラは、システムメモリに格納されたアセットの使用を追跡することができる。グラフィックスパイプラインで現在のビデオフレームをレンダリングするのにアセットが使用されていない場合、アセットストアコントローラは、アセットが描画呼び出しの処理に不要になったと判断することができ、対応するメモリスペースを解放し得る。
【0079】
640にて、方法は、GPUにより、システムメモリへ書き込まれたLODデータを使用して、フレームの描画呼び出しを実行することを含む。CPUは、次の描画時(例えば現在のフレーム期間内)に実行する描画呼び出しをGPUに対し発行し、描画呼び出しは、前のフレーム期間にCPUにより生成されている。このように、ビデオフレームは、次のフレーム期間でスキャンアウトするのに間に合うようにレンダリングされ得る。
GPUは、AADに基づいて、少なくとも最小限のLODデータを使用して描画呼び出しを実行する。例えば、各アセットは、最小限LODを有し、これは、対応するアセットを必要とする対応する描画呼び出しを処理するのに使用され得る。アセット認識コンピューティングアーキテクチャ(例えばGPUと連携して作動するCPU及び/またはアセットストアコントローラ)は、アセットのロードを追跡する(例えば各アセットのロード状態を特定する)ことができるため、GPUは、対応するアセットを必要とする描画呼び出しが実行される時に、対応するアセットにどのLODを使用するかを特定することができる。
例えば、上記で紹介されたアセットでは、システムメモリへの最初の複数のLODデータのロードは、CPU及び/またはアセットストアコントローラにより追跡される。このように、追跡を行うCPU及び/またはアセットストアコントローラは、GPU APIを呼び出して、または別の方法で、そのアセットのロード状態(例えば最初の複数のLODデータはどの程度ロードが完了したか)をGPUに通知することができる。また、GPUは、アセットに関連付けられた最初の複数のLODデータを認識する。一実施形態では、システムメモリにロード済みである場合にのみ、より高いLODが利用されることを確実にするために、システムメモリにロード済みの最大すなわち最も高いLODデータのキャッシュされた値が使用され、これは下記の図6Bに関連してより完全に説明される。
【0080】
図6Bは、本開示の一実施形態による、ビデオフレームを生成するために対応する描画呼び出しを実行する時に、アセットのLODデータのロードステータスを考慮することを示すフロー図600Bである。前述のように、描画呼び出しのLODデータは、システムメモリにロードされる。具体的には、650にて、LODデータは、AADに基づく優先度に従ってロードされる。例えば、対応するアセットのLODデータは、特定の順序でLODデータをロードするように優先度が付けられ得、例えば、AADの優先度に基づいた順序で、全てのアセットの複数のLODデータから最小限のLODデータが最初にロードされ、その後、残りのLODデータは、再度AADの優先度に基づいた順序で、詳細度の最も低いものから最も高いものへとロードされる。
【0081】
GPU及び/またはコマンドバッファは、後述されるように、ロード状態に応じて異なるアクションのうちの1つを実行できる。すなわち、GPU及び/またはコマンドバッファは、条件付き実行制御を有し、これにより、LODロード状態に基づいて異なるアクションを実行することが可能となる。
具体的には、対応する描画呼び出し内のいくつかの呼び出し及び/またはコマンドは、LODロードステータスに基づいて、条件付きで実行制御され得る。例えば、コマンドバッファは、分岐命令またはこれらに相当するものを有することができ、これらは実行されると、LODロード状態に基づいて異なるアクションを実行し、例えば、LODロード状態は、これらの分岐命令を使用して確認され得、特定のLODがロードされた場合は、1つのコマンド集合が実行されるが、しかしそうでない場合は、別のコマンド集合が実行される。
【0082】
判定ステップ655にて、システムメモリにロードされ終わった最も高いLODデータと、AADに基づく対応するアセットに必要な最小限のLODデータとで、比較が行われる。この比較は、前述のように、描画時またはそれより前に行われ得る。例えば、比較は、前の1つ以上の描画呼び出しの実行中に、またはレンダリングのフレーム全体の開始時に行われ得る。
【0083】
GPUは、アセットの少なくとも最小限LODを使用するように構成され、対応するビデオフレームをレンダリングするための描画呼び出しを処理する時、ロード済みであり、かつ最小限LODよりも高い、最も高いLODを使用できる。最小限LODよりも高いLODを使用する場合、GPUは、「LODクランプ」を利用し、これは、描画呼び出しの実行時(例えば描画時)または前回にシステムメモリに完全にロードされた最も高いLODのキャッシュされた値である。
この場合、GPUは、最小限のLODデータがロード済みでありシステムメモリに格納されていることを確保するように構成される。また、より高いLOD(例えば最小限のLODデータよりも高いLOD)は、システムメモリにロード済みである場合にのみ利用されることを確実にするために、LODクランプが使用され、すなわち、GPUは、LODクランプを使用して、LODクランプを特定した時にロードされていないより高いLODデータが、対応する描画呼び出しの実行中にアクセスされないことを確実にする。
例えば、656にて、LODクランプは、ロードが完了した最も高いLODデータを表す値に設定され、すなわち、LODクランプは、キャプチャされたLODロード状態である。このように、GPUは、システムメモリにまだロードされ終わっていないLODデータにアクセスを試みることを回避する。よって、657にて、GPUにより、LODクランプにクランプされたLODデータを使用して(例えばロード済みの最も高いLODデータを使用して)、フレームの描画呼び出しが実行される。
【0084】
一方で、判定ステップ655にて、ロード済みの最も高いLODデータが、対応するアセットの最小限のLODよりも低い場合、660にて、様々な動作が実行され得る。最小限LODがシステムメモリにロードされ終わっていないとGPUが判断した場合、661にて、GPU及び/またはアセットストアコントローラは、デフォルトの(すなわちプロキシ)アセット)を、対応する描画呼び出しを処理する時に使用するために、システムメモリにロードすることを要求できる(デフォルトのアセットがシステムメモリにまだ存在しない場合)。
662にて、デフォルトのアセットは、GPUにより描画呼び出しを実行する時に使用される。あるいは、663にて、最小限のLODデータの緊急ロードが実行され得、最小限のLODデータが正常にロードされ終わるまで、GPUはストールする。いくつかの実施形態では、緊急ロードは、前の描画呼び出しの間、フレームレンダリングの開始時など、早期にトリガーされ得る。664にて、最小限のLODデータは、GPUにより描画呼び出しを実行する時に使用される。あるいは、665にて、GPUは、前述のように、描画呼び出しの実行をスキップすることを決定し得る(すなわちGPUのストールを回避するために)。
【0085】
図7は、本開示の様々な実施形態の態様を実行するために使用することができる例示的なデバイス700のコンポーネントを示す。例えば、図7は、本開示の一実施形態による、ビデオフレームをレンダリングするための描画呼び出しに必要な1つ以上のアセットに、最小限LODデータが使用され得るように、中央処理装置及びグラフィック処理装置を使用してビデオフレームを生成するアセット認識コンピューティングシステムによりゲームを実行するのに適した例示的なハードウェアシステムを示す。
このブロック図は、パーソナルコンピュータ、サーバコンピュータ、ゲームコンソール、モバイルデバイス、または他のデジタルデバイスを組み込むことができる、またはこれらであり得るデバイス700を示し、これらのそれぞれが、本発明の実施形態を実施するのに適している。デバイス700は、ソフトウェアアプリケーションと任意でオペレーティングシステムとを作動させる中央処理装置(CPU)702を含む。CPU702は、1つ以上の同種または異種の処理コアで構成され得る。
【0086】
様々な実施形態によれば、CPU702は、1つ以上の処理コアを有する1つ以上の汎用マイクロプロセッサである。メディア及びインタラクティブエンターテインメントアプリケーション、またはゲームの実行中にグラフィック処理を行うように構成されたアプリケーションなど、高並列及び計算集約的なアプリケーションに特に適合したマイクロプロセッサアーキテクチャを有する1つ以上のCPUを使用して、さらなる実施形態を実施することができる。アセットストアコントローラ230は、独立したユニットとして存在してもよく、またはコントローラの機能は、CPU702により実行されてもよい。
【0087】
メモリ704は、CPU702、アセットストアコントローラ230、及びGPU716が使用するアプリケーション及びデータを格納する。ストレージ706は、アプリケーション及びデータのための不揮発性ストレージ及び他のコンピュータ可読媒体を提供し、ストレージ706には、固定ディスクドライブ、リムーバブルディスクドライブ、フラッシュメモリデバイス、及びCD‐ROM、DVD‐ROM、Blu‐ray(登録商標)、HD‐DVD、もしくは他の光学記憶装置、並びに信号伝送及び記憶媒体が含まれ得る。
ユーザ入力デバイス708は、1人以上のユーザからのユーザ入力をデバイス700へ通信し、ユーザ入力デバイス708の例には、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、静止画もしくはビデオのレコーダ/カメラ、及び/またはマイクロフォンが挙げられ得る。ネットワークインターフェース714は、デバイス700が電子通信ネットワークを介して他のコンピュータシステムと通信することを可能にし、ローカルエリアネットワーク、及びインターネットなどの広域ネットワークを介した有線通信または無線通信を含み得る。
オーディオプロセッサ712は、CPU702、メモリ704、及び/またはストレージ706が提供する命令及び/またはデータから、アナログまたはデジタルのオーディオ出力を生成するように適合される。CPU702、GPU716とGPUキャッシュ718を含むグラフィックサブシステム、アセットストアコントローラ230、アセットストア210、メモリ704、システムメモリ220、データストレージ706、ユーザ入力デバイス708、ネットワークインターフェース714、及びオーディオプロセッサ712を含むデバイス700のコンポーネントは、1つ以上のデータバス722を介して接続される。
【0088】
アセットストア210はまた、例えばシーンをレンダリングする時にゲームに必要なアセットを格納するために含まれ得る。アセットストアは、メモリ704及び/またはストレージ706の一部であってもよい。システムメモリ220は、例えばゲームの実行中に、シーンをレンダリングする時に、描画呼び出しで使用されるアセットを格納する。
【0089】
グラフィックスサブシステム714はさらに、データバス722及びデバイス700のコンポーネントと接続される。グラフィックサブシステム714は、グラフィック処理装置(GPU)716と、グラフィックメモリ718とを含む。グラフィックメモリ718は、出力画像の各ピクセルのピクセルデータを格納するために使用される表示メモリ(例えばフレームバッファ)を含む。
グラフィックスメモリ718は、GPU716と同じデバイスに統合されてもよく、別個のデバイスとしてGPU716と接続されてもよく、及び/またはメモリ704内に実装されてもよい。ピクセルデータは、CPU702からグラフィックメモリ718へ直接提供され得る。あるいは、CPU702は、所望の出力画像を定義するデータ及び/または命令をGPU716に提供し、GPU716は、これに基づいて、1つ以上の出力画像のピクセルデータを生成する。
所望の出力画像を定義するデータ及び/または命令は、メモリ704及び/またはグラフィックメモリ718に格納され得る。実施形態では、GPU716は、シーンのジオメトリ、ライティング、シェーディング、テクスチャリング、モーション、及び/またはカメラのパラメータを定義する命令及びデータから、出力画像のピクセルデータを生成する3Dレンダリング機能を含む。GPU716はさらに、シェーダプログラムを実行することができる1つ以上のプログラム可能実行ユニットを含み得る。
【0090】
グラフィックサブシステム714は、グラフィックメモリ718から画像のピクセルデータを定期的に出力して、ディスプレイデバイス710に表示する、または投影システム740により投影する。ディスプレイデバイス710は、デバイス700からの信号に応答して視覚情報を表示することができる任意のデバイスであり得、これにはCRT、LCD、プラズマ、及びOLEDディスプレイが含まれる。デバイス700は、ディスプレイデバイス710に、例えばアナログ信号またはデジタル信号を提供できる。
【0091】
グラフィックサブシステム714を最適化するための他の実施形態は、GPUインスタンスが複数のアプリケーション間で共有され、かつ分散されたGPUが単一のゲームをサポートするマルチテナンシーGPU動作を含み得る。グラフィックサブシステム714は、1つ以上の処理デバイスとして構成され得る。
【0092】
例えば、グラフィックサブシステム714は、マルチテナンシーGPU機能を実行するように構成され得、一実施形態では、1つのグラフィックサブシステムは、複数のゲームのグラフィックス及び/またはレンダリングパイプラインを実施することができる。すなわち、グラフィックサブシステム714は、実行されている複数のゲーム間で共有される。
【0093】
他の実施形態では、グラフィックサブシステム714は、複数のGPUデバイスを含み、これらは、対応するCPU上で実行されている単一のアプリケーションのグラフィックス処理を実行するために組み合される。例えば、複数のGPUは、交代形式のフレームレンダリングを実行することができ、GPU1は第1のフレームをレンダリングし、GPU2は第2のフレームをレンダリングし、順番のフレーム期間で、最後のGPUに到達するまで同様に行われ、最後のGPUに到達すると、最初のGPUが次のビデオフレームをレンダリングする(例えばGPUが2つしかない場合は、GPU1が第3のフレームをレンダリングする)。
すなわち、フレームをレンダリングする時、GPUは循環する。レンダリング動作は重複してもよく、GPU1が第1のフレームのレンダリングを終了する前に、GPU2は第2のフレームのレンダリングを開始し得る。別の実施態様では、複数のGPUデバイスは、レンダリング及び/またはグラフィックスパイプラインで異なるシェーダ動作が割り当てられ得る。マスタGPUは、メインのレンダリング及び合成を実行する。
例えば、3つのGPUを含むグループでは、マスタGPU1が、スレーブGPU2とスレーブGPU3からの出力のメインのレンダリング(例えば第1のシェーダ動作)及び合成を実行することができ、スレーブGPU2は、第2のシェーダ(例えば川などの流体効果)動作を実行することができ、スレーブGPU3は、第3のシェーダ(例えば粒子煙)動作を実行することができ、マスタGPU1は、GPU1、GPU2、及びGPU3それぞれからの結果を合成する。
このように、異なるシェーダ動作(例えばひらめく旗、風、煙の発生、火など)の実行に、異なるGPUを割り当てて、ビデオフレームをレンダリングすることができる。さらに他の実施形態では、3つのGPUのそれぞれを、ビデオフレームに対応するシーンの異なるオブジェクト及び/または部分に割り当てることができる。上記の実施形態及び実施態様では、これらの動作は、同じフレーム期間で(同時に並行して)実行されてもよく、または異なるフレーム期間で(順次に並行して)実行されてもよい。
【0094】
従って、本開示は、様々な実施形態における、グラフィックスパイプラインを介してビデオフレームを生成する中央処理装置及びグラフィック処理装置などのアセット認識コンポーネントを含むコンピューティングシステムアーキテクチャ、及びこれを実施するための方法を説明する。CPU及びGPUによるアセット認識は、グラフィックスパイプラインで使用されるアセットの識別及び追跡を提供し、これにより、対応するビデオフレームを生成する時のグラフィックスパイプラインを介した処理に、最小限のアセット(例えば最小限の詳細度-LOD)を使用することができる。
【0095】
本明細書で定義される様々な実施形態は、本明細書で開示される様々な特徴を使用する特定の実施態様に組み合わされ得る、または組み立てられ得ることを、理解されたい。従って、提供される実施例は、いくつかの可能な実施例にすぎず、様々な要素を組み合わせてより多くの実施態様を定義することにより可能な様々な実施態様に限定されない。いくつかの例では、いくつかの実施態様は、開示される実施態様または同等の実施態様の趣旨から逸脱することなく、より少ない要素を含んでもよい。
【0096】
本開示の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な一般消費者向け電気製品、小型コンピュータ、及びメインフレームコンピュータなどを含む様々なコンピュータシステム構成で実施され得る。本開示の実施形態はまた、有線ベースまたは無線のネットワークを介してリンクされるリモート処理デバイスによりタスクが行われる分散型コンピューティング環境においても、実施することができる。
【0097】
前述の実施形態を念頭に置いて、本開示の実施形態は、コンピュータシステムに格納されたデータを伴う様々なコンピュータ実施動作を用い得ることを、理解されたい。これらの動作は、物理量の物理的な操作を必要とする動作である。本開示の実施形態の一部を形成する、本明細書で説明される動作のうちのいずれも、有益なマシン動作である。
本発明の実施形態はまた、これらの動作を実行するためのデバイスまたは装置に関する。装置は、必要な目的のために特別に構築され得る、または装置は、コンピュータに格納されたコンピュータプログラムにより選択的に有効化または構成される汎用コンピュータであり得る。具体的には、本明細書の教示に従って書かれたコンピュータプログラムにより、様々な汎用マシンを使用することができる、あるいは、必要な動作を実行するためにさらに特化した装置を構築するほうがより好都合であり得る。
【0098】
本開示はまた、コンピュータ可読媒体上のコンピュータ可読コードとして具現化することができる。コンピュータ可読媒体は、後でコンピュータシステムにより読み出され得るデータを格納できる任意のデータストレージデバイスである。コンピュータ可読媒体の例として、ハードドライブ、ネットクワーク接続ストレージ(NAS)、読み出し専用メモリ、ランダムアクセスメモリ、CD-ROM、CD-R、CD-RW、磁気テープ、並びに他の光学及び非光学データストレージデバイスが挙げられる。コンピュータ可読媒体には、コンピュータ可読コードが分散方式で格納及び実行されるように、ネットワーク接続されたコンピュータシステムにわたり分散されたコンピュータ可読有形媒体が含まれ得る。
【0099】
方法動作は特定の順序で説明されたが、オーバーレイ動作の処理が所望のやり方で実行される限り、動作の合間に他の維持管理動作が実行されてもよく、または動作がわずかに異なる時間に起こるように調整されてもよく、またはシステム内に動作を分散することで、様々な処理関連間隔で処理動作が起こることを可能にしてもよいことを、理解されたい。
【0100】
前述の開示は、理解を明確にするためにある程度詳細に説明されたが、添付の特許請求の範囲内で特定の変更及び修正を実施できることは明らかであろう。従って、本実施形態は、限定ではなく例示としてみなされるべきであり、本開示の実施形態は、本明細書に提供される詳細に限定されるものではなく、添付の特許請求の範囲内及び均等物内で変更されてもよい。
図1A
図1B
図1C
図2
図3
図4
図5
図6A
図6B
図7
【手続補正書】
【提出日】2024-04-08
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
中央処理装置(CPU)がビデオゲームを実行して、画像フレームのレンダリングのための描画呼び出しを生成し、
複数のアセットを、バインド時に前記描画呼び出しにバインドし、前記複数のアセットはアセット認識データを含むものであり、
前記アセット認識データをアセットストアコントローラに渡し、前記アセット認識データは、前記複数のアセットのそれぞれについて、対応するアセットID、対応する最小限詳細度(LOD)、および対応するロード優先度のうちの少なくとも1つを含み、
前記描画呼び出しの実行用のコマンドバッファをグラフィック処理装置(GPU)によって構成し、
前記バインド時に前記アセットが前記描画呼び出しにバインドされたときに、前記複数のアセットに対する複数のロード優先度に基づいて、前記複数のアセットに対する複数の最小限LODを前記アセットストアからシステムメモリにロードすることを開始し、
前記複数のアセットについて、少なくとも前記複数の最小限LODを使用して、前記GPUによって前記コマンドバッファを実行する、
方法。
【請求項2】
前記アセット認識データを前記コマンドバッファへとロードする、
請求項1に記載の方法。
【請求項3】
前記複数のロード優先度に基づいて、前記複数のアセットに対する前記複数の最小限LODのロードが完了した後に、前記複数のアセットそれぞれに対する次の最大レベルのLODをロードし、
優先順位の高い第1アセットに対する第1の次の最大レベルのLODが、優先順位の低い第2アセットに対する第2の次の最大レベルのLODよりも前にロードされる、
請求項1に記載の方法。
【請求項4】
前記アセットストアコントローラによって、前記複数のアセットに対する複数のロード状態を動的に追跡し、
前記複数のロード状態を前記GPUに通信し、前記GPUは、前記複数のロード状態が、少なくとも前記複数の最小限ロードが前記システムメモリにロードされたことを示すときに、前記コマンドバッファの前記実行を開始する、
請求項1に記載の方法。
【請求項5】
前記GPUは、前記システムメモリにロードされた前記複数のアセットの各々に対応する最大LODを使用して、前記コマンドバッファの前記実行を開始する、
請求項4に記載の方法。
【請求項6】
前記GPUは、前記複数のアセットの各々について対応するロードがすべてロードされる前に、前記コマンドバッファの前記実行を開始する、
請求項4に記載の方法。
【請求項7】
アセットに対する最小限LODがシステムメモリにロードされていないと判定し、
前の画像フレームのレンダリングのために使用される描画呼び出しが実行されている間に、前記GPUによって、前記アセットストアコントローラに対して、前記アセットに対する前記最小限LODをロードするための緊急ロード要求を発行する、
請求項1に記載の方法。
【請求項8】
コンピュータシステムであって、
プロセッサと、
前記プロセッサに結合されて、前記コンピュータシステムによって実行されると、方法を前記コンピュータシステムに実行させる命令を格納したメモリを有し、前記方法では、
中央処理装置(CPU)がビデオゲームを実行して、画像フレームのレンダリングのための描画呼び出しを生成し、
複数のアセットを、バインド時に前記描画呼び出しにバインドし、前記複数のアセットはアセット認識データを含むものであり、
前記アセット認識データをアセットストアコントローラに渡し、前記アセット認識データは、前記複数のアセットのそれぞれについて、対応するアセットID、対応する最小限詳細度(LOD)、および対応するロード優先度のうちの少なくとも1つを含み、
前記描画呼び出しの実行用のコマンドバッファをグラフィック処理装置(GPU)によって構成し、
前記バインド時に前記アセットが前記描画呼び出しにバインドされたときに、前記複数のアセットに対する複数のロード優先度に基づいて、前記複数のアセットに対する複数の最小限LODを前記アセットストアからシステムメモリにロードすることを開始し、
前記複数のアセットについて、少なくとも前記複数の最小限LODを使用して、前記GPUによって前記コマンドバッファを実行する、
コンピュータシステム。
【請求項9】
前記方法では、さらに、
前記アセット認識データを前記コマンドバッファへとロードする、
請求項8に記載のコンピュータシステム。
【請求項10】
前記方法では、さらに、
前記複数のロード優先度に基づいて、前記複数のアセットに対する前記複数の最小限LODのロードが完了した後に、前記複数のアセットそれぞれに対する次の最大レベルのLODをロードし、
優先順位の高い第1アセットに対する第1の最大レベルのLODが、優先順位の低い第2アセットに対する第2の最大レベルのLODよりも前にロードされる、
請求項8に記載のコンピュータシステム。
【請求項11】
前記方法では、さらに、
前記アセットストアコントローラによって、前記複数のアセットに対する複数のロード状態を動的に追跡し、
前記複数のロード状態を前記GPUに通信し、前記GPUは、前記複数のロード状態が、少なくとも前記複数の最小限ロードが前記システムメモリにロードされたことを示すときに、前記コマンドバッファの前記実行を開始する、
請求項8に記載のコンピュータシステム。
【請求項12】
前記方法では、
前記GPUは、前記システムメモリにロードされた前記複数のアセットの各々に対応する最大LODを使用して、前記コマンドバッファの前記実行を開始する、
請求項11に記載のコンピュータシステム。
【請求項13】
前記方法では、
前記GPUは、前記複数のアセットの各々について対応するロードがすべてロードされる前に、前記コマンドバッファの実行を開始する、
請求項11に記載のコンピュータシステム。
【請求項14】
前記方法では、さらに、
アセットに対する最小限LODがシステムメモリにロードされていないと判定し、
前の画像フレームのレンダリングのために使用される描画呼び出しが実行されている間に、前記GPUによって、前記アセットストアコントローラに対して、前記アセットに対する前記最小限LODをロードするための緊急ロード要求を発行する、
請求項8に記載のコンピュータシステム。
【請求項15】
方法を実行するためのコンピュータプログラムが記録されたコンピュータ可読媒体であって、
中央処理装置(CPU)がビデオゲームを実行して、画像フレームのレンダリングのための描画呼び出しを生成するためのプログラム命令を有し、
複数のアセットを、バインド時に前記描画呼び出しにバインドするためのプログラム命令を有し、前記複数のアセットはアセット認識データを含むものであり、
前記アセット認識データをアセットストアコントローラに渡すためのプログラム命令を有し、前記アセット認識データは、前記複数のアセットのそれぞれについて、対応するアセットID、対応する最小限詳細度(LOD)、および対応するロード優先度のうちの少なくとも1つを含み、
前記描画呼び出しの実行用のコマンドバッファをグラフィック処理装置(GPU)によって構成するためのプログラム命令を有し、
前記バインド時に前記アセットが前記描画呼び出しにバインドされたときに、前記複数のアセットに対する複数のロード優先度に基づいて、前記複数のアセットに対する複数の最小限LODを前記アセットストアからシステムメモリにロードすることを開始するためのプログラム命令を有し、
前記複数のアセットについて、少なくとも前記複数の最小限LODを使用して、前記GPUによって前記コマンドバッファを実行するためのプログラム命令を有する、
コンピュータ可読媒体。
【請求項16】
前記アセット認識データを前記コマンドバッファへとロードするためのプログラム命令を有する、
請求項15に記載のコンピュータ可読媒体。
【請求項17】
前記複数のロード優先度に基づいて、前記複数のアセットに対する前記複数の最小限LODのロードが完了した後に、前記複数のアセットそれぞれに対する次の最大レベルのLODをロードするためのプログラムを有し、
優先順位の高い第1アセットに対する第1の次の最大レベルのLODが、優先順位の低い第2アセットに対する第2の次の最大レベルのLODよりも前にロードされる、
請求項15に記載のコンピュータ可読媒体。
【請求項18】
前記アセットストアコントローラによって、前記複数のアセットに対する複数のロード状態を動的に追跡するためのプログラム命令を有し、
前記複数のロード状態を前記GPUに通信し、前記GPUは、前記複数のロード状態が、少なくとも前記複数の最小限ロードが前記システムメモリにロードされたことを示すときに、前記コマンドバッファの前記実行を開始するためのプログラム命令を有する、
請求項15に記載のコンピュータ可読媒体。
【請求項19】
前記GPUは、前記システムメモリにロードされた前記複数のアセットの各々に対応する最大LODを使用して、前記コマンドバッファの前記実行を開始するためのプログラム命令を有し、
前記GPUは、前記複数のアセットの各々について対応するロードがすべてロードされる前に、前記コマンドバッファの実行を開始する、
請求項18に記載のコンピュータ可読媒体。
【請求項20】
アセットに対する最小限LODがシステムメモリにロードされていないと判定するためのプログラム命令を有し、
前の画像フレームのレンダリングのために使用される描画呼び出しが実行されている間に、前記GPUによって、前記アセットストアコントローラに対して、前記アセットに対する前記最小限LODをロードするための緊急ロード要求を発行するためのプログラム命令を有する、
請求項15に記載のコンピュータ可読媒体。