

テクスチャマッピング[ 1 ] [ 2 ] [ 3 ]は、コンピュータグラフィックスで2D画像を3Dモデルに投影する方法を説明するために使用される用語です。最も一般的なバリアントはUVアンラップで、これは逆ペーパーカットアウトとして説明でき、3Dモデルの表面を切り離して2D座標空間(UV空間)に展開することができます。
テクスチャマッピングは、(1) 3D モデルを展開するタスク (3D モデルの表面を 2D テクスチャ マップに変換する)、(2) 2D テクスチャ マップを 3D モデルの表面に適用する、(3) これらの両方のタスクを実行する3D ソフトウェアアルゴリズム、を指す場合があります。
テクスチャマップとは、3Dモデルに視覚的な詳細を追加する2D画像(「テクスチャ」)のことです。この画像はラスターグラフィックとして保存できます。テクスチャは色以外のプロパティも保存でき、その場合は法線マップ、粗さマップ、放出マップなど、別の名前で呼ばれます。
3D モデルの 3D 空間をテクスチャ マップからのサンプリングのための 2D 空間に変換する座標空間は、 UV 空間、UV 座標、またはテクスチャ空間などと呼ばれます。
以下は、アルゴリズムが画像をレンダリングする仕組みを簡略化した説明です。
この技術の原点は、 1974年にエドウィン・キャットマルが博士論文の一部として開発したものである。[ 4 ]
テクスチャマッピングは元々 、拡散マッピングを指していました。これは、テクスチャからピクセルを3Dサーフェスに単純にマッピングする(画像をオブジェクトの周りに「巻き付ける」)手法です。近年、マルチパスレンダリング、マルチテクスチャリング、ミップマップ、ハイトマッピング、バンプマッピング、ノーマルマッピング、ディスプレイスメントマッピング、リフレクションマッピング、スペキュラーマッピング、オクルージョンマッピングなどのより複雑なマッピング、および(マテリアルシステムによって制御される)この技術のさまざまなバリエーションの登場により、リアルで機能的な3Dシーンを構築するために必要なポリゴン数と照明計算を大幅に削減することで、ほぼフォトリアリズムをリアルタイムでシミュレートすることが可能になりました。

Aテクスチャマップ[ 5 ] [ 6 ]は、形状またはポリゴンの表面に適用される(「マッピングされる」)画像です。 [ 7 ]これはビットマップ画像またはプロシージャルテクスチャ画像ファイル形式で保存され3Dモデル形式またはマテリアル定義によって参照され、リソースバンドル。
テクスチャマップは1次元から3次元まで様々ですが、可視面では2次元が最も一般的です。最新のハードウェアで使用する場合、キャッシュの一貫性を向上させるために、テクスチャマップデータはスウィズルドまたはタイル状の順序で格納されることがあります。レンダリングAPIは通常、テクスチャマップリソース(デバイスメモリに配置されている場合もあります)をバッファまたはサーフェスとして管理し、ポストプロセスや環境マッピングなどの追加効果のために「テクスチャへのレンダリング」を可能にする場合があります。
テクスチャマップには通常、RGBカラーデータ(直接カラー、圧縮フォーマット、またはインデックスカラーとして保存)が含まれており、特にビルボードやデカールオーバーレイテクスチャの場合は、アルファブレンド(RGBA)用の追加チャンネルが含まれることもあります。アルファチャンネル(ハードウェアで解析可能なフォーマットで保存すると便利な場合があります)は、鏡面反射などの他の用途にも使用できます。
複数のテクスチャマップ(またはチャンネル)を組み合わせて、鏡面反射、法線、変位、または表面下散乱を制御することができます。たとえば、肌のレンダリングに使用されます。
複数のテクスチャ画像をテクスチャアトラスまたは配列テクスチャに組み合わせることで、最新のハードウェアにおける状態変化を軽減できます。(これらはタイルマップグラフィックスの現代版とみなすことができます。)最新のハードウェアは、環境マッピングのために複数の面を持つキューブマップテクスチャをサポートすることがよくあります。
テクスチャマップは、スキャンやデジタル写真によって取得したり、 GIMPやPhotoshopなどの画像編集ソフトウェアでデザインしたり、MudboxやZBrushなどの3Dペイントツールで3Dサーフェスに直接ペイントしたりすることができます。
このプロセスは、無地の白い箱に模様付きの紙を貼ることに似ています。ポリゴンの各頂点にはテクスチャ座標が割り当てられます(2D の場合はUV 座標とも呼ばれます)。[ 8 ]これは、頂点属性を明示的に割り当てるか、3D モデリング パッケージでUV アンラッピング ツールを使用して手動で編集することで実行できます。また、3D 空間からテクスチャ空間へのプロシージャル変換をマテリアルに関連付けることも可能です。これは、平面投影、または円筒形または球面マッピングによって実現できます。より複雑なマッピングでは、歪みを最小限に抑えるために、サーフェスに沿った距離を考慮する場合があります。これらの座標は、レンダリング中にテクスチャ マップをサンプリングするために、ポリゴンの面全体に補間されます。テクスチャは、有限の矩形ビットマップをより広い領域に拡張するために繰り返したりミラーリングしたり、サーフェスの各部分から 1 対 1 の一意の「射影」マッピングを持つことができます (これは、レンダリング マッピングとライト マッピング(ベイクとも呼ばれます)にとって重要です)。
テクスチャマッピングは、モデルの表面(またはラスタライズ時のスクリーン空間)をテクスチャ空間にマッピングします。この空間では、テクスチャマップが歪みのない状態で表示されます。UV展開ツールは通常、テクスチャ座標を手動で編集するためのテクスチャ空間ビューを提供します。サブサーフェススキャッタリングなどの一部のレンダリング手法は、テクスチャ空間演算によって近似的に実行できます。
マルチテクスチャリングとは、ポリゴンに一度に複数のテクスチャを使用することです。[ 9 ]例えば、ライトマップテクスチャは、サーフェスがレンダリングされるたびにライティングを再計算する代わりに、サーフェスを照らすために使用できます。マイクロテクスチャまたはディテールテクスチャは、より高周波のディテールを追加するために使用され、ダートマップは風化と変化を追加します。これにより、繰り返しテクスチャの見かけ上の周期性を大幅に低減できます。現代のグラフィックスでは、10 を超えるレイヤーが使用され、シェーダーを使用して結合され、より高い忠実度を実現します。もう 1 つのマルチテクスチャ技術はバンプマッピングです。これは、テクスチャがライティング計算のためにサーフェスの向きを直接制御できるようにするものです。通常の詳細な色に加えてライティングの詳細が反映された複雑なサーフェス (木の皮や粗いコンクリートなど) の非常に良い外観を実現できます。バンプマッピングは、グラフィックス ハードウェアがリアルタイムで対応できるほど強力になったため、ビデオゲームで人気になっています。[ 10 ]
サンプル(例えば、画面上でピクセルとして表示される場合)がテクセル(テクスチャピクセル)から計算される方法は、テクスチャフィルタリングによって決まります。最も安価な方法は最近傍補間を使用することですが、ミップマップ間の双線形補間または三線形補間は、エイリアシングやギザギザを軽減する2つの一般的な代替手段です。テクスチャ座標がテクスチャの範囲外にある場合は、クランプまたはラップされます。異方性フィルタリングは、斜めの視点からテクスチャを表示する際の方向性アーティファクトをより効果的に除去します。
テクスチャストリーミングとは、テクスチャ用のデータストリームを使用する手法であり、各テクスチャは2つ以上の異なる解像度で利用可能であり、ビューアからの描画距離とテクスチャに使用可能なメモリ量に基づいて、どのテクスチャをメモリにロードして使用するかを決定します。テクスチャストリーミングにより、レンダリングエンジンは、ビューアのカメラから遠く離れたオブジェクトには低解像度のテクスチャを使用し、視点がオブジェクトに近づくにつれて、データソースから読み取ったより詳細なテクスチャにそれらを解決することができます。
最適化として、複雑で高解像度のモデルや高コストな処理(グローバルイルミネーションなど)からの詳細をサーフェステクスチャ(場合によっては低解像度モデル上)にレンダリングすることが可能です。この手法はベイク(またはレンダーマッピング)と呼ばれ、ライトマップに最も一般的に使用されますが、ノーマルマップやディスプレイスメントマップの生成にも使用できます。一部のコンピュータゲーム(例:Messiah)はこの手法を使用しています。オリジナルのQuakeソフトウェアエンジンは、サーフェスキャッシングと呼ばれるプロセスでライトマップとカラーマップを組み合わせるために、オンザフライベイクを使用していました。
ベイク処理は、ディテールレベル生成の一種として使用できます。複雑なシーンを、多数の異なる要素やマテリアルで構成された単一の要素と単一のテクスチャで近似し、アルゴリズムによってレンダリングコストとドローコール数を削減します。また、 3Dスカルプティングソフトウェアや点群スキャンから得られた高精細モデルを、リアルタイムレンダリングに適したメッシュで近似するためにも使用されます。
ソフトウェアとハードウェアの実装において、さまざまな技術が発展してきた。それぞれの技術は、精度、汎用性、パフォーマンスにおいて異なるトレードオフを提供する。

アフィンテクスチャマッピングは、サーフェス全体にわたってテクスチャ座標を線形補間するため、最も高速なテクスチャマッピング方式です。一部のソフトウェアやハードウェア(初代PlayStation)は、レンダリング中に3D空間の頂点をスクリーン上に投影しスクリーン空間のテクスチャ座標を線形補間します、固定点UV座標をか、ブレゼンハムの線アルゴリズムに似たインクリメント誤差アルゴリズム行われます。
垂直な多角形とは対照的に、これは透視変換時に顕著な歪みを生じさせます(図に示すように、市松模様のテクスチャが曲がって見えます)。特にカメラに近いプリミティブではこの歪みが顕著になります。この歪みは、多角形をより小さな多角形に分割することで軽減できます。
長方形オブジェクトに四角形プリミティブを使用すると、長方形を三角形に分割する場合よりも見た目の不自然さが軽減されます。しかし、4点補間はラスタライズ処理を複雑化するため、初期の実装では三角形のみを使用する方式が主流でした。Nvidia NV1で使用されているフォワードテクスチャマッピングなどの一部のハードウェアでは、効率的な四角形プリミティブが提供されていました。透視補正を行うと、三角形は四角形プリミティブと同等になり、この利点は失われます。

床や壁など、ビューアに対して直角な長方形のオブジェクトの場合、画面の両方向ではなく、片方向のみの透視図法を補正すれば十分です。正しい透視図法は、床の左右の端で計算できます。その水平方向の範囲でアフィン線形補間を行うと、その線上のすべてのピクセルがビューアから同じ距離にあるため、正しく表示されます。
透視補正テクスチャリングは、2Dスクリーン空間の座標を単純に補間するのではなく、3D空間における頂点の位置を考慮します。 [ 11 ]透視補正テクスチャリングは正しい視覚効果を実現しますが、計算コストが高くなります。 [ 11 ]
テクスチャ座標の透視補正を行うそして、 と視聴者の視点からの奥行き成分であるため、値、、 そしてテクスチャリングされる表面全体にわたってスクリーン空間で線形です。対照的に、オリジナル、、 そして分割前のこれらの値は、スクリーン空間において表面全体にわたって線形ではありません。そのため、これらの逆数を表面全体にわたって線形補間し、各ピクセルで補正値を計算することで、透視補正されたテクスチャマッピングを作成することが可能です。
これを行うには、幾何学的形状の各頂点(三角形の場合は3点)における逆数を計算します。頂点逆数を持つ、、 そしてすると、これらの逆数に対して線形補間を行うことができます。頂点(例えば、重心座標を使用)から、表面全体にわたって補間された値が得られます。特定の点では、これにより補間された値が得られます。そして(相互しかし、除算は座標系を変更したため、テクスチャ座標として使用できません。スペース、修正済み逆数をもう一度取ることで計算されます。。これは、座標:そして[ 12 ]
この補正により、ポリゴンのビューアに近い部分ではテクスチャ座標間のピクセルごとの差が小さくなり(テクスチャが広く引き伸ばされる)、ビューアから遠い部分では差が大きくなる(テクスチャが圧縮される)。
アフィンテクスチャマッピングはテクスチャ座標を直接補間します2つの端点の間そして: どこ。
透視補正マッピングは、深度で割った後に補間を行います。そして、補間された逆数を使用して正しい座標を復元します。 3Dグラフィックスハードウェアは通常、遠近法に配慮したテクスチャリングをサポートしています。
テクスチャマッピングされたジオメトリを画像にレンダリングするための様々な技術が開発されており、それぞれ異なる品質と精度のトレードオフがあり、ソフトウェアとハードウェアの両方に適用できる。
従来のソフトウェアテクスチャマッパーは、一般的にせいぜい1つの照明効果(通常はルックアップテーブルを介して適用される)を伴う単純なテクスチャマッピングしか実行できず、遠近法の正確性を実現するには約16倍のコストがかかった。

Doomエンジンは、垂直な壁と水平な床と天井という制約の中で世界を捉え、カメラは垂直軸を中心にしか回転できないという制限を設けていました。つまり、壁は垂直線に沿って一定の奥行き座標を持ち、床と天井は水平線に沿って一定の奥行きを持つことになります。奥行きに対する透視補正計算を一度行った後、残りの線は高速なアフィンマッピングで処理することができました。この時代の後期のレンダラーの中には、シアリングによってわずかなカメラのピッチをシミュレートすることで、同じレンダリング手法を用いながらも、より自由な表現を可能にしたものもありました。
一部のエンジンは、ブレゼンハムのようなインクリメンタルアルゴリズムを介してテクスチャマッピングされたハイトマップをレンダリングすることができ(例えば、 Nova LogicのVoxel SpaceやOutcastのエンジンなど)、従来の幾何学的プリミティブを使用せずにテクスチャマッピングされた風景の外観を生成しました。[ 13 ]
演算処理を常に稼働させ、より高速な演算結果を得るために、各三角形を約16ピクセルのグループにさらに細分化することができる。
ハードウェアによるサポートがない透視テクスチャマッピングでは、レンダリングのために三角形をより小さな三角形に分割し、それらにアフィンマッピングを適用します。この手法が有効な理由は、アフィンマッピングによる歪みが小さなポリゴンでははるかに目立たなくなるためです。ソニーのPlayStationは、ハードウェアでアフィンマッピングのみをサポートし、同世代のゲーム機に比べて比較的高い三角形処理能力を持っていたため、この手法を多用しました。

ソフトウェアレンダラーは一般的に、オーバーヘッドが少ないため、画面分割を好みます。さらに、セットアップを簡素化するため(2Dアフィン補間と比較して)、ピクセルの線に沿って線形補間を行うことで、オーバーヘッドをさらに削減しようとします。もう一つの理由は、アフィンテクスチャマッピングはx86 CPUの少ないCPUレジスタ数には収まらないことです。68000やRISCプロセッサの方が、このアプローチにははるかに適しています。
Quakeでは異なるアプローチが採用され、走査線の 16 ピクセルごとに一度だけ透視補正座標を計算し、それらの間を線形補間することで、透視補正計算がコプロセッサ上で並列に実行されるため、実質的に線形補間の速度で動作します。[ 14 ]ポリゴンは独立してレンダリングされるため、ポリゴン法線の向きに応じてスパンと列または対角方向を切り替えることで、より一定の z を実現できる可能性がありますが、その労力に見合う価値はないようです。
もう1つの手法は、多項式などのより高速な計算で遠近法を近似することです。2つ目の手法は、最後に描画された 2 つのピクセルの値を使用して、次の値を線形外挿します。後者の場合、これらの値から除算が開始されるため、除算する必要があるのは小さな余りだけです。[ 15 ]ただし、必要な帳簿管理の量が多いため、この手法はほとんどのシステムで遅すぎます。
3つ目の手法は、Build Engine(特にDuke Nukem 3Dで使用されている)で採用されており、 Doomエンジンで使用されている一定距離のトリックを基に、任意のポリゴンに対して一定距離の線を見つけてレンダリングするものです。
テクスチャマッピングハードウェアは、当初、シミュレーション(例えば、Evans and Sutherland ESIGやSinger-Link Digital Image Generators DIGに実装されているもの)やプロフェッショナル向けグラフィックスワークステーション( Silicon Graphicsなど)、Ampex ADOなどの放送用デジタルビデオエフェクトマシン向けに開発されました。その後、 1990年代半ばには、アーケード筐体、家庭用ビデオゲーム機、PC用ビデオカードにもテクスチャマッピングハードウェアが搭載されるようになりました。
飛行シミュレーションでは、テクスチャマッピングによって、テクスチャのない表面では得られない、パイロットの訓練に必要な重要な動きや高度の手がかりが得られました。さらに、テクスチャマッピングは、メモリに保存された事前フィルタリングされたテクスチャパターンのリアルタイム処理にビデオプロセッサがリアルタイムでアクセスできるように実装されました。[ 16 ]
最新のグラフィックス処理ユニット(GPU)は、テクスチャサンプラーまたはテクスチャマッピングユニットと呼ばれる専用の固定機能ユニットを備えており、通常は三線形フィルタリングまたはより高度なマルチタップ異方性フィルタリングを用いてテクスチャマッピングを実行し、 DXTnなどの特定のフォーマットをデコードするためのハードウェアも搭載しています。2016年現在、ほとんどのSoCに適切なGPUが搭載されているため、テクスチャマッピングハードウェアは広く普及しています。
ハードウェア実装によっては、タイルベースの遅延レンダリングやスキャンラインレンダリングにおいて、テクスチャマッピングと隠面判定を組み合わせているものがあります。このようなシステムでは、可視テクセルのみを取得するため、変換された頂点に広い作業空間が必要になります。ほとんどのシステムはZバッファリング方式を採用しており、前面から背面へのソートによってテクスチャマッピングの負荷を軽減できます。
初期のグラフィックハードウェアでは、画面にテクスチャを表示する方法に関して、2つの競合するパラダイムが存在した。
これらの手法のうち、逆テクスチャマッピングは現代のハードウェアにおいて標準的な手法となっている。
この方法では、画面上のピクセルがテクスチャ上の点にマッピングされます。レンダリングプリミティブの各頂点は画面上の点に投影され、これらの各点はテクスチャ上のテクセル座標au,vにマッピングされます。ラスタライザーはこれらの点の間を補間して、プリミティブで覆われた各ピクセルを塗りつぶします。
この方法の主な利点は、プリミティブによって覆われる各ピクセルが正確に一度だけ走査されることです。プリミティブの頂点が変換されると、残りの処理量は、画面上でそれが覆うピクセル数に比例します。
主な欠点は、テクスチャが画面に対して斜めに配置されている場合、テクスチャ空間におけるメモリアクセスパターンが線形にならないことです。この欠点は、スウィズルドテクスチャメモリ配置などのテクスチャキャッシュ技術によってしばしば解消されます。
線形補間は、シンプルで効率的なアフィンテクスチャマッピングに直接使用できますが、遠近法の正確性にも適用できます。
フォワードテクスチャマッピングは、テクスチャの各テクセルを画面上のピクセルにマッピングします。矩形プリミティブを画面上の位置に変換した後、フォワードテクスチャマッピングレンダラーはテクスチャ上の各テクセルを順に処理し、それぞれをフレームバッファのピクセルにスプラットします。これは、 3DO、セガサターン、NV1などの一部のハードウェアで使用されていました。
最大の利点は、テクスチャへのアクセスが単純な線形順序で行われるため、テクスチャデータのキャッシュを非常に効率的に行えることです。しかし、この利点は同時に欠点でもあります。画面上でプリミティブが小さくなっても、テクスチャ内のすべてのテクセルを反復処理する必要があるため、多くのピクセルが冗長に描画されてしまうのです。
この方法は、四角形プリミティブを三角形に縮小するのではなく、そのままレンダリングするのにも適しており、ハードウェアで透視補正テクスチャリングが利用できなかった場合に有利でした。これは、四角形のアフィン歪みが、同じ四角形を2つの三角形に分割した場合よりも、歪みが少なく見えるためです。NV1ハードウェアでは、二次補間モードも利用可能で、透視補正の精度をさらに向上させることができました。
UVマッピングは3Dモデリングにおいて重要な技術となり、プリミティブが画面の端を超えた場合にテクスチャを正しくクリッピングするのに役立ったが、既存のハードウェアではこれを効果的に実装することができなかった。これらの欠点はさらなる開発によって解消できた可能性があったが、GPU設計は主に逆マッピング技術を用いる方向へと移行した。
3Dレンダリング以外にも、テクスチャマッピングハードウェアの登場は、他のタスクの高速化にも活用されるようになった。
テクスチャマッピングハードウェアを使用することで、断層撮影スキャンからのボクセルデータセットの再構築と結果の可視化の両方を高速化することが可能になります。[ 17 ]
多くのユーザーインターフェースは、画面要素のアニメーション遷移を高速化するためにテクスチャマッピングを使用しています。たとえば、Mac OS XのExposéなどです。