web-dev-qa-db-ja.com

3Dゲームはどのように効率的ですか?

私が理解したことがないものがあります。 GTA IVのような優れた大きなPCゲームはCPUの50%を使用し、60fpsで回転しながら、60fpsで回転するTeapotのDXデモはなんと30%を使用できますか?

188
jmasterx

一般的に、それは

  1. ゲームは、レンダリングに必要なものに関して最適であり、
  2. ハードウェアを特別に活用します。

たとえば、作成できる簡単な最適化の1つは、見えないものを実際に描画しようとしないことです。 Grand Theft Auto IVの都市景観のような複雑なシーンを考えてみましょう。レンダラーは、実際にはすべての建物や構造物をレンダリングしているわけではありません。代わりに、カメラが見ることができるものだけをレンダリングしています。元のカメラに面して、同じ建物の後ろに飛び回ることができた場合、半構築されたくり抜かれたシェル構造が表示されます。カメラが見ることができないすべてのポイントはレンダリングされません-あなたはそれを見ることができないので、あなたにそれを見せようとする必要はありません。

さらに、特定のハードウェアに対して開発する場合、最適化された命令と特別な手法が存在し、さらに高速化を実現します。

質問のもう1つの部分は、デモでCPUを大量に使用する理由です。

... 60fpsで回転するティーポットのDXデモでは、なんと30%を使用しますか?

グラフィックAPIのデモ(dxdemoなど)が、よくある例を示すために必要なすべての機能をハードウェアがサポートしていない場合、ソフトウェアレンダラーと呼ばれるものにフォールバックするのが一般的です。これらの機能には、影、反射、光線追跡、物理学などが含まれます。

これは、APIのすべての機能を披露するために、存在しそうにない完全にフル機能のハードウェアデバイスの機能を模倣しています。しかし、ハードウェアは実際には存在しないため、代わりにCPUで実行されます。これは、グラフィックカードに委任するよりもはるかに効率が悪いため、CPU使用率が高くなります。

69
John Feminella

忍耐、技術的スキル、持久力。

最初の点は、DXデモは主に教材であるため、実行速度ではなく明確にするために行われます。

凝縮することはかなり大きな課題ですが、ゲーム開発は主にデータと実行パスをほぼ病理学的な程度まで理解することです。

  1. コードは、データとターゲットハードウェアの2つのことを中心に設計されています。
  2. 最速のコードは決して実行されないコードです-データをバッチに分類し、必要なデータに対してのみ高価な操作を行います
  3. データの保存方法が重要です-連続したアクセスを目指して、高速でバッチ処理できるようにします。
  4. 可能な限りすべてを整理
  5. 最新のCPUは高速で、最新のRAMは非常に低速です。キャッシュミスは致命的です。
  6. できる限りGPUにプッシュします-高速なローカルメモリがあるため、データを大量に処理できますが、データを正しく整理することで支援する必要があります。
  7. GPUがストールする原因となるため、多くのレンダーステートスイッチを実行しないでください(同様の頂点データをまとめてバッチ処理します)。
  8. テクスチャをスウィズルし、2のべき乗であることを確認します-これにより、GPUのテクスチャキャッシュのパフォーマンスが向上します。
  9. 3Dモデルの低/中/高バージョンとカメラプレーヤーからの距離に基づいて切り替える-画面上に5ピクセルしかない場合、高解像度バージョンをレンダリングするポイントはありません。
96
zebrabox

3Dゲームは目を欺くのに最適です。たとえば、画面空間アンビエントオクルージョン(SSAO)と呼ばれる手法があります。これは、表面の不連続部に近いシーンの部分をシャドウイングすることにより、よりリアルな感覚を与えます。壁の角を見ると、ほとんどの場合、中心よりもわずかに暗いように見えます。

かなり正確なシミュレーションに基づくラジオシティを使用しても、まったく同じ効果が得られます。ラジオシティでは、バウンスライトなどの影響も考慮されますが、計算コストが高くなります。これはレイトレーシング技術です。

これはほんの一例です。リアルタイムコンピューターグラフィックスには数百のアルゴリズムがあり、それらは基本的に適切な近似に基づいており、通常は多くの仮定を行います。たとえば、速度、カメラの一般的な位置、シーンジオメトリの変更量に応じて、空間的な並べ替えを非常に慎重に選択する必要があります。

これらの「最適化」はhuge-アルゴリズムを効率的に実装し、10倍高速に実行できますが、同様の結果(「チート」)を生成するスマートアルゴリズムを選択すると、O( N ^ 4)からO(log(N))へ。

実際の実装を最適化することでゲームがさらに効率的になりますが、それは単なる線形最適化です。

39
mnemosyn

えええええっ!

私はこの質問が古いことを知っていますが、誰もVSyncについて言及していないということはわくわくします!!! ???

ゲームのCPU使用率を60fpsで、ティーポットデモのCPU使用率を60fpsで比較しました。

どちらも正確に60fpsで(多かれ少なかれ)実行されるのは明らかではありませんか?それが答えにつながります...

両方のアプリはvsyncを有効にして実行されます!これは、レンダリングフレームレートがモニターの「垂直ブランクインターバル」にロックされていることを意味します(簡略化)。グラフィックハードウェア(および/またはドライバー)は最大でのみレンダリングします。 60fps。 60fps = 60Hz(Hz =秒)リフレッシュレート。そのため、おそらくかなり古い、ちらつきのあるCRTまたは一般的なLCDディスプレイを使用します。100Hzで動作するCRTでは、おそらく100Hzまでのフレームレートが表示されます。VSyncは= LCDディスプレイ(通常60Hzのリフレッシュレートがあります)。

そのため、ティーポットデモは実際にははるかに効率的に実行できます。 CPU時間の30%を使用する場合(GTA IVのCPU時間の50%と比較して)、おそらく各フレームのCPU時間は少なくなり、次の垂直ブランク間隔まで長く待機します。両方のアプリを比較するには、vsyncを無効にして再度測定する必要があります(両方のアプリのはるかに高いfpsを測定します)。

Vsyncを無効にできる場合もあります(ほとんどのゲームには設定にオプションがあります)。 vsyncが無効になっていると、「ティアリングアーティファクト」が表示されることがあります。

詳細およびウィキペディアで使用される理由を見つけることができます: http://en.wikipedia.org/wiki/Vsync

30
Frunsi

ここでの多くの答えはhowの優れた指標を提供しますが、代わりにwhy

  • GTA4 最初の1週間で4億ドルかかった
  • Crytech は、nVidiaが展示会で「披露」できるようにする非常に印象的なグラフィックデモを作成しました。結果として得られた印象は、FarCryになるものを作成するために足を上げました。
  • Valveの 2005年の収益と営業利益 は、それぞれ70百万米ドルと55百万米ドルとされています。

おそらく最も良い例(確かに最もよく知られているものの1つ)はIdソフトウェアでしょう。 キーン司令官 (3Dのかなり前)の時代に、彼らは何かを達成するための賢い方法を思いついたと気づきました。1、それが最新のハードウェア(この場合はEGAグラフィックカード!)に依存していたとしても、これがあなたのゲームを際立たせるという競争よりもグラフィカルに優れていました。これは真実でしたが、彼らはさらに、新しいゲームやコンテンツを自分で考え出すよりも、テクノロジーのライセンスを取得できるため、他のエンジンから収入を得ながら、次世代のエンジンを開発し、競争を再び飛躍させることができることに気付きました。

これらのプログラマーの能力(ビジネスに精通していること)は、それらを豊かにしたものです。

それは、そのような人々を動機付けるのは必ずしもお金ではないということです。それは、達成したい、達成したいという欲求である可能性が高いです。彼らが初期に稼いだお金は、彼らが今楽しんでいることに専念する時間があることを意味します。そして、多くの人が outside interests を持っていますが、ほとんどすべてがまだプログラムを作成しており、最後の反復よりも良い方法を見つけようとしています。

簡単に言うと、ティーポットデモを書いた人には、次の問題が1つ以上あった可能性があります。

  • 少ない時間
  • 少ないリソース
  • 少ない報奨インセンティブ
  • 内外の競争が少ない
  • より小さな目標
  • 才能が少ない

最後は耳障りに聞こえるかもしれません2 しかし、明らかに他の人よりも優れている人もいます。ベルカーブは極端な場合があり、そのスキルで行われる対応の極端な傾向に引き付けられる傾向があります。

目標が低いほど、実際に主な理由になる可能性があります。ティーポットデモのターゲットは、まさにそれでした。しかし、プログラマーのデモではありませんskill3。これは、(大きな)OSの1つの小さなファセット(この場合はDXレンダリング)のデモになります。

デモを見ている人にとっては、見栄えが良ければrequiredよりも多くのCPUを使用していました。受益者がいない場合、廃棄物を排除するインセンティブはありません。それに比べて、ゲームはより良いAI、より良い音、より多くのポリゴン、より多くの効果のために予備のサイクルを持ちたいと思っています。


  1. その場合、PCハードウェアでのスムーズなスクロール
  2. おそらく私よりも多いので、私たちはそれについて明確です
  3. 厳密に言えば、それは彼/彼女のマネージャーにとってもデモだったでしょうが、ここでもやはり時間と視覚的品質の両方が重要です。
25
ShuggyCoUk

いくつかの理由のため

  • 3Dゲームエンジンは高度に最適化されています
  • ほとんどの作業はグラフィックアダプターによって行われます
  • 50%Hm、デュアルコアがあり、1つのコアのみが使用されていると思います;-)

編集:いくつかの数字を与えるために

NV-6800 GPUを搭載した2.8 Ghz Athlon-64。結果は次のとおりです。

  • CPU:72.78 Mflops
  • GPU:2440.32 Mflops
17
stacker

場合によっては、シーンが表示されるよりも進行していることがあります。たとえば、数千の頂点を持つ回転ティーポット、環境マッピング、バンプマッピング、およびその他の複雑なピクセルシェーダーをすべて同時にレンダリングすると、多くの処理が必要になります。多くの場合、これらのティーポットデモは、ある種の特殊効果を誇示するためだけのものです。また、絶対的なパフォーマンスが目標ではない場合、GPUを常に最大限に活用できるとは限りません。

ゲームでも同様の効果が見られる場合がありますが、通常はフレームレートを最大化しようとして妥協した形で行われます。これらの最適化は、ゲームに表示されるすべてに拡張されます。問題は、「最小の処理能力で最も壮観で現実的なシーンをどのように作成できるか」です。それが、ゲームプログラマーを最高のオプティマイザーにする理由です。

8
Steve Wortham
  1. シーン管理。 kdツリー、錐台カリング、bsp、階層的境界ボックス、部分的な可視性セット。
  2. LOD。遠いオブジェクトの代わりに、詳細度の低いバージョンを切り替える。
  3. 詐欺師。 LODだけでなく、オブジェクトでも絵やビルボードではない。
  4. SIMD。
  5. カスタムメモリ管理。整列メモリ、断片化の減少。
  6. カスタムデータ構造(つまり、STLなし、比較的最小限のテンプレート)。
  7. 主にSIMD用の場所での組み立て。
4

与えられたすべての質の良い適切な回答によって、重要なものがまだ欠落しています。WindowsのCPU使用率カウンターはあまり信頼できません。この単純なティーポットデモは、アイドルループでレンダリング関数を呼び出し、バッファースワップでブロックするだけだと思います。

現在、Windows CPU使用率カウンターは、各プロセス内で費やされたCPU時間だけを調べますが、このCPU時間の使用方法は調べません。追加してみてください

Sleep(0);

レンダリング関数から戻った直後に、比較します。

4
datenwolf

さらに、芸術的な観点から計算能力を節約するための多くのトリックがあります。多くのゲーム、特に古いゲームでは、影が事前に計算され、マップのテクスチャに「焼き付けられ」ます。多くの場合、アーティストは平面(2つの三角形)を使用して、木や特殊効果がほとんど同じように見える場合にそれを表現しようとしました。ゲームのフォグは、遠くのオブジェクトのレンダリングを避ける簡単な方法です。多くの場合、ゲームでは、遠景、中景、近景のすべてのオブジェクトの解像度が複数になります。

3
erjiang

Vsyncの答えを見てください。そのため、同じフレームレートで実行されています。

第二に、ゲームでCPUをリードすることはできません。簡単に説明すると、メインのゲームループは単なる無限ループです。

while(1) { 
  update();
  render();
}

ゲーム(またはこの場合はティーポット)があまり効果を上げていなくても、ループ内でCPUを使い果たしています。

GTAの50%CPUは、デモの30%よりも「生産性が高い」のです。しかし、GTAは膨大な詳細を更新しています。 「Sleep(10)」をデモに追加しても、CPUが1トン下がる可能性があります。

最後に、GPUの使用状況を確認します。デモでは、おそらく最新のビデオカードで1%未満を使用していますが、GTAはおそらくゲームのプレイ中に過半数を使用します。

要するに、ベンチマークと測定値は正確ではありません。

1
user697111

答えの核心はこれである必要があります-3Dエンジンが実行する変換は、主に加算と乗算(線形代数)(分岐またはジャンプなし)で指定され、単一のフレームを描画する操作は、複数のそのようなadd-mulのジョブは並行して実行できます。 GPUコアは非常に優れたadd-mulであり、数十または数百のadd-mullコアを備えています。

CPUには、AIやその他のゲームロジックのような単純なことを行うだけです。

1
Hassan Syed

GTA IVのような優れた大きなPCゲームはCPUの50%を使用し、60fpsで回転しながら、60fpsで回転するTeapotのDXデモはなんと30%を使用できますか?

GTAはDXデモよりも効率的である可能性が非常に高いですが、この方法でCPU効率を測定することは本質的に壊れています。効率を定義できます。特定の時間にどれだけの作業をするかによって。単純な反例:論理CPUごとに1つのスレッドを生成し、単純な無限ループを実行させます。 CPU使用率は100%になりますが、有用な作業が行われないため、効率的ではありません。

これは答えにもつながります:ゲームはどのように効率的ですか? 「偉大なビッグゲーム」をプログラミングする場合、あらゆる面でゲームを最適化するために多大な努力が注がれます(今日では通常、マルチコア最適化も含まれます)。 DXデモに関しては、そのポイントは高速ではなく、概念を示すことです。

1
Suma

CPUではなくGPU utilisationに目を向ける必要があると思います...グラフィックカードはGTA IVでTeapotサンプルよりもはるかに忙しいに違いない(実質的にアイドル状態でなければなりません)。

このモニターのようなものを使用して、次のことを確認できます。

http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html

また、フレームレートを考慮する必要があります。ティーポットサンプルがフルスピード(おそらく1000fps)で実行されており、ほとんどのゲームはモニターのリフレッシュ周波数(約60fps)に制限されています。

1
fortran

DXティーポットデモでは、CPUの30%が有用な作業を行っていません。それは他に何もすることがないので、それは忙しく待っています。

1
Chuck Walbourn

Unrealシリーズについて知っていることから、いくつかの規則はカプセル化のように破られています。コードは、ゲームに応じてバイトコードにコンパイルされるか、マシンコードに直接コンパイルされます。また、オブジェクトはメッシュの形でレンダリングおよびパッケージ化され、テクスチャ、ライティング、シャドウなどが事前計算されますが、純粋な3Dアニメーションではこれがリアルタイムで必要になります。ゲームが実際に実行されているとき、オブジェクトの可視部分のみをレンダリングし、クローズアップ時にのみテクスチャの詳細を表示するなど、いくつかの最適化もあります。最後に、ビデオゲームは、特定の時点でプラットフォームを最大限に活用するように設計されている可能性があります(例:Intelx86 MMX/SSE、DirectXなど)。

0
James P.

ここには答えの重要な部分が欠けていると思います。ほとんどの答えは「あなたのデータを知っている」と言っています。実際には、同じ方法で、同じ重要度で、あなたも知っていなければなりません:

  • CPU(クロックとキャッシュ)
  • メモリー(頻度と待ち時間)
  • ハードドライブ(速度とシーク時間の観点から)
  • GPU(#コア、クロック、およびそのメモリ/キャッシュ)
  • インターフェース:Sataコントローラー、PCIリビジョンなど.

[〜#〜] but [〜#〜]、それに加えて、現在の最新のコンピューターでは、>> 30ftp(単一の1080pイメージ)で実際の1080pビデオを再生することはできません。 64ビットでは15000 Ko/14.9 MBかかります)。その理由は、サンプリング/精度のためです。ビデオゲームは、ピクセル、画像、データなどに倍精度(64ビット)を使用することはありませんが、より低いカスタム精度(約4〜8ビット)を使用し、合理的な計算を可能にするために補間技術で再スケーリングされた精度が低い場合があります時間。

データのクリッピング(OpenGL標準とソフトウェア実装の両方)、データ圧縮など、他の手法もあります。また、ハードウェア機能に関しては、現在のGPUは現在のCPUよりも300倍以上高速であることに注意してください。ただし、問題が完全に最適化され、完全に並列化可能(特にタスクの並列化可能)でない限り、優秀なプログラマーは10〜20倍の係数を取得する可能性があります。

経験から、最適化は指数曲線に似ていると言えます。最適なパフォーマンスを実現するには、必要な時間が非常に重要になる場合があります。

ティーポットに戻るには、ジオメトリがどのように表現され、サンプリングされ、GTA 5でVsがジオメトリ/テクスチャ、そして最も重要な詳細(精度、サンプリングなど)に関してどのような精度で表示されるかを確認する必要があります。

0
Maiss