ゲームエンジンがクワッドを使用する代わりにモデルを三角形に変換するのはなぜですか?


47

私はMayaを使用してアニメーションや映画を中心としたプロジェクトに取り組んできましたが、ビデオゲーム開発に関する研究にも注力しています。とにかく、私は教授の一人と話していましたが、すべてのゲームエンジン(私が知っている)がなぜ三角形に変換されるのかわかりませんでした。

モデルを4面ポリゴンとして残すのに比べて、ゲームエンジンが三角形に変換する理由を知っている人はいますか?また、これを行うことの長所と短所(ある場合)は何ですか?


1
やや関連して、NVidia NV1は、三角形/多角形の代わりに、四角形を使用した四角形のテクスチャマッピング(四角形を使用)を使用しました。控えめに言っても、大当たりではありませんでした。en.wikipedia.org/wiki/NV1を参照してください。
マッケ

5
@Macke:「二次方程式」のような二次方程式。「四辺形」のような二次方程式ではありません。四角形は使用せず、9ポイントで定義される2次曲線を使用します。stason.org/TULARC/pc/3d-graphics-cards-faq/...

9
質問には+1ですが、教授には大きな-1です。これは彼が知っておくべき基本的なものであり、彼は自分の手の甲を知っているだけでなく、彼が過去15数年間の開発に少し触れていない兆候です。
マキシマスミニマス

1
私の教授の弁護では、彼はゲーム開発者側ではなく、アニメーター/モデラーです。彼はそれがトリスに変換されることを知っていましたが、レンダリングの理由に関する数学的な理由を知りませんでした。しかし、はい、おそらく彼は知っているべきでした。
グラント

回答:


56

一番下の行は、三角形のラスタライズです。これは、コンピューターがオブジェクトを画面にレンダリングする方法です。他の人は私よりも頻繁にそれを言うが:

コンピューター画面に表示される3Dオブジェクトはすべて、実際にはプリミティブと呼ばれる小さな幾何学的オブジェクトで構成されています。四角形、三角形、n角形などはプリミティブの例です。主に1つの理由により、三角形に集中しますすべてのオブジェクトを三角形に分割できますが、三角形を三角形以外に分割することはできません。このため、三角形の描画は、高次のポリゴンの描画よりもはるかに簡単です。対処するものが少なくなります。これが、これらの三角形がコンピューターグラフィックスで非常に一般的に使用される理由です。

強調鉱山。ソース:http : //www.devmaster.net/articles/software-rendering/part3.php


2
驚くばかり!それについて考えるとき、それは非常に理にかなっています。答えてくれてありがとう!
グラント

1
OpenGL ESでは、APIを簡素化する取り組みの一環として、四角形とポリゴンはサポートされていません。したがって、三角形を使用する実際的な理由は、他に選択肢がないためです。しかし、ESのような合理化されたAPIが他のプリミティブ型を避ける理由は、この回答および他の回答で概説されている理由によるものです。
準最適

5
+1なぜなら、誰かが同じことを私のブックマークに私に尋ねるとき、参照として安全に使用できる答えだからです。ただ、三角形が小さなプリミティブである理由は、浮動小数点演算の不正確さにより、すべての場合において平面が保証できる唯一の安全な多角形であり、四角形では保証できないためだと常に考えてきました。常に平面である。モデリングソフトウェアは、モデラーの利便性としてオブジェクトを四角形またはn角形として表示しますが、分割ポリゴンを2つ以上の三角形として変換/レンダリングします。
半蔵H

56

三角形には、描画をより簡単に、したがってより高速にする多くのプロパティがあります。

4つ以上のポイントが同じ平面上にない場合がありますが、常に3つのポイントがあります(縮退した場合は無視します)。これには、スカラー値が三角形の表面上で線形に変化するという興味深い特性があります。三角形がスクリーンに投影されている場合でも、x '/ zおよびy' / zに関してスカラー値は直線的に変化します。

これは、特殊なハードウェアで非常に高速に実行できる線形補間を使用して、三角形のシェーディング、テクスチャマップ、デプスフィルターに必要なすべてではないにしても、ほとんどを計算できることを意味します。

tl; dr:三角形は最も単純なプリミティブであるため、三角形を扱うアルゴリズムは大幅に最適化できます。


11
+1。三角形が常に平面であるという事実は、主な理由の1つだと思います。非平面ポリゴンは、ものをより複雑にします。
bummzack

2
+1。三角形を必要とするAPIとハードウェアを作成する主な技術的理由は、三角形が平面であることを保証できる唯一のポリゴンだと思います。モデリングソフトウェアは、モデラーにとって便利なように、おそらくメッシュを四角として表示します。
半蔵H

1
私が使用する素敵な非平面アナロジー... 3本足のスツールは、片足だけが地面に立つことができます。その足は三角形の角のようなものです。しかし、4本足のスツールは2つの方法で地面に立つことができ、片方の足が他の足より短い場合、ある位置から別の位置にぐらつきます。
ChrisC

気になります; 三角形が常に同じ平面上にポイントを持つことはどのように可能ですか?では、実際にどのように球体を描きますか?少なくとも1つのポイントを別の平面上で移動する必要があります。そうしないと、平らな表面になります。
ラタプラン14

@newbiez 3つの頂点は常に単一の平面を定義します。球体はさまざまな三角形で構成されています。球の表面のパッチを表す2つの隣接する三角形は2つの頂点を共有しますが、それらは同じ平面上にはありません。:この画像は、物事を明確にすることcse.csusb.edu/tongyu/courses/cs420/images/icos.jpg
ggambett

8

3つのポイント(三角形)は常に平面を定義します。つまり、3つのポイントがあれば、3つのポイントすべてを切断できる平面をいつでも作成できます。ただし、4つのポイントについて同じことが常に当てはまるわけではありません。すべて平面上に4つのポイントを持つことができますが、平面上にない4つのポイントを持つこともできます。


2
実際、4つのランダムポイントは平面上にない可能性が高いため、とにかく三角測量する必要があります。
ChrisF

これは、ポイントが一致しない場合にのみ当てはまります。
notlesh

1
点が一致する場合でも、それらは無限の平面上で同一平面上にあります。
3Dave

共面であることは、「常に平面を定義する」わけではありません。
サムホセバル

6

これを行うのは「ゲームエンジン」ではなく、使用するすべての3Dソフトウェアがこれを行います。それはあなたにそれについて教えてくれないだけで、あなたの教授はこれを知らないとかなり資格が足りないようです。ソフトウェアがそれらをあなたから隠していても、それらはコンピュータのメモリに存在します。すべての3Dプログラムには、三角形を表示するオプションがあります。また、それらを編集可能なエッジに分割するオプションも用意されているため、それらを操作できます。しかし、彼らは常にそこにいたので、あなたの教授はこの主題を教え、それでも「三角形は何のためにあるのか」と疑問に思っていました。

三角形は、頂点を配置し、平面を保証する唯一の方法です。クワッドがある場合は、曲げる必要がある方法で頂点を配置できます。しかし、すでに三角形で作られており、曲げることができるのはこれらの三角形です。


3

三角形は3つのポイントを持っているため、単独で記述できる最も単純なプリミティブであり、3Dで表面を記述しないものよりも少ないです。

三角形は単独で考えることができるため、単一の三角形のみをレンダリングできるコードまたはシリコンを作成することができます。これにより、繰り返しの力により、あらゆる表面をレンダリングできます。

したがって、「すべての表面」をレンダリングすることに成功した最初のコンピューターシステムは、自然に多くの三角形を独立してレンダリングすることでそうしました。

三角形と四角形を「プリミティブ」(つまり、コンテキストのない完全に分離されたジオメトリのビット)と考えると、三角形はよりプリミティブであるため、「勝つ」傾向があります。

しかし、1980年代にエンターテインメントグレードのコンピューターが一定の洗練度を超えると、「プリミティブ」を単独で考慮することの重要性は低下しました。グラフィックスを大量生産する場合、規模の経済は、ほぼ同一の100台の車を一度に組み立てることを好むのと同様に、関連する頂点の処理グループを好む。

これが、1980年代に映画が「クワッド」を採用した理由です。「クワッド」は、孤立した四辺形ではなく、3D空間の頂点の2Dグリッドを指すため、誤称です。

インタラクティブエンターテインメントの領域では、三角形から「クワッド」への同じシフトはまだ発生していませんが、映画ビジネスで発生したのと同じ理由で、まもなく発生する可能性があります。


2

三角形を三角形化する方法と、n辺の多角形の「n-2」の方法は1つしかありません。したがって、三角形は最終的に多面体形状を定義する最も曖昧な方法です。また、他のポスターが示しているように、三角形(4つ以上ではなく)のラスタライズを加速する方法はたくさんあります(定数zは私のお気に入りの1つです)。また、光線と任意の多角形の交差テストよりも、光線と三角形の交差テストを最適化する方が簡単です。実際、n辺のポリゴンでの多くの操作は、三角形化された表現を手に入れることから恩恵を受けます。それは、n辺のポリゴン表現が「悪い」ということではありません-それらは非常に便利ですが、最終的には、多くのメッシュ操作で三角形を使いたいと思うでしょう。


2

三角形が3つの非共線頂点によって定義されている限り(読み取り:角度はいずれも正確にはPiではありません)、頂点は一意の平面を定義します。

もちろん、クワッドは4つの頂点によって定義されます。それらの頂点が同一平面上にないことは完全に可能です。その場合、クワッドは実際にはクワッドの対角線で分割された2つの三角形になります。それは2つの平面、2セットの表面法線などです。

使用可能なすべてのモデリングツール、テクスチャリング、ライティングなどのすべてのアルゴリズムはすべて、モデルが平面セグメントで構成されていることを前提とし、すべての式(通常の計算の外積が最初の式です)は絶対最小入力データセットを使用します-3頂点は平面を定義し、平面はすべての凝ったものを行うために必要なものです。

確かに、クワッドで動作するエンジンを作成できますが、クアッドを定義する他の3つと同一平面上にあることを確認する必要がある場合を除き、ほぼすべての場合で4番目の頂点を無視していることに気付くでしょう。また、同一平面上にない場合の最も論理的な解決策は、クワッドを2つの三角形に分割することです。それでは、なぜそれだけで始めてみませんか?

クワッドで作業するポイントは一体何でしょうか?

クワッドが必要な場合は、2つの三角形をまとめます。


2

4点を同一平面上に置くことは問題ではないと仮定すると(他の人が指摘したように、しかし私と一緒に耐えます)、任意の台形をレンダリングすることがわかります(これは通常、四辺形のようになります画面空間に変換されるとき)は、三角形のレンダリングと特に違いはありません-実際、クリッピングを実行すると、余分な頂点が導入される可能性があるため、ほとんど同じように機能します。(少なくともソフトウェアモデルでは-ハードウェアはクリッピングを行うより単純なブルートフォースの方法を持つ可能性があります。)

したがって、残りの問題は表現効率の問題です。-三角形のストリップを使用すると、2つの三角形で追加の頂点なしで四角形を簡単に表すことができます(1番目の三角形に3つの頂点、2番目の三角形に1つの追加頂点)。一方、四角形を使用して三角形を表現しようとすると、4つの頂点を使用し、別の頂点と同じ縮退した頂点を使用する必要があります。これは効率の点で理想的ではありません。

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