MRが楽しい

MRやVRについて学習したことを書き残す

Blenderで3Dモデルに法線マップを適応する

3Dモデリングの勉強枠です。
さて前回作成したhololensの3Dモデルですが、細分割曲面モディファイアを取っ払うと以下のような見た目になります。
f:id:bluebirdofoz:20170724015158j:plain

光の反射に注目するとよく分かりますが、カックカクですね。しかし、これでも500ポリゴンあるモデルなのです。
hololensアプリで利用する小物オブジェクトとしてはこれ以上ポリゴン数は増やしたくありません。

そこで今回は「法線マップ」を利用し、少ないポリゴン数で3Dモデルを滑らかに見せる方法をトライします。
今回、面法線の手動変更は行わないので、どちらかというと「バンプマップ」という表現が正しいかもしれません。
・Bump and Normal Maps
 https://wiki.blender.org/index.php/Doc:JA/2.6/Manual/Textures/Influence/Material/Bump_and_Normal
docs.unity3d.com
3d-memo.blog.jp

まずは法線マップ用の画像を作成します。
f:id:bluebirdofoz:20170724015343j:plain

次にベイク用に作成対象のオブジェクトを複製します。
このオブジェクトで高精細なポリゴンを作成し、法線マップの元とします。
f:id:bluebirdofoz:20170724015353j:plain
元のオブジェクトは邪魔にならないよう、非表示にしておきます。

多重解像度モディファイアを適用してポリゴンの解像度を上げます。
f:id:bluebirdofoz:20170724015407j:plain
今回は4万ポリゴンほどまであげてみました。

さて、法線マップを作成します。
以下の二つの操作が必要です。
・プロパティエディタの[シーン]タブから、ベイクの設定を行う。
  ベイクモード: ノーマル
  法線空間: タンジェント
  「選択 → アクティブ」チェック
・スカルプトしたオブジェクトを選択状態で、Shiftキーを押しながら、元のオブジェクトをクリックする。
f:id:bluebirdofoz:20170724015416j:plain
この状態で「ベイク」ボタンを押下します。
※ 参照記事では元のオブジェクトは非表示のままでも問題ないとありましたが、私の環境だと表示する必要がありました。

先ほど作成した画像に解像度をあげたオブジェクトを元にした法線マップが作成されますので保存します。
f:id:bluebirdofoz:20170724015426j:plain

作成した画像をノーマルマップとして元のオブジェクトの各マテリアルに設定すればOKです。
f:id:bluebirdofoz:20170724015440j:plain
画像は一方の設定のみキャプチャしていますが、例えば、このhololensオブジェクトだと本体部とグラス部は別々のマテリアルなので両方に反映が必要です。

レンダー画面で確認してみます。ポリゴン数500のままで滑らかな表現になりました。
f:id:bluebirdofoz:20170724015449j:plain
トップ画像の反射と比較すると、その効果がよく分かります。また前回、利用した以下の9千ポリゴンのモデルと比べても遜色ありません。
f:id:bluebirdofoz:20170724015513j:plain
パッと見にはポリゴン数に20倍近い差があるとは分からないでしょう。

むしろ本体部分のカーブなど箇所によっては法線マップを利用したものの方が滑らかにも見えます。
逆にグラス部分は法線マップの方はポリゴンの切れ目が見えます。透過部分の光の屈折設定はポリゴン基準だからと思われます。
この辺りの法線マップの適切な活用法については今後も学んでいきたいです。

さて、この手法はポリゴンとテクスチャが密接に対応しています。
このため、この方法を用いると細分割曲面モディファイアによるポリゴン数の調整が上手くできなくなります。
(法線マップを無効化する必要が出てきます)

万単位のポリゴンでも十分な描画が可能な高性能PCが普及した現状では、この法線マップでポリゴンの高精細化を計るよりもモディファイアでポリゴン数を増やした方が流用性の面では有効と思われます。

しかし、hololensのようなPCのパワーが足りない機器では利用価値のある技術です。
hololensで高精細な3Dグラフィックを売りにしたアプリを作成する際には非常に役立つでしょう。今後も活用していきます。