法線マップについて

MMEでよく聞く「法線マップ」。 MMD自体は対応していませんが、MMEと法線マップを使えばよりリアルな表現が可能となります。 このページでは法線マップの基本や、その使い方について解説します。


そもそも「法線」とは何なのか

法線とは、線や面に対して垂直な線のことです。 3Dにおいて扱うのは面であることが多いで、ここでは面についての法線であると思ってください。3Dで重要なのは方向を含めた「法線ベクトル」となります。

2次元と3次元の法線

法線マップを使わない場合でも、3Dにおける法線ベクトルは重要な意味を持っています。 MMDモデルのポリゴン(面)の法線ベクトルは、そのポリゴンの面の向きを定義しているからです。

数学的には面に垂直なベクトルが法線ベクトルですが、3Dでは定義が逆転しており、法線ベクトルが面の向いてる向きとなっています。 面の法線ベクトルが、面に垂直とは限らないということです。

3Dでは、ポリゴンの向き…つまり法線の向きを考慮して、照明や影の出方を計算しています。 通常は法線は面に垂直になりますが、表現のためにそうはなっていない場合もあります。

ポリゴン(面)というのは、3つの頂点で構成されていますが、実は頂点には座標だけではなく、「方向」の情報も持っています。 これらの点を3つ集めて「面」を作った場合、点の方向の平均が、その面の法線ベクトルです。

法線マップの仕組み

テクスチャでポリゴンの表面に細かい「色」をつけるように。 法線マップはポリゴンの表面に細かい「法線」をつけます。 陰影や反射は法線で決まりますが、1つのポリゴンには1つの法線しか持てません。 しかし法線マップを使うこと1つのポリゴンに複数の法線―つまりデコボコを付けられます。

では、法線をどのように画像として保存しているのでしょうか。 法線は3次元上の線の傾きで表せるので、(X,Y,Z)成分で表される単位ベクトルにています。 X方向とY方向はは、-1から+1を0~255に当てはめてRとGに格納します。 Z方向は、奥行き方向のベクトルで、0~-1を、128~255に割り当てます。 こうして法線をRGBの色に変換しています。

法線マップの編集

法線マップはネット上で配布されているものも多いですが、扱ううえで注意点があります。

DirectXとOpenGL

DirectXとOpenGLは、どちらも3Dや2DのCGを処理するAPIです。3Dを表示するために使っているプログラムみたいな感覚でOKです。 DirextXはゲーム向け。OpenGは3Dソフトウェア向けなんて言われたりしますが、MMDやMMEは「DirectX」で動いています。 どうしてこんな話をするのかというと、DirectXとOpenGLでは法線マップの画像が違うからです。

DirectX OpenGL
DirectX用の法線マップ OpenGL用の法線マップ

上の法線マップは、手前に凸な半球面のノーマルマップです。

凸な感じが凸っぽく法線マップに現れるのがOpenGLタイプ。凸な法線マップなのに、凹んでるように見えるのがDirectXタイプです。 この違いはDirectXとOpenGLの規格の違いにあります。

異なるのは 法線マップそのものではなく、座標系の規格です。

DirextXの座標系は、手前に行くほどZ値が大きくなりますが、OpenGLでは小さくなります。 どうして違うのかといわれてもわかりません。そういうものなんです。

「じゃぁ、MMDはDirectXっていうやつを使ってるから、DirectXタイプを使えばいいんだね!」となりますがそうではありません。

なぜかMMEは右側、OpenGLタイプが圧倒的に多いです。

MME用として配布されてる法線マップも大抵OpenGLタイプです。

法線マップの変換

では、異なる二つのタイプの法線マップを変換させるにはどうすればいいのでしょうか。 OpenGLタイプの法線マップをDirectXタイプに変更する方法がありますので、紹介します。

処理の内容は極めて単純。RとGの明暗を反転させればOKです。 画像編集ソフトのトーンカーブで、RとGの傾斜を右下がりにすれば法線を変換できます。

法線マップの反転

法線マップの模様を左右反転。もしくは上下反転させたい場合もあります。 そのまま画像だけを反転させると、法線情報までは反転されないのでおかしくなってしまいます。

左右反転の場合は、Rのトーンカーブを右下がりに。

上下反転の場合は、Gのトーンカーブを右下がりにするのを忘れないでください。

法線マップの作り方

配布してある法線マップを編集する方法について解説しましたが、自分で作ることももちろん可能です。

3Dソフトで作成する

一番確実な方法は、3Dソフトでモデリングしたものを法線マップに変換する方法です。 しかし、MMDを趣味で扱う人には敷居が高いと思います。 blenderなどは無料で使えますので、興味があったら挑戦してみてください。「ベイク」や「焼き込み」で検索するとでてきます。

テクスチャ画像から作成する。

MMD界隈では非常にメジャー、かつ手軽な方法です。

テクスチャから法線マップを作成します。テクスチャによっては上手くいかないこともありますが、ほぼほぼこれで十分です。

GIMP2を使う

無料の画像編集ソフト「GIMP2」と、プラグイン「GIMP normalmap plugin」を使用します。 詳しくは、GIMP normalmap pluginをご覧ください。

PhotoShopを使う(CC以降)

CC以降なら、最初から法線マップ作成機能がついています。 フィルター>3D>法線マップを生成を開いてください。

PhotoShopを使う(C6以前)

C6以前だとプラグインが必要です(無料でDL出来ます)。 「NVIDIA Texture Tools for Adobe Photoshop」を導入してください。 導入したら、フィルター>NVIDIA Tools>NormalMapFilterを開いてください。

法線マップの使い方。

MMEによって異なるため一概には言えませんが、スフィアマップを法線テクスチャの登録先にサブテクスチャとして登録したり、 MMEのフォルダに入れたりして使うことが多いです。 どちらにせよ法線マップに対応したMMEが必須となります。


まとめ

  • 法線マップを使うと、細かい凹凸を表現できる。
  • 法線マップには、DirectX用とOpenGL用がある。
  • 法線マップの編集には、トーンカーブを使う。