法線マッピングは実際にどのように機能しますか?


10

法線マッピングの概念を理解しようとしていますが、いくつか混乱しています。つまり、法線マップが視点に依存するかどうか(つまり、同じオブジェクトの周りを回転したときに、同じオブジェクトの別の法線マップを取得できるかどうか)はわかりません。第二に、青みがかった色が法線マップで主な色である理由がわかりません。

法線と、RGBカラーとの関係については、次のように考えています。単位球は可能なすべての単位法線を表します。つまり、単位法線ベクトルのX、Y、Z成分は-1から1の範囲です。RGBカラーの成分はすべて0から255の範囲です。したがって、 -1(通常のコンポーネント)を0(カラーコンポーネント)、0から127または128、および1から255にマップします。その間の値はすべて線形補間されます。

このマッピングを任意の3Dオブジェクトの法線に適用すると、非常にカラフルな画像が得られますが、ほとんどが青色ではありません。たとえば、立方体の場合、6つの面すべてが異なるが均一な色になります。たとえば、法線が(1,0,0)の面は(255,128,128)、法線が(0,0、-1)の面は(128,128,0)のようになります。

ただし、何らかの理由で、私が見つけた立方体の法線マップは完全に青みがかっています(128、128、255)。しかし、明らかに、法線はすべて正のz方向ではありません(つまり、(0,0,1))。これはどのように作動しますか?

[編集]

さて、上記のアプローチは、オブジェクト空間法線マップまたはワールド空間法線マップと呼ばれるようです。もう1つは接線空間法線マップます。このような接線空間法線マップを使用してジオメトリの法線を変更する方法を理解していますが、実際にどのように計算されるかはまだわかりません(Nicol Bolasの回答の私のコメントを参照)。

[編集2]

おそらく、区分的パラメトリックサーフェスを使用していることをお伝えしておきます。これらのサーフェスは一連のサーフェスパッチで構成され、各パッチは独自のパラメトリック空間(u、v)= [0,1] x [0,1]に関連付けられています。サーフェス上の任意のポイントで、法線を正確に計算できます。どうやら、ベクトルT(接線)とB(双接線)—接線空間をまたがるのに必要な—は、単にuとvの方向の表面パッチの偏導関数ではありません...


フォンまたは少なくとも拡散シェーディングを実装しようとしたことがありますか?単位ベクトルa、bのdot(a、b)= cos(angle(a、b))のような基本的な式を知っていますか?ほんの数時間の実装で、何年もの苦労を省くことができます。
Ivan Kuckir 2013年

@Ailurus:地形オブジェクト/高さフィールドについて同じ問題に取り組む方法についての私のコメント/回答を参照してください。他のオブジェクトでは少し複雑になりますが、概念は異なってはなりません。
teodron 2013年

地形通常mapppingの特定の場合:gamedev.stackexchange.com/questions/43894/...
teodron

回答:


14

テクスチャマッピングは、3Dサーフェス上のポイントと、テクスチャイメージ上の対応するポイントとの間のマッピングです。1:1のテクスチャマッピングがある場合、3Dサーフェス上のすべてのポイントがテクスチャイメージ内の特定の一意のポイントにマッピングされます(ただし、その逆は当てはまる必要はありません。テクスチャ内の一部の場所は必ずしも場所にマッピングされるとは限りません)表面上)。

このようなマッピングを使用すると、3Dサーフェスを通過して、テクスチャの対応する場所にそれぞれの法線を保存できます。

よし、そうしよう。3Dサーフェイスを通過し、マップされた場所のオブジェクト空間法線を生成し、テクスチャに貼り付けます。したがって、レンダリングする場合は、テクスチャからオブジェクト空間の法線をフェッチするだけで完了です。正しい?

まあはい、それはうまくいくでしょう。ただし、これは、テクスチャの法線がその特定のオブジェクトでのみ使用できることも意味します。また、テクスチャの法線は、そのオブジェクトとその特定のテクスチャマッピングでのみ使用できることも意味します。したがって、テクスチャマッピングを何らかの方法で回転させたり、UVトランスフォームで変更したりする場合は、うまくいきません。

一般的に、人々が使用するのは、法線が「接線空間」にある法線マップです。接線空間は、3Dサーフェス上のマッピングされたポイントを基準にしたスペースであり、変更されていない法線は+ Z方向にあり、X軸とY軸は、サーフェスを基準にしてU軸とV軸に沿っています。

接線空間は基本的に法線を正則化します。接線空間では、法線(0、0、1)は常に「未変更」を意味します。これは、頂点法線の補間から得られる法線です。これはあなたができる多くの有用なことにつながりますになります。その中で最も重要なことの1つは、より少ないデータに保存することです。

Zは常に正なので、シェーダーでXおよびYコンポーネントから計算できます。必要な値は2つだけなので、(OpenGL画像形式の命名法ではGL_RG8ピクセルあたり2バイトではなく、ピクセルあたり2バイトのフォーマットを使用できます(ピクセルGL_RGBA8あたりGL_RGB84バイト) 、GPUは各ピクセルを4バイトにパディングするため)。さらに良いことに、これらの2つの値を圧縮できますして、1バイト/ピクセル形式ます。したがって、テクスチャのサイズをオブジェクト空間の法線マップの75%に縮小しました。

あらゆる種類の法線マップについて話す前に、まず何が格納されているかを知る必要がありますオブジェクト空間の法線マップ、接線空間の法線マップ、またはそれ以外の何かですか?


さて、あなたが説明する最初のタイプのマップはオブジェクト空間法線マップですよね?法線の実際のX、Y、Zコンポーネントを格納するため、これはよりカラフルです。2番目のタイプである接線空間法線マップは、法線自体ではなく、法線への摂動のようなものを格納しているようです。接線空間の概念について読み、後でもう一度確認します。
Ailurus

では、サーフェス上のポイントの接線空間は、そのポイントのすべての接線ベクトルの空間です。しかし、その場合、接線空間から見た法線が(0,0,1)以外になることはありませんか?つまり、法線マップは常に青(128、128、255)であると期待しています。しかし、ウィキペディアのページ(en.wikipedia.org/wiki/Normal_mapping#How_it_works)に示されている例には、他の色が含まれています。このマップを使用して法線を変更する方法はわかりますが、実際に計算する方法はわかりません。
Ailurus 2013年

@Ailurus:「わかりました。サーフェス上のポイントの接線空間は、そのポイントのすべての接線ベクトルの空間です。」いいえ、そうではありません。これは、(変更されていない)法線と、サーフェス上のその点でのテクスチャ座標の方向によって定義される空間です。テクスチャに保存されている法線を、修正前のテクスチャマッピングと現在の法線に関連するものとして正規化しました。
Nicol Bolas 2013年

法線マップでおそらく最も難しい部分は、マッピング自体です(接線ベクトルの計算方法を含む)。接線ベクトルの計算は、本質的に、拡散テクスチャのUVマッピング/ラッピングとオブジェクトのジオメトリに完全にリンクされていませんか?言い換えると、オブジェクトには2つの異なる法線マップがありますが、計算される接線(および法線)フィールドは1つだけです。タンジェントフィールドを2つの異なる通常のテクスチャで一貫して使用できない場合があります(幾何学的には適切なUVマッピングを見つけることができますが、これは簡単な作業ではありません)。
teodron 2013年

@NicolBolasああ、ベクトルT、B、Nが正規直交基底を形成していると主張する情報源があるので混乱しましたが、これは必ずしも真実ではないという人もいます。
Ailurus 2013年

3

法線マップは、いわゆる接線空間を使用してマッピングされます。これは、基本的にモデルのテクスチャ空間に基づくローカル空間です。これはあなたの両方の質問に答えるはずです。

この空間はカメラとは関係がないため、視点に依存しません。法線マップでは、Zは上方向です。モデルの法線を見ると、ほとんどの法線ベクトルはメッシュから直接外を指しています。メッシュの表面は、私が話していたテクスチャ空間なので、そのローカル座標系では、上方向が「外」方向です。


これを明確にしてくれてありがとう!ただし、ポリゴンメッシュをサーフェスとして使用せず、区分的に滑らかなパラメトリックサーフェスを使用しています。したがって、すべての法線は(0,0,1)方向を指すように保存されますよね?
Ailurus 2013年

1

このページをスクロール

データセットの下の右側のB / W図面を見てください。これは、ハリネズミの図面として知られています(または少なくとも使用されていました)。それぞれの法線が描かれたサーフェスのレンダリングです。

したがって、従来の法線マップを理解するには、すべての棘が突き出た動揺のハリネズミを考えてください。これらの棘はそれぞれ、その下のハリネズミの表面に垂直です-

球の質問に関して、光線トレーサーのように、純粋にパラメトリック空間に住んでいる場合、球への無限の法線のセットは、より大きな球を作成します-テッセレーションされた空間、つまりコンピューターが私たちに力を与える世界リアルタイムが必要な場合、球のとがった近似が得られます。

ここで、この例はOBJECT法線マップに焦点を当てています-オブジェクトに関する法線を定義しています。これは、オブジェクト、カメラ、またはその他のいずれかの回転、移動、またはスケーリングの下で​​不変です-前述のとおり、これは1種類の法線マップのみですが、最も一般的です


0

法線マップとは何か誤解されているかもしれません。基本的に、これは実際にジオメトリが完全にフラットであるときに、でこぼこの何かの外観をシミュレートする方法です。

法線マップの色は、テックシェーダーによって解釈され、光の強度と方向、およびカメラビューに基づいて処理されます。つまり、たとえば完全に平らで、テクスチャが平らなレンガの床がある可能性がありますが、同じレンガの形の法線マップがあるため、周囲を見渡すと、光が側面から跳ね返っているように見えますレンガが実際よりも3Dに見えるようにします。

もちろんこれは単なる幻想ですが、複雑なジオメトリを持つよりもはるかに安価です。いいえ、ノーマルマップの色は変わりません。シェーダーで比較する値を表すだけです。きっとここの誰かがもっと詳細にあなたを記入することができるでしょう。


わかっていますが、とにかくあなたの答えに感謝します:)
Ailurus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.