【Blender】Cyclesでベイク→ノーマルマップ作成→ノーマルマップ利用【覚書】

20151105170515

BlenderのCyclesでノーマルマップをベイクで作成しようとして、上手い具合にならなかった件。ピコーン!と思いついて試してみたら上手く行ったので、覚書として残しておきます。出来てしまえば単純なことなのに何故、あのとき出来ないのか……(´;ω;`)ブワッ

ちなみにタイトル通り、記事の内容はCyclesでベイク→ノーマルマップ作成→ノーマルマップ利用ですが、厳密に言えば『オブジェクトコピー→Cyclesで多重解像度→スカルプト編集→ベイク&ノーマルマップ作成→ノードでノーマルマップ利用』という流れ。

文字にすると色々としなければならないことがあるように感じるものの、一度成功させてしまえば、それほど気にならないはず。これで服の皺や様々な凹凸部分が頂点数を増やさずに作れるようになるよ! やったね!! \(^o^)/

 

また、ベイクの利用には2つのオブジェクトとそれぞれが画像テクスチャを利用できる状態になっていることが必要。ベイクにまつわる難しさはたぶんこの辺。

それから似たような機能であるバンプマッピングとの『作成手順の違い』としては『バンプ→画像をモノクロに塗り分ける(画像ペイント)』、『ノーマルマップ→2つのオブジェクトの形状の差をベイクで画像にする(モデリング)』といった感じ。

作業の流れ

『準備段階』

  1. 対象となるオブジェクトAの作成。(皺や凹凸などのノーマルマップで表現したい細かな部分は不要)
  2. モデリングが終わったら、編集モード上でUキーを押して、UVマップを作成する。※
  3. オブジェクトAを複製してオブジェクトBを作成し、別レイヤー等に移動させておく。
  4. オブジェクトAに多重解像度モディファイアを追加し、細分化でちょっと細かすぎるかな、というぐらいの値にする。※※
  5. オブジェクトAを選択した状態でスカルプトモードに入り、念入りに皺や凹凸などを作り込む。
  6. UVエディタで新規作成から空の画像を作る。
  7. オブジェクトAとオブジェクトBのマテリアル設定(あるいはノードエディタ)で、ディフューズ等に先程の空の画像を使ったテクスチャ画像を利用するような設定にする。※※※

 

※ 必要に応じてシームをつけておくと吉。またUVマップは頂点が重ならないようなタイプのものにする。
※※ スカルプトモードで細かな編集をするためにはそれなりの細分化度合いが必要。細分化が足りないと、ノーマルマップが荒くなる。
※※※ テクスチャ画像を使用するときの通常の設定方法で可。唯一の違いは06で作成した空の画像を使うように設定すること。

 

『ベイク&ノーマルマップ作成』

  1. オブジェクトA → オブジェクトBの順番で、各オブジェクトを選択する。
  2. プロパティ → レンダーの項目の下方にある『ベイク』の項目のベイクタイプを『ノーマル』にして、カメラiconのある『ベイク』の項目をクリックする。
  3. ノーマルマップ作成処理が開始され、UVエディタ上にノーマルマップが作成されるので、作成が完了したら画像を保存するか、PNGとしてパックする

 

 

『後始末とノーマルマップの利用』

  1. オブジェクトAは不要なので削除するか、ベイク&ノーマルマップの修正用として別レイヤーに移動させる。
  2. オブジェクトBを選択した状態でノードエディタに移動する。
  3. テクスチャ座標、画像テクスチャ、ノーマルマップを追加する。
  4. テクスチャ座標(UV)→画像テクスチャ(ベクトル)を接続する。
  5. 画像テクスチャ(カラー)→ノーマルマップ(カラー)を接続する。
  6. ノーマルマップ(ノーマル)→ディフューズ等(ノーマル)を接続する
  7. この状態でオブジェクトBをレンダリングすると、作成したノーマルマップに応じた皺や凹凸が表現される。※

 

※ オブジェクトBは別レイヤーに移動させているので、光源やカメラの移動し忘れに注意。また、オブジェクトAはレンダリング時には使わないので、それも忘れずに

サンプル(上記の作業順に……)

20151105160851

平面のメッシュを追加して編集モードに入り、細分化とUVマップを作成したところ。正方形の外辺が赤いのはCtrl+Eでエッジを効かせたため。また、マテリアル設定で適当にディフューズと光沢をミックスシェーダで追加。

エッジの必要性はオブジェクトの形次第。追加したメッシュが平面なのでエッジを効かせておかないと、この後に追加する多重解像度モディファイアで『細分化』したときに外辺が丸まってしまうから。

 

20151105161344

オブジェクトモードに戻ってオブジェクトAを複製し、作成したオブジェクトBを別のレイヤーに移動させたところ。

また、その後にオブジェクトAに多重解像度モディファイアを追加して『細分化』を6回実行(細分化度合いは7)。

 

20151105161839

オブジェクトAを選択した状態でスカルプトモードに入り、適当に編集したところ。膨らんでいる部分もあれば、凹んでいる部分もある。

 

本来はここでオブジェクトに合わせた編集をする。スカルプトモードでの編集の出来がノーマルマップの出来に反映されるので、記事上では手抜きだけど、手抜きできない、一番時間を費やす部分。

例:衣服の皺、凹凸模様、目尻の皺など。

 

20151105162547

オブジェクトモードに戻り、UVエディタで空の新規画像を作って、マテリアル設定でその画像を利用するように設定したところ。

 

画像をPNGでパックするを選択しておいたほうがいいかも……。

 

選択→アクティブにチェックなし 選択→アクティブにチェックあり
20151105163012 20151105162921
normalmap0abc normalmap1abc

オブジェクトA(スカルプト編集して凹凸を作ったもの)→オブジェクトB(複製して別レイヤーに移動させたもの)の順番でオブジェクトを選択し、プロパティ→レンダーに移動。ベイクの項目の『ベイクタイプ』を『ノーマル』にしてベイクを行ったもの。

左上がUVエディタ。表示させておくと、ノーマルマップの作成が見える。

 

ちなみに作成されたノーマルマップの左右の違いはベイクの項目のひとつである『選択→アクティブ』にチェックを入れたかいれなかったか

『選択→アクティブ』にチェックを入れた場合、オブジェクトAのオブジェクトBに隠されている部分がノーマルマップに反映されないみたい。同位置については反映される様子。

つまり、凹凸のあるオブジェクトA、平坦なオブジェクトBでベイクした結果、オブジェクトAの凹部分が透明化されている。ただ……

20151105171150

オブジェクトBを下に移動させてベイクしても、一部が透明なままなので、厳密に言えば見えている部分(重なり合っていない部分)をノーマルマップにする機能なのかもしれない。

( -人-).。oO(・・・・他の機能と合わせて要検証といった感じ・・)

 

20151105164626

オブジェクトBを選択して、ノードエディタにて作成したノーマルマップを利用する設定をした場面。ディフューズ等のカラー部分に接続されていた画像テクスチャは削除済み。

テクスチャ座標→テクスチャ画像→ノーマルマップ→ディフューズ等の何をどこに繋ぐのかが重要なので、わからない人は画像をクリックして拡大された画像で確認してくださいな。

 

ちなみにこの状態で簡易レンダリングすると……あれ?真っ黒だ???となるけど、オブジェクトBを移動させたレイヤーに光源になるランプがないためなので、簡易レンダリングして出来を確かめるときは光源を忘れずに……。

また、オブジェクトAを一緒にレンダリングしてしまわないように……

 

20151105170515 20151105165337

オブジェクトBをそれぞれのノーマルマップで簡易レンダリングしたところ。ノーマルマップの画像に沿った凹凸が平面に表現されている。

ノーマルマップに透明部分があった右側は簡易レンダリングしたオブジェクトの該当部分が透明化されている。マスク的な使い方をするときに使う機能なのかも……。

 

20151105174051

透明化された部分のないノーマルマップを使用したものを、ちょっと斜めから見た状態。画面右上の側面図では、オブジェクト自体は平面のままなのがわかる。

また、オブジェクトの頂点数も、このサンプルの一番上にある状態のものから変化していない(16個のまま)なので負荷軽減にもなっている。

 

注意点

かなり有能そうなノーマルマップとはいえども、万能というわけではないので注意が必要。

20151105174721

角度がなくなってくると、立体感も失われる。あくまでも立体的に見えるように今ある面に影を描く機能であって、立体的にする機能ではないということ。

 

 

 

関連記事
スポンサーサイト

1 Comments

(´・д・`)  

選択→アクティブにチェックありの場合

記事を投稿後に何となく気づいたのだけど、これ(透明な部分のあるノーマルマップ)、ベイクしたもう一方のオブジェクトも使用したい場合の選択肢だ……たぶん、きっと。

2つの異なる、そして重なり合うオブジェクトを両方使う場合、オブジェクトA→Bの選択順で『選択→アクティブ』にチェックを入れてノーマルマップを作成すると、オブジェクトAの見えている部分だけのノーマルマップが完成。その後、同様にオブジェクトB→Aに変更してもう一方のオブジェクト用のノーマルマップも作成。

2つのオブジェクトにそれぞれ対応するノーマルマップを適用すると、結果として2つのオブジェクトの見えている部分だけの完全なノーマルマップになる。

2015/11/11 (Wed) 21:20 | REPLY |   

Post a comment