テクスチャマップでレリーフを描画する

レリーフや文字などの細かい凹凸模様をモデリングするのは大変なので、LightWave でテクスチャマップを使って凹凸を描画する方法について調べたメモ。これによりモデリングせずとも、テクスチャだけで表面を盛り上げることができる。モノクロイラスト等へ使う観点から記した。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。

図版を作成する

Catherine L. 氏の提供する以下の Photoshop ブラシ素材を使用して装飾模様を作成した。

今回は正方形のキャンバスを作り、白い背景レイヤーの上に黒で模様を描いたレイヤーを重ねた画像(PSDファイル)を利用した。


バンプマップ(Bump Map)

まずは一番単純なバンプマップを試してみる。これはモノクロ(グレースケール)画像を使うが、50%グレーよりも暗い部分が引っ込んでいるように、それより明るい場合は出っ張って見えるように処理される。ポリゴン形状は変化せず、陰影を与えることで表面の形が変わったように見せかける技術。

Modeler を起動、今回はテストなので立方体を作成。ショートカット【F5】で[色・質感編集(Surface Editor)]パネルを出す。該当サーフェイスの[基本]タブ>[バンプ]の項目を100%にして、右にある[T]ボタンを押す。

[テクスチャ編集]パネルが出るので、[画像]欄で[(画像を開く)]から用意してあった画像を読み込む。

今回は[投影]を[立方体状]に。[Texture Amplitude (テクスチャ振幅)]は「100」にした。[自動サイズ合わせ]を押してスケールを変更し、ちょうどいい大きさに。描いた模様は黒色なのでそのままでは凹んでしまうので、これを凸状に盛り上げるため[レイヤー反転]にチェックを入れて有効化(または[画像編集]パネル>[編集]タブ>[反転]を有効化でもよい)。[ピクセルブレンド]も有効化しておく。なお、こうして設定したバンプマップの影響は[色・質感編集(Surface Editor)]パネルのプレビューに見えている球の質感が変化することで確認できるが、Modeler のビューで確認することはできない。

そこで Layout へと移る([色・質感編集(Surface Editor)]パネルの設定時点から Layout に移っていてもよい)。カメラ位置を決めたら背景色を白にし、ビューポートの表示モードを VPR に変更。すると、テクスチャの模様部分が盛り上がっているのが分かる。

F9】でレンダリングしてみる。輪郭線は設定していない。

盛り上がりはさほど大きくないものの、装飾模様の陰部分が黒く見えてそれなりに凹凸が入っているのが描画されている。しかし、いつもの線画を出すときと同じく色を白にして自己発光度を100%にすると、真っ白になって装飾模様など見えなくなる。形状が変化していないのだから当然なのだが、輪郭線を設定しても以下のように白くなるだけである。


陰を描画する

これではモノクロイラスト用途に使えない。そこで、白地に装飾模様の陰を描画するためプラグインunReal Xtreme2」を使う。

まず[色・質感編集(Surface Editor)]パネルの[色]のカラーボックスか、もしくはノード編集で[Color]ノードを使ってサーフェイス色を白にしておく。このとき自己発光度は0%のままでよい。

unReal Xtreme2」プラグインを追加したら、[色・質感編集(Surface Editor)]パネル>[シェーダ]タブ>[シェーダ追加]より新規に[unReal2::CelPainter]を選択して追加し、名称部分をダブルクリック(または右クリック>[プロパティ])して CelPainter メインパネルを出す。

陰のキーを選択し、[ベース]タブのカラーボックスをクリックして色を黒に変え、キーハンドルを一番左へ動かす。VPRを見ながら白色のキーハンドル位置を動かして、装飾模様の陰の表示具合を調整する。ここでは[位置]を50%にしたが、あまり大きくすると真っ黒になる。[スムージング]はどちらも[ステップ]に変更。白と黒だけあればいいので、不要なキーは削除する。サーフェイスが複数ある場合はこの設定を他のサーフェイスにも移植する。

F9】でレンダリングしてみる。輪郭線も設定した。

ついでにバンプの[レイヤー反転]のチェックを外して(つまり凹ませて)みた場合は以下のようになる。やはり形状が変化していないので、陰を出せても違和感が残る。

後述する法線マップの項でも解説しているが、元画像を加工して白黒の境界に中間色(グレー)部分で縁取りしたものを使用した場合の結果は以下。線が太めに出ている。

標準機能だけで白地にしても陰を消さない方法については調べていない。「Super Cel Shader」や「BESM」等の搭載シェーダを使えばできるかもしれない。また、イメージフィルタ「Composite Buffer Export」や「Photoshop PSD Export」を使えば黒く見える濃い陰部分だけの素材を出力できないかと思ったが、これは無理だった。

ノード編集でバンプマップ

画像からのバンプマップをノード編集で設定する手順を記す。[色・質感編集(Surface Editor)]パネル>[基本]タブの[ノード編集]ボタン横のボックスにチェックを入れて有効化し、[ノード編集]ボタンを押して[Node Editor]を出す。左に並んだノード欄から[2D Textures]>[Image]ノードを出してその[Bump]出力を[Surface]ノードの[Bump]入力へと繋ぐ。[Image]ノードの設定は以下のようにした。[Bump Amplitude (バンプ振幅)]はそのままだとささやかすぎたので思い切って1000%にした。

さきほどと同様に「unReal Xtreme2」を使用して線を出してみたが、なぜかいまいち薄い上に立体感がない。


変位マップ(ディスプレイスメントマップ;Displacement Map)

変位マップはバンプマップと違い、オブジェクトの形状を変化させる。モノクロ(グレースケール)画像の白い部分にあるオブジェクト頂点を動かし、グレー部分ではその明るさに比例した分だけ頂点が動く。

つまり変位マッピングを適用するオブジェクトは、ポリゴンを細分化して頂点数を増やしておく必要がある。また、オブジェクトの全ポリゴンを三角分割しておかねばならない。4頂点以上のポリゴンの頂点を動かすと非平面ポリゴンとなってしまい、レンダリング時にエラーが生じるためだ。また、凹凸部分を滑らかにするには、サブパッチの適用が必要となる。

ということで、まずは立方体に[マルチ加工]>[細分化]>[細分化]>[ファセット]を何度もかけて細かくし、最後に[マルチ加工]>[細分化]>[三角分割]。

これをそのまま Layout へ持ち込み、オブジェクトを選択したら[オブジェクトのアイテムプロパティ]を出し、[変形]タブ>[変位マッピング]の[T]ボタンを押す。

[テクスチャ編集]パネルが出るので、[画像]欄で[(画像を開く)]から用意してあった画像を読み込む。

[投影]を[立方体状]にしたらバンプの時と同様で全面に出るのかと思ったらなぜか出なかったので、[平面状]にした。[Texture Amplitude (テクスチャ振幅)]は正の値で盛り上がり負の値で凹むので、「0.02」にしてわずかに盛り上がるようにした。元画像は白地に黒の模様だが、変位マップは画像の白部分の頂点が動いて黒部分の頂点は動かないので、[レイヤー反転]を有効化し、黒地に白模様となるようにする(または[画像編集]パネル>[編集]タブ>[反転]を有効化でもよい)。テクスチャ軸は[Y]に。[自動サイズ合わせ]を押してスケールを変更し、ちょうどいい大きさに。すると以下のようになる。

確かに盛り上がってはいるが、三角ポリゴンがそのまま出っ張っていて全体としてやや角張っている。忘れていたのでここで[色・質感編集(Surface Editor)]パネル>[スムージング]を有効化。これで多少は滑らかになった。盛り上がりをもう少しなだらかにしたい場合は、元画像にぼかしをかけて模様の縁部分をなだらかにしたものを読み込めばよいと思う。

これに輪郭線設定を加え、サーフェイス色を白にして自己発光度を100%にし、試しにレンダリング

ちょっとガタついているので、Modeler に戻ってサブパッチをかけてさらに滑らかにする。かなり細分化しているので、サブパッチをかけてもエッジ部分の丸まり具合は小さいのが幸い(これが大きいと輪郭線に影響する)。

これに輪郭線設定をしたら、エッジが丸まったからか[鋭角の折り目]を設定しても線が出ない。Modeler に戻って、各面(実際は向かい合わせの2面ずつ)でサーフェイスを分ける。

サブパッチをかけて Layout に移り輪郭線を設定、[シルエットエッジ]と[サーフェイス境界]を有効化。サーフェイス色を白にして自己発光度を100%に。結果に少し不満だったので、変位マッピングの[Texture Amplitude (テクスチャ振幅)]を「0.01」にしてレンダリングしたものが以下。

盛り上がった模様部分は[シルエットエッジ]で線が出ているので、この項目を細くするとオブジェクト外形の輪郭線まで細くなってしまう。外形線のみを太くするには、変位マップなしで線を太くしてレンダリングした線画と後で合成するしかないように思う。

ついでに書き留めておくが、これに追加してバンプマップの際に利用した「unReal Xtreme2」プラグインのシェーダ[unReal2::CelPainter]をそのまま使ってみたものの、あまり大きく変わらなかった。

ノード編集で変位マップ

画像からの変位マップをノード編集で設定する場合を記す。

[オブジェクトのアイテムプロパティ]を出し、[変形]タブ>[変位マッピング]の[ノード編集]ボタン横のボックスにチェックを入れて有効化し、[ノード編集]ボタンを押して[Node Editor]を出す。[2D Textures]>[Image]ノードを出してその[Bump]出力を[Displacement]ノード(変位もしくは変形ノード)の[Input]入力へと繋ぐ。

[Image]ノードをクリックしてパネルを出し、[Image]欄で画像を読み込む。設定は以下のようにした。

[Invert Color]にチェックを入れて画像の階調を反転させ、[U Tiling]と[V Tiling]は[Reset]し、[Mapping]は[Cubic]にしてサイズも合わせる。変位マップを使うときはテクスチャ画像のミップマップ品質はオフにしておくことがマニュアルで推奨されているので[Mipmap Quality]は[Off]にしたが、どちらでもよいと思う。肝心の盛り上がり具合を示す[Bump Amplitude]はわずかでいいので、VPR で確認しながら調整して「0.5%」にした。

これは仕様なのか不明だが、[T]ボタンから[テクスチャ編集]パネルを使う設定方法であればビューポートの表示モードが[テクスチャソリッド]等でも変位の影響が表示されたのに、ノード編集で設定する場合は表示モードを VPR にしておかないとその影響が表示されないので、少しやりづらい。

輪郭線設定は[シルエットエッジ]と[サーフェイス境界]を有効化。いつものようにサーフェイス色を白にして自己発光度を100%にし、【F9】でレンダリング。なぜかこちらはとても線が出ている代わりに、立体感がなくなった。

[Bump Amplitude]を「1%」にしてみたらガタついた線になってしまった。[オブジェクトのアイテムプロパティ]>[ジオメトリ]タブ>[表示サブパッチレベル]を上げれば滑らかに細かくなるらしい。

なお、変位マップはオブジェクトファイルではなくシーンファイルに保存される。また、変位マップで変形した形状のオブジェクトを保存したければ、Layout で該当オブジェクトを選択し、[ファイル]>[保存]>[変形状態のオブジェクトを保存(Save As Transformed)]から可能。つまり画像さえあれば、モデリングせずとも複雑に凹凸のついたオブジェクトを作成できるわけである。

バンプ変位(Bump Displacement)

LightWave のマニュアルを読むと「バンプ変位」という機能がある。これはバンプマップで使われているテクスチャを変位マップにも利用するという機能なので、変位マップと似たような(というか、ほぼ同じ?)結果となる。だからバンプ変位はバンプマップと違い、実際に形状を変化させる。なお v2018 だと「サーフェイス変位(Surface Displacement)」という名称に変更されているらしい。

まず通常のバンプマップをサーフェイスに適用し、バンプのテクスチャ編集パネルで[ミップマップ品質]をオフにしておく。

Layout にて、[オブジェクトのプロパティ]>[変形]タブ>[バンプ変位(Enable Bump)]をチェックして有効化したら、[距離(Distance)]の値を入力して変位の量を決める。このとき、あらかじめ適用箇所を細分化しておかないと正しく変形しない。つまり、変位マップと同様の前処理が必要になるので注意。今回は変位マップの項で利用した細分化オブジェクトを使った。

元画像を加工して白黒の境界に中間色(グレー)部分で縁取りしたもの(法線マップの項で解説)を適用した場合の結果は以下。

ノード編集でやるには、[Surface]ノードの[Displacement]入力がこの機能を担っている。[Image]ノードで画像を読み込み、その[Luma]出力を[Surface]ノードの[Displacement]入力へと繋ぐ。その後、入力値を調整すればよい。

同じような結果を得られる変位マップがあるので不要な機能に思われるが、複数バンプマップが複数サーフェイスにあって、それらと同じ凹凸で実際のオブジェクトも変位させたい時、この機能を使えばそれぞれの箇所に変位マップを再度設定する手間を省けるという意義がある模様。それとノードで行う場合は、[Displacement]ノードを使わずに[Surface]ノードだけで変位させられるというのがメリットか。

法線マップ(ノーマルマップ;Normal Map)

法線マップとは、ざっくり言うとバンプマップの上位版だと思えばよい。法線マップもバンプマップと同様にオブジェクトの形状は変化させない。

法線(ノーマル)とは、ポリゴンの表の面から垂直に伸びている仮想上の線のこと。この法線がどの方向を向いているかという情報が、法線マップを適用するとそれに含まれる方向セットの情報に置き換えられる。それによって、ポリゴン該当箇所の高さと方向を擬似的に変えることができる。対してバンプマップは法線方向を置き換えるのではなく、既存の方向に対する修正を加えるもので、凹凸の高さだけをグレースケール画像で設定するというもの。法線マップでは、法線の方向の3次元情報(法線ベクトルのx, y, z座標)はカラー情報(RGB値)に対応させて記録されている。

Photoshop で加工してから法線マップ画像を作成

後述する理由により、画像編集ソフトで元画像を加工してから法線マップ画像を作成する。ここでは Photoshop を使うので、あらかじめ NVIDIA の「NormalMapFilter」をインストールしておく。

装飾模様の描かれたレイヤーを選択して右クリック>[レイヤー効果]からレイヤースタイルダイアログボックスを出し、[光彩(内側)]をチェックする(もしくは[レイヤー]メニュー>[レイヤースタイル]>[レイヤー効果]>[光彩(内側)])。パラメータは任意にいじる。ちなみに CLIP STUDIO PAINT の場合はグラデーションマップ機能が有用らしい。

画像を統合し、されていなければRGBカラーにしておく([イメージ]>[モード]>[RGB カラー])。

[フィルター]>[NVIDIA Tools]>[NormalMapFilter]を実行。出たパネルでは[Invert Y]にチェックを入れ、[Scale]の値(凹凸の深さ・高さ)を任意に入力したら、他はそのままで[OK]。画像が法線マップ画像に変換されるので、別名で保存する。

f:id:Ditty:20181126234151j:plain

「NormalMapFilter」のパネル各項目についてや、その他の法線マップ画像作成ツールについては以下参照。

法線マップは垂直に凹凸をつけることには向いていない。元画像が白と黒のはっきりした2値画像もしくはそれに近い場合なら、そこから生成した法線マップではほぼ垂直に凹凸が生じてくっきり映えるように思えるが、実は物足りない結果となってしまう。白黒の境界に中間色(グレー)部分を縁取りして、斜め(=なだらか)に凹凸が生じるようにすると良い効果が得られる。参考として、白黒のはっきりした元画像のまま法線マップ画像へ変換したものと、元画像を前述のように加工してから変換したものを示しておく。

左が元画像のまま変換、右が加工後に変換した法線マップ。

ノード編集で法線マップをサーフェイスに適用

以降は LightWave へ移る。Layout にて、[色・質感編集(Surface Editor)]パネル>[基本]タブの[ノード編集]ボタン横のボックスにチェックを入れて有効化し、[ノード編集]ボタンを押して[Node Editor]を出す。左に並んだノード欄から[2D Textures]>[NormalMap]ノードを出し、ダブルクリックしてパネルを開いたら、先に作成した法線マップ画像を[Image]より読み込んで設定する。最後に[NormalMap]ノードの[Normal]出力を[Surface]ノードの[Normal]入力へと繋ぐ。[NormalMap]ノードの設定は以下のようにした。

F9】でレンダリングした画像が以下。

バンプマップの時と同様に、装飾模様の陰部分が黒く見えて凹凸が描画されている。しかし、やはり同様に色を白にして自己発光度を100%にすると、真っ白になって模様は見えなくなる。形状が変化していないのでこれまた当然である。ということで、ここでもプラグインunReal Xtreme2」を使って陰を描画する。方法はバンプマップの時と同じ。そうして最後に輪郭線を[シルエットエッジ]と[鋭角の折り目]に設定して【F9】でレンダリングした画像が以下。


レリーフマップ(Relief Map)

バンプマップや法線マッピングの上位版のようなものとしてレリーフマップというものがある。深度マップを利用して立体的な画をレンダリングする方法で、これも実際のオブジェクト形状は変化しない。LightWave の標準機能だけでレリーフマップはできないが、外部の無償ノードプラグインセット「DP Kit」内の「Relief Map」ノードを使うとできるようになる。扱いとしてはデモ版ということになっているようだが十分使える。以下に手順を記す。

事前に外部プラグイン「DP Kit」をインストールしておく。そして背景色を白にしたら、ビューポートの表示モードを VPR に変更しておく。

Layout にて、[色・質感編集(Surface Editor)]パネル>[基本]タブの[ノード編集]ボタン横のボックスにチェックを入れて有効化し、[ノード編集]ボタンを押して[Node Editor]を出す。左に並んだノード欄から[2D Textures]>[Image]ノードと[Constant]>[Color]ノード、そして[DP Kit]>[Shaders]>[Relief Map]ノードを出す。

[Color]ノードをダブルクリックしてパネルを開き、色を白(255, 255, 255)にしたら、[Color]出力を[Relief Map]ノードの[Color]入力へと繋ぐ。

次に[Image]ノードをダブルクリックしてパネルを開いたら、装飾模様の画像を[Image]より読み込んで設定する。このとき、法線マップで使ったようなグレーでぼかして縁取りした画像ではなく、元の白黒がくっきり分かれた画像の方がよい。

読み込む模様は黒色なためにそのままだと凹んでしまうので、これを凸状に盛り上げるため[Invert Color]にチェックを入れて有効化する(または[Edit Image]ボタンから[画像編集]パネルを開き、[編集]タブ>[反転]を有効化でもよい)。[Mapping]は立方体なので[Cubic]にした。[Scale]タブでサイズを合わせる。


[Image]ノードの[Luma]出力を[Relief Map]ノードの[Height]入力へと繋ぎ、[Bump]出力を同じく[Relief Map]ノードの[Bump]入力へと繋ぐ。おしまいに[Relief Map]ノードの[Diffuse]出力を[Surface]ノードの[Diffuse Shading]入力へと繋ぐ。

この時点での結果は以下のようになる。

確かに陰が入ってかなりよい具合に凹凸を表現できているが、物体表面がグレーになってしまっている。これを白くしようといつものように[自己発光度]を100%にしても変化がなかった。そこで色々といじってみたところ、[Relief Map]ノードのパネルにある[Diffuse]を160%にしたらグレーが消え、きちんと白色(255, 255, 255)になった。なお[Relief Map]ノードの[Max Depth]値では凹凸の深さ(高さ)を、[Self-Shadows]値では陰のレベルを調整できる。

最後に輪郭線を[シルエットエッジ]と[鋭角の折り目]に設定して【F9】でレンダリングした画像が以下。

この記事ではバンプマップ、変位マップ、法線マップと試してきたが、このレリーフマップがもっとも「レリーフっぽい画」を出力できたように感じる。形状が変化しないのに凹凸の陰を描画してくれることに加え、変位マップのようにポリゴンを細分化してサブパッチをかける必要もなく、法線マップのように専用の画像を用意する必要もないので、使いやすい点も大きく評価できる。他に比べてレリーフマップはレンダリング時間がかかるという指摘を見かけたが、白黒の静止画像を出力してみた実感としてはほとんど変わらなかった(上記の画像レンダリング時間は6.5秒)。この点については場合によるのかもしれない。個人的には、中景~遠景にあるビルの窓などにも使えるのではないかと思っている。

参考

法線マップ
テクスチャ変位

変位について調べるなかで引っかかった、テクスチャ編集の[ブレンドモード(Blending Mode)]にある「テクスチャ変位(Texture Displacement)」について。マニュアル(p.1712)によると「レイヤーを上に押し上げ、バンプ(Bump)マップのような効果」になるというが、この機能で変位するのはオブジェクトではなくテクスチャ。下にテクスチャ変位レイヤーを置くと上のレイヤーが変位する。

最終更新日:2019-07-12