マルチテクスチャリングは本当に「複数のテクスチャを使用する」だけなのでしょうか?


10

これは馬鹿げているように見えるかもしれませんが、それは私を悩ませます。私が理解していることから、マルチテクスチャリングは、シェーダーごとに複数のテクスチャを使用しているだけです(通常、何らかの方法でそれらをブレンドするため)。したがって、1つのテクスチャを作成する代わりに、2つ以上を作成します。

なぜ特別な用語があるのですか?「複数のテクスチャを使用する」だけではありませんか?何か不足していますか?


ある時点では、特にリアルタイム3Dグラフィックスでは、1つのテクスチャ(拡散マップ)を使用することが非常に一般的でした。したがって、この名前は、複数のテクスチャを使用していることを示すために使用されました。私は問題を見ません。マルチスレッドによく似ている
AturSams 2014年

ただし、マルチスレッド化には特別なAPIや完全に異なるプログラム設計などが必要です。多くの点で異なります。私の質問は、マルチテクスチャリングはテクスチャカウント以外は何も変わらないように見えるという事実から生じています。そしてそれは問題ではなく、ただの質問です。
NPS 2014年

特別なAPIを必要としません。それは実装に依存します。マルチテクスチャを「ユニテクスチャ」と同じように扱うツールをいくつか使用しています;)
AturSams

@conceptどの部分ですか?タイトル?
Anko

回答:


16

特別な用語は、それほど特別なものではなく、グラフィックカードとリアルタイムグラフィックAPIの進化に関係しています。たとえば、画像処理やオフライングラフィックレンダリングには、リアルタイムグラフィックAPIやコンシューマレベルのハードウェアで利用できるようになるずっと前からこの機能がありました。

OpenGL 1.1(固定機能)以降、マルチテクスチャリングはAPIの新しい状態として導入されました。1つのテクスチャだけをバインドする代わりに、複数のテクスチャをバインドすることができます。各テクスチャユニットに1つずつ、テクスチャ環境パラメータの1つを使用してそれらをブレンドし、blend、modulate..etc 1

次に、テクスチャコンバイナが導入されました。これにより、より柔軟な操作を使用して一連のテクスチャを組み合わせることができ、固定された操作のセットにパラメータを渡すことができるようになりました(シェーダとして考えることができますが、パラメータのセットが固定されています)。オリジナルの「コンバイナ」よりも柔軟性があります。

シェーダーの導入により、以前のコンバイナーは正式に廃止されるまで冗長になりました。最後に、テクスチャハードウェアをシェーダーに渡し、GPUがテクスチャに対して任意の操作(シェーダー)を以前よりはるかに柔軟に実行できるようにすることは(ハードウェアおよびそれに応じてAPIが進化するにつれて)簡単になりました。

ここでのポイント; たとえ些細なことになったとしても、この用語は、複数のテクスチャのサンプリングとたたみ込みを説明する操作の総称として存続しました。

1 OpenGLの修正された機能を思い出すために私のメモリを使用しています。


5

歴史的な理由は、「マルチテクスチャリング」がかつて「ハードウェアTnL」のようなマーケティングの流行語であったことです。それは新しいカードの際立った特徴だったので、それらを売るためにはそれが一言である必要がありました。

技術的な理由は、マルチテクスチャリングが1つではなく2つのテクスチャを作成して使用するだけではないためです。単純に2つのテクスチャ(または3つ、または任意の数)を使用した場合、出力フラグメントが1つしかないため、1つのテクスチャのみを使用することもできます。それは違いを生みません(入力が何であれ、出力はどちらか一方のみです)ので、特別なことは何もありません。

違いは、複数のテクスチャを作成できることではなく、2つ以上のテクスチャを組み合わせることです。たとえば、アルファまたはいくつかの頂点ごとに補間されたブレンドファクターに基づいてそれらをブレンドしたり、それらを追加したり、別の何かを追加したりできます。
コンフィギュラ/プログラマビリティの量が大幅に過去10年間で進化していますが、できることを一つの大きな差が残ってい何とか一つの出力に2つ以上の入力を兼ね備えています。


2

最初は光がありました

OpenGLライティングは、具体的には、フラグメントに適用する特定の数学演算を指定し、テクスチャと組み合わせて最終的な色を導き出しました。

そして、地震がありました

Quake は、オブジェクトの多くにこの種類の照明を使用していませんでした。代わりに、2番目のテクスチャを使用してライティングを表現し、オブジェクトテクスチャで乗算(または「変調」)して最終的な色を導き出しました。

しかし、当時のハードウェアはこれを単一の操作でサポートしていませんでした。したがって、Quakeはシーンオブジェクトを2回描画する必要がありました。

  • すべてを一度描画して、ベーステクスチャを配置します。
  • 変調ブレンドモードを設定します。
  • すべてをもう一度描画して、ライティングテクスチャを適用します。

もちろんこれは遅かった。すべてのジオメトリを2回変換してクリップする必要があっただけでなく(当時はCPU操作でした)、画面上のすべてのピクセルがレンダリング中に2回タッチされてしまいました。

マルチテクスチャを入力してください

マルチテクスチャはこれに対する解決策であり、最初はGL_SGIS_multitexture拡張機能を介して公開されました。これは特定のコンシューマ3DFXカードにのみ存在していました。当初は、2つのテクスチャのブレンドのみが許可されていました(ブレンドモードの制限されたセットを使用)。

オリジナルのGLQuake readmeから引用するには:

GL_SGIS_multitextureマルチ
テクスチャサポートにより、特定のハードウェアが2つのパスではなく1つのパスで世界をレンダリングできます。GLQuakeは2つのパスを使用します。1つはワールドテクスチャ用で、2つ目はテクスチャにブレンドされるライトマップ用です。一部のハードウェアでは、GL_SIGS_multitextureでサポートされているOpenGL実装を使用して、これを1つのパスで実行できます。これをサポートするハードウェアでは、フレームレートが60%から100%増加します。現在、この拡張機能をサポートしているのは3DFXデュアルTMUカード(Obsidian 2220など)だけですが、他のハードウェアも間もなく登場します。

現時点では、ノーマルマッピング、他の種類のピクセル単位のライティング、シェーダーなどの効果は存在していなかったことを覚えておくことが重要です(まあ、それらは存在しましたが、主に学術論文や研究プロジェクトにのみ存在し、リアルタイムレンダリングでの使用が可能であるとは見なされませんでした)。

そして現在まで

ここからは、他の回答で説明されているとおりです。マルチテクスチャリングは時間の経過とともに標準機能になり、より多くのブレンドモードが使用可能になり、最終的に任意のシェーダーコードに道を譲ります。

しかし、あなたの質問の目的にとって重要なのはこれです。最初は、標準機能は、レンダリング時に一度に1つのテクスチャを使用できるだけでした。複数の機能を使用できることは、ハイエンドのハードウェアのみがサポートする追加機能であり、名前が必要でした。その名前は「デュアルテクスチャリング」でした(最初の実装は2つのテクスチャーをサポートしただけだったため)が、将来を見据えて「マルチテクスチャー」という名前が選択されました。

このすべての履歴の詳細については、こちらをご覧ください。また、このProgrammers.SEの回答で、(より広いコンテキストと、それに使用されているマルチテクスチャリングの)良い歴史的記事をご覧いただけます。

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