忘却まとめ

Blenderの中級者・上級者向けの踏み込んだ情報や、アドオン・3DCGに関する情報を記事にします

【ノード編集】ノーマルマップの画像を複数枚合成する方法【Blender Eevee・Cycles Render】

Blender

更新日:

Eevee や Cycles Render のマテリアルで、ノード編集にてノーマルマップを複数枚使う方法を紹介する。

更新(2023-11-03)

執筆当時のやり方より、後述の「オーバーレイ + Bのみ乗算」のやり方の方がいいかもしれない。

使用する画像

今回は、模様のある鉄板(縞鋼板(しまこうはん)というらしい)と、
石畳のノーマルマップを合成する。

フリーテクスチャを探す時は textures.com がおすすめ。

Metal Threadplate 2 - PBR0048

3D Scanned Medieval Cobblestone Path - 6x3 meters

まずは普通にノードを組む

縞鋼板
石畳
  1. 追加(Shfit + A) → テクスチャ → [画像テクスチャ]ノードを追加
    • ノーマルマップ画像を設定
    • 色空間は[Non-Color]にすること
      これをしないとノーマルマップが正常に出力されない
  2. 追加(Shfit + A) → ベクトル → [ノーマルマップ]ノードを追加
  3. ノーマルマップノードをプリンシプルBSDFの[ノーマル]に接続

RGBミックスノードで2つをミックス

RGBミックスノードを使って画像2枚を合成する。
RGBミックスノードは、ペイントソフトのレイヤー合成機能と似たようなもの。
レイヤーの描画モードと同じように、合成方法を選べる。
レイヤーの不透明度が、値と似ている(RGBミックスでは、どちらの画像をどの程度反映させるか、となっている)。

ノーマルマップを合成するには、
ノーマルマップ同士を乗算で合成し、濃くなったRとGを取り除く

  1. 追加(Shfit + A) → カラー → [RGBミックス]ノード を追加
    • ブレンドタイプを[乗算]にする
    • 値は[1.0]
  2. ノーマルマップ同士をミックスする
  3. 最後に、ノーマルマップのベースカラーで「除算」する
    • RGB[0.5,0.5,1.0]がノーマルマップのベースカラー

仕組み

ノーマルマップ同士を乗算する

画像1[R,G,B] × 画像2[R,G,B] = 合成結果

  • [0.5,0.5,1.0] × [0.5,0.5,1.0] = [0.25,0.25,1.0]
  • 乗算なので、RとGの色が濃く(0=黒に近く)なる
  • Bは1.0(白)なので乗算しても変わらない

ベースカラーで除算する

RとGが濃くなりすぎたので、色を元に戻す

  • 合成結果 ÷ ベースカラー = 最終結果
  • [0.25,0.25,1.0] / [0.5,0.5,1.0] = [0.5,0.5,1.0]

ペイントソフトで調整する方法

ペイントソフトでノーマルマップを合成する場合でも、同じ手法で合成することができる。
除算に相当する描画モードがないので、レベル補正にてRとGの値を減らす。

  1. ノーマルマップレイヤーを2枚用意
  2. 上のノーマルマップを[乗算]で合成する
  3. レベル補正調整レイヤーを上に作る
  4. R・Gチャンネルのみ、それぞれ白レベルを50%にする

【注意】オーバーレイ合成ではBチャンネルの情報が消える

一見、オーバーレイで合成すればうまく合成できているように見える。
しかし、ノーマルマップをオーバーレイで合成すると、 [Bチャンネルの情報が消える]。

RGB分離ノードでBチャンネルを見てみた結果、なにもない
同様に乗算を見てみると、薄っすらとテクスチャが付いているのが見える

これはなぜかというと、
描画モードにはそれぞれ合成結果に影響を与えない中性色があり
オーバーレイでは、50%のグレーが中性色。
ノーマルマップのRとGはグレーがベースなのでうまくいくが、
Bチャンネルは白ベースなので、
オーバーレイではうまくいかない。

乗算とオーバーレイの手法を比較してみると、オーバーレイでは凹凸の情報量が少ない。

参考

オーバーレイでは駄目だということの参考

よくわからないノーマルマップ講座 Tips編 その1: Sandy Virtual City
https://kouoaeha.at.webry.info/201408/article_4.html?reload=2019-08-18T04:09:05

乗算での合成方法の参考

texturing - How to Combine two Normal Maps? - Blender Stack Exchange
https://blender.stackexchange.com/a/97207/75121

追記

執筆当時より後に見つけた方法を書く。

下記記事参考。
サンプルノーマル画像は下記リンクのものを使用。

Blending in Detail - Self Shadow

オーバーレイ

オーバーレイで合成するのが一番簡単。
ただ、Bチャンネルが消えるのでディティールが損なわれていて、薄い。

オーバーレイ + Bのみ乗算

オーバーレイに加え、Bチャンネルのみ乗算で合成する。

だいぶいい感じになっているが、陰っている時の凹凸が弱いが、これでも十分か。

  1. 2枚をミックスノードのオーバーレイで合成する。
  2. それを、XYZ分離ノードでRGBを分離する。
  3. 2枚の元画像を、それぞれXYZ分離ノードで分離する。
  4. Z(Bチャンネル)のみを、数式ノードの乗算で合成する。
  5. XYZ結合ノードを作成し、オーバーレイの方のXとY、乗算で混ぜたBチャンネルの方のZを、合成する。

その他

上記リンクの偏導関数の場合、陰部分の凹凸がよくわかる。
これをBlenderのノードで再現する方法がわからず。

3Dモデルなどの制作依頼はこちら

-Blender
-, , , , , , , , , , ,

Copyright© 忘却まとめ , 2024 All Rights Reserved Powered by STINGER.