Rhinocerosのモデルデータから法線マップを作る

WebGLでは様々なマッピング技法を用いますが、今回は法線マップについて取り上げたいと思います。

Rhinocerosでは法線という言葉は皆さん馴染みがあると思うのですが、法線マップと呼ばれるものはありませんので、ご存知ない方もいらっしゃるでしょう。法線マップとはバンプマップと同じくモデルの表面を凸凹に見せる表現をするもので、ジオメトリの法線が指す方向をRGBカラーで示すマッピングです。ノーマルマップと呼ばれることもあります。

WebGLのようなリアルタイムレンダリングでは威力を発揮し、主にゲームでよく使用されています。Rhinocerosは工業系CADアプリケーションなので、CG系アプリケーションのような機能は無く、法線マップを作るには別のアプリケーションを使う必要があります。

今回はxNoramlという無料アプリを利用して、ロゴマークを刻印のように表現出来る法線マップを作ります。

Rhinocerosでモデルデータを作る

まずはロゴマークをRhinocerosでモデルデータにしていきます。

maddercreateのロゴマーク

モデルデータは正方形で作ることを推奨します。これは、テクスチャなどのマッピング画像は一般的に縦横比1:1で作られており、512px・1024px・2048pxのような2のべき乗のサイズで運用するのが理想的でレンダリングのパフォーマンスが一番良いからです。

Rhinocerosの画面1

参考までにこのモデルの作り方ですが、今回はパスラインのデータがあってのでそれを使っています。

まずパスライン曲線を内側方向へOffset

出来た曲線をz方向マイナス0.2移動。

それぞれの曲線上を結ぶ断面線を複数作成します。Osnap近接点・垂直点をチェックしていると楽です。

Sweep2でサーフェスを作る。

PlanarSrfで底辺などを作る。

Planeなどで正方形サーフェスを作る。

TrimBooleanDifferenceなどを使って正方形サーフェスとロゴマークを一つのポリサーフェスにする。

Rhinocerosの画面2

次にPlaneなどで同じ大きさの平面サーフェスを作ります。Z座標0で揃えて下さい。

Rhinocerosの画面3

この2つの高低差を利用して凹凸を再現するための法線マップを作ります。今回はマイナス0.2だけロゴマークが彫り下がっているように見せますが、プラス0.2とすると逆に浮き上がるといった具合です。

メッシュ化しobjファイルとしてExportします。ロゴマーク用のポリサーフェスは出来るだけ高精細なメッシュに、平面サーフェスは少ないメッシュで構いません。大抵の場合はポリゴンメッシュオプション簡易設定でそれぞれ最大・最小で書き出せば良いでしょう。

Rhinocerosの画面4
ロゴマーク用データは最大メッシュ
Rhinocerosの画面5
平面サーフェスは最小メッシュ

Rhinocerosでのメッシュデータが完成しました。次にxNormalを使って法線マップを作っていきます。

xNormalで法線マップを作る

xNormalこちらからダウンロードします。

インストール後、起動すると何とも言えない独特のデザインのウィンドウが立ち上がります。

xNormalの画面1

デフォルトは英語表記なので日本語化を行います。左下のコンセントマークをクリックで設定を開きます。

xNormalの画面2

Languageから日本語を選択します。

次にハイポリメッシュ管理から高精細でメッシュ化したロゴマーク用のobjデータを読み込みます。右クリックからメッシュの追加を選んで読み込みましょう、ファイルをxNormal上にドラッグアンドドロップしても構いません。

xNormalの画面3

今度はローポリメッシュ管理から平面サーフェスのobjファイルを同じ要領で読み込みます。

xNormalの画面4

焼き込み設定を行います。

出力ファイルで画像の保存先を指定します。

出力テクスチャーサイズ512×512から2048×2048の範囲くらいで選びます。数値が大きいと綺麗に描画されますが、その分GPUに負荷が掛かるので低スペックデバイスではパフォーマンスが低下してしまいます。用途に合わせて不必要に高画素にしないようにしましょう。

生成するテクスチャからノーマルマップをチェックします。

アンチエイリアシングにすることが多いです。

細かい設定は今回は省略させて頂きます。またの機会に。

xNormalの画面5

設定が終わったら右下のマップの生成をクリックして法線マップを作ります。レンダリング作業が始まります。

xNormalの画面6
レンダリング作業中
xNormalの画面6
レンダリング完了

レンダリングが完了したら保存先に法線マップが出力されます。これで法線マップの完成です。

法線マップを使う理由

WebGLで法線マップを使ってリアルタイムレンダリングしたものが下の画像です。

法線マップを使った指輪

手前がプレーンな表面の甲丸リングに法線マップを適用したもの、奥がロゴマークを含めモデルデータに作り込んだものです。一見すると同じものに見えますが、実は大きな差があり、それこそが法線マップなどのマッピングテクスチャを用いる理由です。2つのモデルのファイルサイズを比較してみます。

甲丸リングに法線マップを適用したものロゴマークを含めモデルに作り込んだもの
ローポリゴンのデータロゴの法線マップハイポリゴンのデータ
349KB(obj)・84KB(jpg)
計 433KB
3.35MB(obj)

このようにモデルデータでロゴマークまで作り込むと肥大化してしまうファイルサイズを、法線マップを使うことでかなり抑えることが出来ているのが分かると思います。

WebGLでは出来る限り少ないメッシュでモデルデータを作らないとレンダリングパフォーマンスが低下するだけではなく、多くのデータ通信量をユーザーに負担させることになります。ブラウザで気軽にモデルデータを見て楽しんでもらうためには、法線マップに限らず様々な工夫をする必要があると言えます。