ポリゴン数の少ないモデルでもテクスチャで簡単に凹凸を表現できるノーマルマップ(法線マップ)は、細かいディテールをモデリングしなくてもモデルの情報量を上げてくれるので非常に便利ですよね。
ノーマルマップを作成する方法は色々ありますが、一般的なのがローモデルとハイモデルを用意してベイクして作成する方法です。
そこで今回はMAYAの機能のひとつである「Transfer Maps」でハイモデルのディテールをローモデルにベイクしてノーマルマップを作成する方法について紹介します。
MAYAにデフォルトで用意されている機能だけでノーマルマップを作成するので、プラグインなどを入れる必要が無くお手軽なのでオススメです。
Photoshopでノーマルマップを作成する
Photoshopでも画像からノーマルマップを作成することが可能です。質感のみの表現の場合はこちらの方法が楽だと思います。
-
写真からカンタンにノーマルマップを作成できるフィルター【Photoshop】
少ないポリゴン数でもカンタンに立体感を表現できるノーマルマップ(法線マップ)ですが、Substance PainterなどのPBRペイントソフトを使わなくてもPhotoshopで作成することができます ...
続きを見る
【MAYA】ハイモデルからノーマルマップを作成する方法
まずは下準備をしていきます。
ベイク先として使うローモデルとベイク元として使うハイモデルを用意しておきます。
今回使ったクールなグレネードモデルはこちらからお借りしました。
ローモデルをUV展開しておく
ハイモデルからノーマルマップをベイクするローモデルのUVを展開しておきます。
ローモデルの方のUVにノーマルマップが作成されるので、綺麗に展開しておくことをオススメします。
ハイモデルはベイク先では無いのでUVは展開しなくてもOKです。
今回は上の画像の様にハイモデルのUVが破綻してしまいましたが、マップ画像の作成には問題ありません。
(とはいえUVは綺麗にしておく方が好ましいとは思いますが......)
ローモデルとハイモデルを同じ位置に配置しておく
ローモデルのUVを展開が出来たらふたつのモデルを同じ場所に配置しておきます。
Transfer Mapsでベイク
モデルの準備ができたらTransferMapsを使ってノーマル情報をベイクしていきます。
セットメニューをRenderingに変更します。
メニューバーがレンダリング用に切り替わったら「Transfer Maps」を開きます。
TargetとSourceを追加
Transfer Mapsでターゲットメッシュとソースメッシュをそれぞれ追加します。
ここではローモデルがベイク先(ノーマルマップを適用したいオブジェクト)で、ハイモデルがベイク元(ノーマルマップを作成したいオブジェクト)です。
ローモデルを選択した状態でTarget Meshes欄の「Add Selected」をクリックして追加。
ハイモデルを選択した状態でSource Meshes欄の「Add Selected」をクリックして追加。
これでベイク先とベイク元が決定されます。
ノーマルマップを選択してベイク
TargetとSourceを決定したら、Output Maps欄でNormalをクリックしてノーマルマップ出力に設定します。
出力先のパスと画像形式を選択します。
ベイクして作成したノーマルマップをローモデルに接続したい場合は「Connect Output Maps」にチェックをいれます。
出力するマップの解像度などを決定(ここでは2048px)。
Transfer inをWorld Spaceに設定。
他はデフォルト設定のままでOKだと思いますが、作成したいマップに沿って適宜設定してみてください。
細かい設定項目については「Autodesk Knowledge Network」で紹介されているので、気になる方向けにリンクを貼っておきます。
設定に問題が無ければ「Bake」をクリックしてノーマルマップを出力します。
こんな感じで設定したパスにノーマルマップ画像が作成されます。
Connect Output Mapsにチェックを入れていた場合は、ベイク先のローモデルの方に接続されていると思います。
画像はそれぞれ同じローモデルで、ノーマルマップ無しとノーマルマップ有りの状態です。
ポリゴン数は同じですが、ノーマルマップ有りのモデルは法線に沿ったディテールが表現されています。
ハイモデルの形状がローモデルよりも大きい時のベイク方法
ローモデルとハイモデルの形状がほとんど同じ場合は綺麗にベイクできることがほとんどですが、ノーマルマップの一部が綺麗にベイクできない場合もあります。
ハイモデルがローモデルよりも大きかったりする場合はこういうことがよく起こります。
ローモデルからハイモデル化する際にディテールを追加したりすると、ローモデルよりもパーツが大きくなってはみ出してしまうのが原因です。
そういった場合のベイク方法も追加で紹介します。
ベイクする際にソース元として使用したハイモデルですが、ローモデルよりもディテールが追加されているので、ピン部分などが少し飛び出ています。
ローモデルとハイモデルを重ねて見てみると部分的にパーツがはみ出ているのがわかります。
ローモデルからはみ出てしまった部分はソースに含まれなくなってしまうので、ベイクする際にこの部分だけうまくノーマルマップが作成されません。
Envelopeを設定してベイク
ハイモデルがローモデルよりも大きい場合には、Transfer Mapsでベイク先のローモデル(Target Meshes)のDisplayモードを「Envelope」に変更します。
Search envelope(%)の数値を変更すると、モデルを包むようにピンクのEnvelope(=封筒)が表示されます。
Envelopeで包んだ部分までをソース元として判断してくれるのでローモデルからハイモデルがはみ出してしまった部分が包まれるように設定していきます。
このモデルでは大体0.6くらいに設定するとハイモデルにピッタリ合ったEnvelopeになりました。
Envelopeを部分的に調整する
Envelopeは数値入力で全体の比率を上げても良いですが、部分的に調整することも可能です。
Face、Edge、Vertexのコンポーネント選択が可能になっているので、適宜切り替えて部分的に移動して微調整します。
ある程度Envelopeがハイモデルに収まったらOKです。
再度各種設定をしてBakeします。
Envelopeでノーマルマップをベイク
Envelopeでハイモデルを包んでノーマルマップをベイクして出力▶ローモデルに接続した状態です。
ハイモデルのパーツが飛び出てしまった部分も綺麗にベイクされてノーマルマップが作成されました。
まとめ:Transfer Mapsで簡単にノーマルマップをベイク
最後にノーマルマップ無しのローモデルを、ノーマルマップ有りのハイモデルをレンダリングしてみました。
上の画像はノーマルマップ無しのモデルですが、若干ディテール表現が弱いですね。
こちらはノーマルマップ有りでレンダリングしたローモデルです。
ハイモデルでベイクされたノーマルマップによって細かい凹凸表現が追加されているので、よりディテールがハッキリわかるようになりました。
ここではノーマルのみですが、ベースカラーマップなどど合わせればデータ容量を抑えつつ、より説得力のある表現が可能になります。
ハイモデルからローモデルにベイクしてノーマルマップを作成する手順をまとめると以下です。
Transfer Mapsでノーマルマップをベイク
- ローモデルとハイモデルを用意
- ローモデルをUV展開
- ローモデルとハイモデルを同じ位置に配置
- Transfer MapsでTarget(ローモデル)とSource(ハイモデル)を追加
- ハイモデルがローモデルよりも大きい場合はEnvelopeで調整
- OutputMapsでNormalを選択
- 各種出力設定
- Bake
準備に少々時間がかかるのと手順も若干多いので慣れるまでは面倒かもしれませんが、外部のソフトなどを使わずにMAYAだけでノーマルマップ作成が完結するので、ソフト間の移動が無く便利な方法になっています。
ハイモデルのディテールのノーマルマップをローモデルで使いたい方はぜひ参考にしてみてください。