「法線マッピング」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
'''法線マッピング'''([[英語]]:normal mapping)とは、陰影処理のために「[[ピクセル]]の向いている方向」を保持するものをいう。
+
'''法線マッピング'''([[英語]]:normal mapping)とは、[[バンプマッピング]]の発展形で、[[バンプマップ]]では[[ピクセル]]単位で「高さ」の情報を持つのに対して、[[法線マップ]]では[[ピクセル]]単位で「XYZの[[ベクトル]]」を持つものをいう。
  
 
== 概要==
 
== 概要==
[[ピクセル]][[法線]]は、[[バンプマップ]]なしの場合は[[頂点]]に[[法線]]を持たせ、2つの頂点の[[法線]]と[[ピクセル]]の位置から大雑把に算出する。 同様にバンプマップありの場合はこれに「高さ」をかけ合わせてもう少し精度をよく算出していた。
+
バンプマップなしの場合は頂点に[[法線]]を持たせ、2つの頂点の[[法線]][[ピクセル]]の位置から大雑把にピクセルの[[法線]]を算出する。 バンプマップありの場合はこれに「高さ」をかけ合わせてもう少し精度をよく算出していた。
 
 
 
[[ファイル:頂点の法線からピクセルの法線を算出.png|なし|サムネイル|640x640ピクセル]]
 
[[ファイル:頂点の法線からピクセルの法線を算出.png|なし|サムネイル|640x640ピクセル]]
  
一方、法線マッピングでは[[テクスチャマッピング]]の[[画像]]と同じ要領であらかじめピクセル単位で法線ベクトルを計算しておいた[[データ]]を用いる。
+
一方、法線マッピングでは[[テクスチャマッピング]]の[[画像]]と同じ要領であらかじめピクセル単位で法線ベクトルを計算しておいた[[データ]]を用いる。 つまり実行時にピクセル単位の法線を計算しないうえに、推論的なものではないので非常に精度の良いなデータになる。 すばらしいね。 そんなに精度がいいなら[[ピクセルシェーダー]]で高品質なライティングしたくなる。
 
 
つまり実行時にピクセル単位の法線を計算しないうえに、推論的なものではないので非常に精度の良いな[[データ]]になる。すばらしいね。そんなに精度がいいなら[[ピクセルシェーダー]]で高品質なライティングしたくなる。
 
  
 
なお、デメリットもある。 まず法線マップの[[データ]]の作成は非常に敷居が高い。 [[ZBrush]]では[[スカルプト]]でゴシゴシやるとモデルと一緒に出力できるらしい。 [[スカルプト]]を使えるツールなど素人には買えるわけがない(無償で使える[[Fusion 360]]で出力できるかもしれないが試してはいない)。
 
なお、デメリットもある。 まず法線マップの[[データ]]の作成は非常に敷居が高い。 [[ZBrush]]では[[スカルプト]]でゴシゴシやるとモデルと一緒に出力できるらしい。 [[スカルプト]]を使えるツールなど素人には買えるわけがない(無償で使える[[Fusion 360]]で出力できるかもしれないが試してはいない)。
  
 
== 値変換 ==
 
== 値変換 ==
一般的な[[プログラマブルシェーダー]]には法線マップ専用の受け口などない。
+
一般的な[[プログラマブルシェーダー]]には法線マップ専用の受け口はない。
「なんたらマップ」の受け口は一律でテクスチャマップの受け口を利用することになる。
+
そのため法線マップは[[テクスチャマップ]]に変換して[[シェーダー]]に渡すことになる。
つまり法線マップも[[テクスチャマップ]]に変換して[[シェーダー]]に渡すことになる。
 
 
 
法線は「[[クリップスペース座標]]」で表され「-1.0から1.0」の範囲の「[[正規化]]」された値である。
 
一方、[[テクスチャ]]の[[RGB]]の[[データ]]は「0.0から1.0」の範囲となっている。
 
  
このためテクスチャとして[[ファイル]][[メモリ]]に保持する際には以下のような変換を行う必要がある。
+
この際に法線ベクトルの各値は「-1から+1」の範囲なのに対して、
 +
[[テクスチャ]][[RGB]]の[[データ]]は「0から+1」の範囲となっているため以下のような変換を行う必要がある。
 
  格納値 = (法線 + 1.0) * 0.5
 
  格納値 = (法線 + 1.0) * 0.5
  
この格納値を[[プログラマブルシェーダー]]内で再び法線ベクトルに戻して利用する際には以下のような変換を行う。
+
この格納値をプログラマブルシェーダー内で再び法線ベクトルに戻して利用する。
 
  法線 = 2.0 * 格納値 - 1.0;
 
  法線 = 2.0 * 格納値 - 1.0;
  
 
== 上方向 ==
 
== 上方向 ==
 
3D空間では「Y軸が上方向」ということが多いが、
 
3D空間では「Y軸が上方向」ということが多いが、
法線空間([[クリップスペース座標]])では「Z軸が上方向」となっているのが一般的である。
+
法線空間では「Z軸が上方向」というのが一般的である。
  
 
=== フラット ===
 
=== フラット ===

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)