Blender で法線のベイク
目次
- 他のアプリを使う
- テンプレ設定
- トラブルシューティング
- ベイク用 UV を使う
- ベイク先のテクスチャの精度
- 法線マップをファイルに保存する際のフォーマット
- ハードエッジ問題
- ノードの設定
- 法線に模様ができる場合
- ベイク時のサンプル数
- カスタム法線をベイクする
- 高さマップから法線マップを作成する
- 外部リンク
他のアプリを使う
Blender より Toolbag、Substance Painter、3D Coat の方が簡単かつ高品質にベイクできる。それらのアプリが利用できるならそちらの使用を推奨する。
Always bake with mouth slightly open and eyelids slightly closed. Limit ray distances / use cage.
— Bartek Moniewski (@BartekMoniewski) September 6, 2020
But most importantly- use other tool for baking. Blender baking is worthless, not worth the pain.
テンプレ設定
ローポリが外側でハイポリが内側。ハイポリの方が大きいと法線が反転する。
ローポリメッシュをボーンやシェイプキー、ラティス等で変形させる場合は、法線空間にタンジェントを使う。法線空間にタンジェントを使う場合は、「選択物 -> アクティブ」にチェックを入れる。「選択物 -> アクティブ」の「押し出し」と「レイの最大距離」とを適当に設定する。
ローポリのシェーディング
大抵はローポリ側をスムーズシェーディングにするとうまくいく。
しかし平面に凹凸をベイクしたい場合は、ローポリ側を自動スムーズやフラットシェーディングにした方が上手くいく。ローポリ側を自動スムーズやフラットシェーディングでベイクするとベベルが上手くベイクできないので、画像処理ソフトでスムーズシェーディングにした法線と合成する必要があるかもしれない。
詳細はハードエッジ問題を参照。
トラブルシューティング
一部のみベイクできない
- UV 展開されているかどうか確かめる。メッシュ編集後にやってしまいがち
- レイの最大距離が足りているか確かめる
ベイクできない
- ベイク先のマテリアルノードのテクスチャが選択されているか確かめる
ベイクできない法線
ローポリ法線と直交する法線はベイクできない。下の画像の突き出し部分の側面(赤で示した部分)は、ローポリ法線と直交しているのでベイクできない。
ベイク用 UV を使う
ベイク用の UV にベースカラー(アルベド)の UV を使うことが多い。しかしベイク用 UV が使えるなら、そちらの方がテクスチャを効率的に使えるため、格納できる情報量が多くなる。
Blender の標準機能ならライトマップパックが使える。
ベイク先のテクスチャの精度
Blender でベイク先の法線テクスチャを作成する際に 32bit Float にチェックを入れる。そうしないと粗すぎて使い物にならない法線マップになる。
テクスチャの解像度
テクスチャの解像度が低いと角に筋が入る。
法線マップをファイルに保存する際のフォーマット
15% 圧縮した 16bit RGB png がおすすめだ。このフォーマットは 32bit Float と見た目がほとんど変わらずファイルサイズが小さい。
より高い精度で法線マップを保存したい場合は OpenEXR で保存する。
ハードエッジ問題
ローポリをスムーズシェーディングにすると、平面部分の法線がゆがむ。
ローポリをフラットシェーディングにすると、角の部分の法線が正しくベイクされない。
対策
- 平面部分にエッジループを入れて法線を保護し、ローポリをスムーズシェーディングにする。
- ローポリをスムーズシェーディングにしてベイクした法線と、ローポリをフラットシェーディングにしてベイクした法線とを画像処理ソフトで合成する。
外部リンク
ノードの設定
ベイク先の画像テクスチャノードが必要になる。アクティブな(最後に選択された)画像テクスチャノードに法線がベイクされるので画像テクスチャノードを選択しておく。
テクスチャの色空間を Non-Color にする。そうしないと法線マップにガンマがかかってしまう。
No active image found in material
No active image found in material エラーが出る場合は、ベイク元とベイク先との両方にベイクする画像ノードを作成しアクティブにしておく。
法線に模様ができる場合
法線に変な模様が出る場合は「レイの距離」を変更してみる。ハードエッジ問題も関係があるかもしれない。
ベイク時のサンプル数
サンプル数をあげても法線のベイクの品質にはほとんど影響しない。なのでレンダリングのサンプル数を1にすることで、ベイクを高速に実行できる。ただしベベルシェーダを使う場合は通常のレンダリングと同じだけのサンプルが必要になる。
カスタム法線をベイクする
タンジェント空間で自分自身の法線はベイクできない。自分自身のカスタム法線をベイクするには3つ方法がある。
メッシュを複製する方法
この方法はデータ転送モディフィア等の法線をタンジェント空間でベイクできる。手順は以下のようになる。
- メッシュを複製する
- ベイク先のメッシュのデータ転送モディフィア等をオフにする
- 「ベイク」の「選択物→アクティブ」にチェックを入れる
- データ転送モディフィア等をオフにしたメッシュに法線をベイクする
一度素の法線をテクスチャにベイクする方法
この方法はデータ転送モディフィア等の法線をタンジェント空間でベイクできる。
まずテクスチャにデータ転送モディフィア等をオフにした法線をオブジェクト空間でベイクする。データ転送モディフィア等を有効にして、以下のノードで自分でタンジェント空間の法線を計算してベイクする。ベイクするときは「放射」のベイクタイプを使う。
動作確認するときはデータ転送モディフィア等を無効にするのを忘れない。
タンジェント空間とオブジェクト空間
ボーンやラティス、シェイプキー等でメッシュを変形する場合はタンジェント空間を使う。メッシュの変形に法線が追従するのはタンジェント空間だけだからだ。オブジェクトレベルでの移動回転拡縮しかしないならオブジェクト空間も使える。
タンジェント空間の欠点はローポリ側の頂点法線(スムージング処理)の影響を受けることだ。オブジェクト空間はローポリ側の頂点法線を完全に無視するので、メッシュを変形させない小道具等はオブジェクト空間が使われることが多い。
タンジェント空間の利点と欠点
利点
- メッシュを変形させられる
- UV をミラーしても動作する
- ペイントソフトで編集できる
欠点
- ローポリ側の頂点法線(スムージング処理)の影響を受ける
オブジェクト空間の利点と欠点
利点
- ローポリ側の頂点法線を完全に無視するので高品質
欠点
- 頂点アニメーション(ボーン変形とシェイプキー)に法線が追従しない
- UV をミラーできない(自分でシェーダを書けば可能)
- ペイントソフトで編集するのが難しい
そもそも法線空間とは
法線空間とは法線ベクトルをどの姿勢(基底)で見るかを決めるものだ。オブジェクト空間はオブジェクトの原点の姿勢(基底)から見た法線がベイクされる。なので自分自身の法線もベイクできる。
それに対してタンジェント空間は、法線ベクトルから生成した姿勢(基底)から見る。タンジェント空間で自分自身の法線をベイクすると単色になるのは、基底ベクトルを法線ベクトルから生成するからだ。法線ベクトルから生成した姿勢(基底)から法線ベクトルを見ればすべて同じ値になるにきまっている。
タンジェント空間が別のメッシュを必要とするのはこれが理由だ。タンジェント空間で法線をベイクするには、基底を生成する法線ベクトル(ローポリ法線)とは異なる法線ベクトル(ハイポリ法線)が必要になる。
タンジェント空間は法線ベクトルから生成した基底から見た法線が記録されているので、頂点が変形して法線が変化してもそれに対応してベイクした法線が変化させられる。
タンジェント空間で自分自身の法線がベイクできないのはなぜか
法線をタンジェント空間に変換するにはふたつの法線が必要になる。ひとつはベイクしたいオブジェクト空間の法線。もうひとつはレンダリング時の法線だ。
たとえばデータ転送モディフィアで法線を転写しているとする。このとき、「ジオメトリ」ノードの法線ソケットでベイクしたい法線を取得できるが、レンダリング時の法線(データ転送モディフィア無効時の法線)は取得できない。自分自身の法線をタンジェント空間に変形するための情報が取得できないので、それはできない。
外部リンク
Tangent vs Object Space vs World Space
高さマップから法線マップを作成する
外部アプリで高さマップを作成する場合は、浮動小数点フォーマットで高さマップを作成保存できるアプリ(Krita, GIMP, Photoshop 等)で高さマップを作成する必要がある。また OpenEXR のような浮動小数点フォーマットで高さマップを保存しないと、法線マップにブロック状のバンドが発生する。
外部リンク
5 Must Know Tips With Bump/Normal Maps (Blender 2.8)
Blender Cyclesによるテクスチャベイクのノイズを消すにはKritaのG'MICフィルタのSmoothNL-Means]が最適なんじゃないかなという研究結果 [pic.twitter.com/dLFGdTpbyA
— 友 (@tomo_) December 6, 2020
ノーマルマップの解説と、ベイクが上手くいかなかったときの対処法など。(続く→) pic.twitter.com/Tt66r22VPA
— 夏森 轄(なつもり かつ) (@natsumori_katsu) January 8, 2022
ゲームにおける法線マップの作成
Modeling High-Low Poly Models for Next Gen Games
Normal Map Online
高さマップから法線マップを生成するオンラインアプリ。
そのほか
古典的なテクスチャのブラッシュアップ方法を書きます。
— 島田 翔護 (@simadach) April 18, 2020
葉っぱなどのテクスチャで細かい情報を乗せても引くと潰れやすいです。
そこで改善策としてBlurをかけて大きな陰影情報(低周波成分)
を抽出してプラスする事で改善できます。
葉っぱ以外にも応用可能です文字数 pic.twitter.com/PSsdp3kiHQ
アドオン
無料
Bystedts Blender Baker($0+)
法線だけでなくシェーディングやライティングもベイクできる。
有料
Bake Wrangler($15~$25)
ノードを使ってベイクの挙動を制御するアドオン。
Texture Splitter Ai($20)
アルベドテクスチャから法線マップや高さマップを生成するアドオン。
外部リンク
Computing Tangent Space Basis Vectors for an Arbitrary Mesh (Lengyel’s Method)
Chapter 22. Baking Normal Maps on the GPU