BlenderとxNormalを用いた非破壊ノーマルベイク(UV一致)
Algo_Ayugonです。
共有する機会があったので、自分のノーマルベイクのワークフロー(Blender)について書いてみたいと思います。
こんな人向け!
- ノーマルマップを超綺麗にベイクしたい
- ケージとかブロッカー作んのめんどくさい。あと干渉部分切り離すのもめんどくさい(これに関しては結局他のベイクのために切り離す必要が出てくる…かも…)
- スカルプトとかやりとうない。ポリゴンモデリングが好きなのでポリゴンを生かしてベイクしたい
- 三度の飯より非破壊ワークフローが好き。非破壊ワークフローと結婚したい
- トポロジー整理には自信がある
こんな人はたぶん向いてない
スカルプト→リトポロジー→ノーマルベイク という感じのワークフローを既に確立している
- スカルプトワークフローでもハイポリとローポリでUV一致させる方法があれば適用できるので、あったら教えてください! ポリゴンモデリングが好きなのであんまりやんないと思うけど仕事とかで使うかも
この方法の威力
まずはこれを見てください
お分かりいただけただろうか
概要
- ローポリモデル作る(色々下処理有り)
- ローポリモデルにサブディビをつけてハイポリ化する(UV境界が変わらないオプションをつけること)
- xNormalでUV一致オプションを用いてベイクする
- Substance Painterにベイクテクスチャをインポートして煮るなり焼くなりする
やっていきましょう
1. ローポリモデル作成
普通にモデリングします。
「サブディビジョンサーフェスモディファイアー」をつけた時にも綺麗になるようにトポロジーに気をつけることが最重要です。なので、モデリング中もモディファイアーの表示/非表示を切り替えて確認しながらやっていきます。
- 「クリース辺」を使うとサポートエッジを使わなくてもエッジを尖らせることができます
- 所謂サポートエッジを使うとその分余計なポリゴン数が増えるのでゲームモデルとしては良くないです。一応、Setup Static Objectの機能を使うと指定した辺を削除して複製やエクスポートができたりしますが、手間は手間なのでやっぱり使いたくないです
- サブディビは曲面に三角面があると汚くなりがちなので、できるだけ四角面で作ります。ですが、ポリゴン数やワークフローの快適さとの兼ね合いもあるのである程度は許容します(クリース辺やシャープ辺で誤魔化せたり誤魔化せなかったり)。トポロジー弄りぢからが試される!
- 当たり前ですがUVは開きます。非破壊ワークフローなので後から修正効きますし、とりあえずベイクできる形に開くだけ開きます
- Nゴンは潰せ 特にサブディビつけてるのでNゴンあると本当に大変なことになります
2. ハイポリモデル作成
とは言ってもサブディビジョンサーフェスモディファイアーつけたままモデリングしてるので作成もクソも無く、もう既に作成されているはずです。ここが強いね!
なので設定周りについて捕捉します。
- 細分化の値は2~3くらいがいいでしょう。それ以上にしてもあんまり変わりません
- !重要! オプションを「シャープ」に変更します。これにより、ローポリとハイポリでUVが変わらなくなります。
- Blender3以上だと詳細設定を開いて、「UVスムーズ:コーナー、接点、凹面を維持」「境界スムーズ:コーナーを維持」が良いと思います。まだ試してませんが、精度が上がってるのかな?
- xNormalが四角面やNゴンがあるメッシュを拒否することがあるので、一応「三角化モディファイアー」もつけておきます。エクスポート時に三角化してもいいです。
ローポリとハイポリができたらエクスポートします。fbxでもobjでもいいですが、xNormal向けのやつはなんとなくobjで出してます。結局Substance PainterではIDマップ用に頂点カラー使いたいんでfbxで出すんですが…。
ローポリをエクスポートするときはサブディビを外し、ハイポリをエクスポートするときはサブディビをつけてやるだけです。簡単!(Substance Painterでのベイクを考慮すると、複製等をしてメッシュ名はハイポリは_high、ローポリは_lowと命名しておいた方が便利かも)
3. xNormalでベイク
参考:
xNormalをインストールしておきます。なんだこの奇天烈なGUIは…。でも優秀なんです。使ってるうちに愛着沸いてくるので大丈夫です。
ローポリとハイポリをセットします。この時、ローポリ側の設定で「Match UVs」にチェックを入れます。これでUV一致ベイクができます!!!!!!!
あとは普通に(?)xNormalでベイクするだけです。一応、いつもの設定
- Mesh Scaleは16(なんでもいいと思いますがたぶんローポリとハイポリで同じ値じゃないと駄目です。デフォルトでもいいのかもしれない…)
- Edge Padding:1Kなら4、2kなら8
- Antialiasing:ノーマルマップなら4、AO等なら1
- ノーマルベイクは爆速なので高くても大丈夫ですが、それ以外は時間かかるので
xNormalではノーマルマップ以外にも様々なマップを焼くことができます。Substance Painterで使うやつだとAmbient OcclusionやCurvatureをここで焼いてもいいですが、正直ノーマルマップ以外はSubstance Painterの方が綺麗な気もするので後回しでもいいですし、一応焼いておいて綺麗な方使うでもいいです。
4. Substance Painterにインポート
今は買い切りの2020版しか持ってないのでそれで書きますが、たぶんAdobe版でも変わらないと思います。たぶん。
「ファイル→Import resources」でxNormalで焼いたマップを指定してImportし、TEXTURE SET SETTINGSのMESH MAPS(Bake Mesh Mapsボタンがあるところ)のスロットにドラッグ&ドロップしてターンエンドです。
Substance Painterでベイクする時は、ノーマルマップは焼かないようにしましょう。また、他のマップを焼くときもハイポリモデルがあると綺麗になるので、High Definition Meshesのところに指定しておきます。By Mesh Nameで焼くといいよとか、IDマップ焼くときはハイポリは外した方がいいよとか色々ありますが今回の主役はSubstance Painterではないので割愛します。
そんな感じで非破壊を維持したまま超綺麗なノーマルを焼くことができます。さいこ~~~~~~~~~~!
それでは皆さんよきベイクライフを。
Algo_Ayugon