3Dゲームはどの程度効率的ですか?[閉まっている]


188

私が理解したことがないものがあります。GTA IVのような大きなPCゲームは、CPUの50%を使用して60fpsで実行できますが、回転するティーポット@ 60fpsのDXデモはなんと30%を使用しますか?


124
この質問の何が悪いのかはわかりません。他の開発者がどのように特定のことを成し遂げたかについて知りたいのは当然のことです。私たちはこの種の好奇心を奨励するべきであり、近い投票で罰するのではありません。
John Feminella、2010

2
@ user146780:誰が質問したか...私がCGIで働いているときに出会った最高のプログラマー。SGIのグル、Adobe Photoshopの並列化に取り組んでいる人々など。ここの人々は、現代のゲームを書くことがどれほど複雑であるか、またこれらのコーダーがどれほど熟練しているのか理解していません。謙虚な体験をしたい場合は、クライオテックのドイツ人がクライシスエンジンを使って何をしたか見てください。Youtubeに動画があります。あなたは単にそれを信じないでしょう。「octreesを使用する」だけではありません。通常、これらのプログラマは、平均的なプログラマよりもはるかに熟練しています。そして、あなたはGT4コーダーが非常に優れていることに賭けることができます。
SyntaxT3rr0r 2010

2
あなたはgta4を60fpsで走らせました!?GW!gta4は非常に貧弱に動作するPOSです。Forceunleashedもそうだと聞きました。ユーフォリアが犯人だと思います。正直なところ、「CPU使用率」は比較するのに非常に貧弱な方法です。単純にフレームレートのキャップを外し、どれが最も速く実行されるかを確認します。これが適切な方法です。また、この「複雑なゲーム」はたくさんのものをレンダリングする可能性がありますが、画面に相当するものしかありません。正しい順序でレンダリングされた場合、最終的には同じ量のピクセル作業になる可能性があります。 「シンプルな」デモ、そしてピクセルが機能することは本当にそれを殺すものです。
マット

8
GPU(グラフィックスプロセッシングユニット)の使用量を示すプロファイラーが必要です。GTA IVは〜99%を示し、デモは3%を示しています。
0scar

経験上、私が一緒に仕事をしたゲームプログラマーの約10%はどれも上手で、残りは最高の状態で平均的でした。一部は全く無能でした。
Skizz

回答:


69

一般的には、

  1. ゲームはレンダリングに必要なものについて最適化されており、
  2. 彼らはあなたのハードウェアを特別に利用します。

たとえば、簡単に実行できる最適化の1つは、見えないものを実際に描画しないことです。Grand Theft Auto IVの街並みのような複雑なシーンを考えてみましょう。レンダラーが実際にすべての建物と構造をレンダリングしているわけではありません。代わりに、カメラが見えるものだけをレンダリングします。元のカメラに向かって、同じ建物の裏側を飛び回ることができれば、半分造られたくり抜かれたシェル構造が表示されます。カメラが見ることができないすべてのポイントはレンダリングされません。あなたはそれを見ることができないので、あなたにそれを見せようとする必要はありません。

さらに、特定のハードウェアセットに対して開発している場合は、最適化された命令と特別な手法が存在し、さらに高速化が可能になります。

あなたの質問の他の部分は、デモがそれほど多くのCPUを使用する理由です:

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

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

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


3
DXデモもハードウェアを使用します。それで、「特別な」とは何ですか?
10

3
しかし、デモはそれについて最適である可能性は低いです。
µBio 2010

2
たとえば、ティーポットデモの@ tur1ngでは、反射、その他の効果が有効になっている可能があります。
Nick Dandoulakis、2010

2
ティーポットには、GTA4シーンよりも多くのポリゴンがある場合があります。実際のところ、グラフィックレンダリングの現在のボトルネックは、詳細を追加するバンプマッピング派生手法やその他のポストレンダリング効果など、より多くのテクスチャ効果です。
2010

5
テクスチャ-ティーポットは、すべてが法線と照明の相互作用を持つ多数の個々の三角形から作成されています。ゲームのめちゃくちゃ複雑な3Dの世界のように見えるのは、多くの場合、詳細な画像で覆われたかなり単純な大きなブロックです。「3D」の多くは、3Dシェイプ上に描かれた静的な2D画像の巧妙な影と遠近法の芸術的効果です
マーティンベケット

96

忍耐力、技術力、忍耐力。

1つ目のポイントは、DXデモは主に教材であるため、実行速度ではなく明確にするためです。

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

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

39

3Dゲームはあなたの目をだますのに最適です。たとえば、スクリーンスペースアンビエントオクルージョン(SSAO)と呼ばれる手法があります。これは、表面の不連続部に近いシーンの部分をシャドウイングすることで、よりリアルな感じを与えます。壁のコーナーを見ると、ほとんどの場合、中央よりも少し暗く見えます。

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

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

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

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


30

えーい!

私はこの質問が古いことを知っていますが、誰もVSyncについて言及していないことはエキサイティングです!!! ???

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

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

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

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

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

あなたはそれの詳細とウィキペディアでそれが使用される理由を見つけることができます:http : //en.wikipedia.org/wiki/Vsync


私は同意します。より良い比較を得るためには、vsyncを無効にする必要があります。しかし、問題の根本はまだ立っています。ティーポットの30%対ゲームの50%のCPU使用率は、通常予想されるよりも小さな違いです。しかし、環境マッピングが人気を博し始めた当時、当時のクールなnVidiaデモが環境マップのティーポットがぐるぐる回っていた頃のことを覚えています。これらのデモは通常、その日に60 fpsにも達しませんでした。私のポイントは、これらのティーポットのデモが新しい視覚効果の境界を押し広げることが多いということだと思います。
Steve Wortham、2011年

25

ここでの多くの答えは、なぜ私がなぜかいうより簡単な質問に答える方法の優れた指標を提供します

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

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

そうは言っても、そのような人々をやる気にさせるのは必ずしもお金ではありません。それは、達成したい、達成したい欲求と同じくらいの可能性があります。彼らが初期の頃に稼いだお金は、彼らが今楽しんでいることに専念する時間があることを意味します。そして、多くの人が外部の興味を持っていますが、ほとんどすべての人はまだプログラミングを行っており、最後の反復よりも優れた方法を模索しています。

簡単に言うと、ティーポットのデモを書いた人は、おそらく次の問題の1つ以上を抱えていました。

  • 時間を短縮
  • 少ないリソース
  • 報酬インセンティブが少ない
  • 内部および外部の競争が少ない
  • 低い目標
  • 才能が少ない

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

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

デモを見ている人にとっては、見栄えが良い限り、必要以上に多くのCPUを使用することはできません。受益者がいない場合、廃棄物を排除するインセンティブはありません。比較すると、ゲームはより良いAI、より良いサウンド、より多くのポリゴン、より多くの効果のために予備のサイクルを持ちたいと思います。


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

17

いくつかの理由により

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

編集:少数の数字を与えるために

2.8 GHz Athlon-64、NV-6800 GPU。結果は次のとおりです。

  • CPU:72.78 Mフロップ
  • GPU:2440.32 Mフロップ

@stacker:GPUによって実行されない一流の3Dゲームで行われるすべての計算が実際にはモノスレッドであり、偶然にもCPUの100%を満たすことを示唆していますか?ゲームのパフォーマンスが1つの非GPUコアにバインドされることを意味しますか?それを信じるのはとても難しいと思います。
SyntaxT3rr0r

4
これは、プログラムが単一スレッドであることを意味するのではなく、少なくとも1つのスレッドが可能な限り高速で実行されていることを意味します。なぜそれを遅くしたいのですか?一方、多くのゲームはほぼ完全にモノスレッドです。マルチスレッドの場合、複雑なシミュレーションを効率的に作成することは非常に困難です。同時/分散システムでは、より多くのスループットを購入するために少し多くのレイテンシを受け入れるという一般的な状況は、応答性の高いゲームには適していません。
カイロタン

8

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

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


4
  1. シーン管理。kd-trees、フラストラムカリング、bsps、階層的バウンディングボックス、部分的な可視性セット。
  2. LOD。遠くのオブジェクトの代わりに使用するために、より詳細なバージョンを切り替える
  3. 詐欺師。LODのようですが、写真や「看板」だけのオブジェクトでさえありません。
  4. SIMD。
  5. カスタムメモリ管理。メモリを揃え、断片化を減らします。
  6. カスタムデータ構造(STLなし、比較的最小限のテンプレート)。
  7. 主にSIMD用の場所での組み立て。

4

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

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

Sleep(0);

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


私は常に私のCPUの25%を使用するDXティーポットデモを持っていました。それは、私がクアッドコアを使用していたためであり、ゲームループを60 fpsでロックするために、常に時間をチェックする「Are we there there」ループがありました。私は睡眠(timeToNextFrame)にそれを変更し、CPU使用率が0近くまで低下した
ジョナサン・ピアース

3

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


1

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

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


1

GTA IVのような大きなPCゲームは、CPUの50%を使用して60fpsで実行できますが、回転するティーポット@ 60fpsのDXデモはなんと30%を使用しますか?

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

これはまた、答えにつながります。ゲームはどのように効率的になりますか?「大規模なゲーム」をプログラミングする場合、ゲームをあらゆる面で最適化するために多大な努力が費やされます(現在、通常はマルチコアの最適化も含まれています)。DXデモに関しては、その要点は高速に実行されているのではなく、概念を実証していることです。


1

CPUではなくGPUの使用率を確認する必要があると思います...グラフィックカードは、GTA IVではTeapotサンプルよりもはるかにビジーです(実際にはアイドル状態です)。

たぶん、あなたはこのモニターのようなものを使ってそれをチェックすることができます:

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

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


1

vsyncの答えを見てください。これが、同じフレームレートで実行されている理由です。

第二に、CPUはゲームでリードを逃しています。簡単に説明すると、メインゲームループは無限ループにすぎません。

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

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

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

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

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


1

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


0

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


0

ここで欠けている答えの重要な部分があると思います。ほとんどの答えは、「データを知る」ことを示しています。事実は、同じ方法で同じ程度の重要性で、次のことも知っている必要があることです。

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

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

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

経験上、最適化は指数曲線のようなものだと言えます。最適なパフォーマンスを得るには、必要な時間が非常に重要になる場合があります。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.