ハードウェアテセレーションはどのように機能しますか?


34

DX11の新しい流行語であるハードウェアテッセレーションがどのように機能するかを、比較的明確な用語で説明してほしい。

ありがとう。

回答:


42

「シンプルな」バージョンを提供し、興味がある場合は他の人に詳細を記入してもらいます:)。

3Dオブジェクトをモデル化するには、基本的に2つの方法があります。1つ目は、ゲームではあまり見かけないもので、数学的に定義された正確な曲線を使用してオブジェクトの形状を定義します。この方法を使用すると、詳細レベルは(実際には)「無限」になります。たとえば、シリンダーを考えてみましょう。円柱は、非常に単純な数学用語で定義できます。実際に知っておく必要があるのは、両端の半径と円柱の長さだけです。ジオメトリに関しては、3Dシーンで円柱をレンダリングするために必要なのはこの情報だけです。さらに、シリンダーを簡単に拡大縮小して拡大または縮小することができます。必要なのは、長さと半径の比率を維持することだけです。同じ式を使用してジオメトリを表現できますが、パラメータは異なります。トーラスを表現できます(「ドーナツ」形状)も簡単:内側半径と外側半径を知る必要があります。それから、外側の半径から内側の半径を引くことにより、ドーナツの本体(「ケーキ」)の直径(したがって半径)を計算できます。円形のボディは、内側の半径で定義される円弧に沿ってラップします。このタイプの3D定義は、比較的単純で(小さなモデルファイルが生成される)、詳細レベルに大きな制限がないため、優れています。欠点は、今日のビデオハードウェアは、これらのタイプのモデルを効率的に処理するように設計されていないことです(もしあれば)。円形のボディは、内側の半径で定義される円弧に沿ってラップします。このタイプの3D定義は、比較的単純で(小さなモデルファイルが生成される)、詳細レベルに大きな制限がないため、優れています。欠点は、今日のビデオハードウェアは、これらのタイプのモデルを効率的に処理するように設計されていないことです(もしあれば)。円形のボディは、内側の半径で定義された円弧に沿ってラップします。このタイプの3D定義は、比較的単純で(小さなモデルファイルが生成される)、詳細レベルに大きな制限がないため、優れています。欠点は、今日のビデオハードウェアは、これらのタイプのモデルを(もしあれば)効率的に処理するように設計されていないことです。

もう1つの方法は、単純なジオメトリを組み合わせて、表現したい形状を近似することです。これを、テッセレーションと呼ばれるプロセスで行います。円筒をより原始的な形状に分割することにより、テッセレーションすることができます。2つの円と、一連の長い長方形で、外縁を包みます。円は、エッジに沿った長方形と同様に、さらに多くの小さな三角形に分割できます。最終的な結果は、三角形のみで構成されるモデルです。

三角シリンダーの画像

または、トーラスの場合:

三角形分割トーラスの画像

幸いなことに、この種のジオメトリを処理するためにビデオハードウェアが最適化されています。今日のGPUでは、1秒ごとに大量の三角形を大量に生成することに問題はありません。ただし、明らかな問題があります。平坦なエッジを持つ形状を使用して曲面を表現しようとしています。シリンダーを(立方体ではなく)シリンダーのように見せるために、それをたくさんに分解したい小さな三角形の。さて、どれくらい欲しいですか?場合によります。シーンのレンダリングにはどのようなハードウェアが使用されますか?より速いハードウェアはより遅いハードウェアよりも速く三角形をレンダリングでき、より速いフレームレートを生成します。シーンに存在する他のオブジェクトの数や、それらがどれほど複雑になるかなど、考慮すべき他の要因がありますか?ゲームでは、通常、特定のシーンに多くのオブジェクトがあります。さらに、オブジェクトは、それぞれ異なるレベルの視覚的複雑さを持つ異なるシーンを移動する場合があります。モデルをテッセレーションするときに使用する詳細レベルを把握するのは困難です。

別の問題は、幾何学的な複雑さの問題です:円柱の曲線ベースの定義は非常に単純(半径と長さ)ですが、テッセレーション定義はおそらく数百の三角形を組み合わせ、それぞれを個別に定義する必要があります。その結果、テッセレーションされたモデルファイルは非常に大きくなります。人のような複雑なものの数学的に定義されたモデルがあるとしましょう。モデルファイルのサイズはわずか24kbです。さて、そのモデルがテッセレーションされると、結果のファイルは24mb(24,000kb)になります。それはまったく違います。

ハードウェアテッセレーションは、ジオメトリシェーダーを利用して、ハードウェア支援のテッセレーションをリアルタイム(またはほぼリアルタイム)で実行します。基本的に、数学的に定義された3Dモデルを取得し、ビデオカードが効率的にレンダリングできるテッセレーション形式に変換するメカニズムを提供します。従来、ゲーム開発者はスタジオでテッセレーションを実行し、ゲームとともにテッセレーションモデルを出荷していました。ハードウェアテッセレーションにより、ゲームがプレーヤーのコンピューターで実際に実行されるまで、このプロセスを延期することができます。これにはいくつかの重大な利点があります。

  1. ゲームの3Dコンテンツのサイズが劇的に減少します(ディスクが少なくなるか、ダウンロードが少なくなり、必要なハードディスク領域が少なくなります)。

  2. リアルタイムで詳細レベルを制御できます。ゲーム機の最先端の獣で走っていますか?その場合、非常に高いレベルの詳細を使用してテッセレーションすることができます。グラフィックスが統合された古いラップトップで実行していますか?問題ない; パフォーマンスを高めるために、詳細レベルを単純に下げることができます。

それがその要点です。私は3Dプログラマーではないので、おそらく100%正確ではありませんが、それはあなたにすべての大騒ぎが何であるかについてのより良い考えを与えるはずです:)。

乾杯、
マイク


うわー、素晴らしい!私が今まで読んだ最長の「概要」:P

6
必要なテッセレーションのレベルを決定するものがもう1つあります。画面上のオブジェクトのサイズです。ランタイムテッセレーションを使用すると、各オブジェクトの複数のバージョンを作成することなく、どこでも正しい詳細レベルを得ることができます。
アダム

それは少しCPU重いですか?
jcora

@ Bane、GPUを集中的に使用していましたか?CPUはそれほど気にする必要はありません。
ネイトザウグ

0

残念なことに、現在または近い将来、ほとんどの開発者がテッセレーションを利用する方法ではありません。彼らが現在テスを使用しているのは、その高さマップに従ってほぼ平坦な表面を変位させることだけです。その結果、見栄えも良くなりますが、それでも、はるかに優れた技術の不十分な使用だと思います。


ツールとプロダクションパイプラインは再考し、再構築する必要があります(ほとんどの方が@SamHocevarの方がよく知っていると思いますので、このコメントはあなたを対象とはしていません)。
ロブ・クレイグ

@RobCraigそのコメントのスペルを修正したことに注意してください。私は元の著者ではありません。
サムホセバル

@SamHocevar Yup、私は考えました-明確化してくれてありがとう!
ロブ・クレイグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.