■はじめに
ノーマルマップを運用していて、オブジェクトにアサインする際YupをInvert(高さ方向を反転)させた経験がある方は多いと思います。
今回は、描画エンジンの種類によって異なるノーマルマップの高さ方向の違いについて言及したいと思います。
■ノーマルマップについて
まず、ノーマルマップについて簡単に説明します。
まずはコチラを御覧ください、
ノーマルマップを適応したキューブオブジェクトが確認できると思います。
ノーマルマップ(法線マップ)はRGの2チャンネル情報で凹凸情報を記録し、擬似的に凹凸の質感を表現するためのテクスチャマップです。
Bチャンネルが高さゼロを表しているので、全体的に青っぽい特徴的な見た目のテクスチャがノーマルマップです。
ノーマルマップはバンプマップの一種ですが、光の反射や影のつき方が擬似的に凹凸するだけなのでアウトラインにその形状が反映されず、映像分野よりもゲーム分野で活用されることが多いです。
プリレンダ(映像用CG)では、実際に凹凸させるディスプレイスメントマップや、擬似的にスムージング分割をするサブディビジョンサーフェスと組み合わせることで軽量でハイディティールなレンダリングを実現可能にします。
レンダリングが遅い時はサブディビジョン数を下げノーマルマップを用いることで、レンダリングコストの大幅な削減が期待できます。
ノーマルマップを含む特殊なテクスチャの種類については過去記事で解説しているので、そちらを一読していただければと思います
■GLとDirectxの違いについて
3Dのリアルタイム描画エンジンには現在、大まかに2種類あります。GLとDirectXによってノーマルマップの高さ情報が逆になるので、詳しく説明していきます。
①GLについて
GLとはOpenGLのことで、最も古くからある3D描画ライブラリです。様々なコンピュータ、モバイル機器で動作するのでWeb上で3Dを描画するWebGL等にも活用されています。
Webやモバイル向けに3Dコンテンツを開発するときにはこちらを使うと良いです。
②DirectXについて
DirectXはハイエンドゲーム分野に使われるMicrosoftのライブラリです。
グラフィックボードによって対応しているバージョンが異なり、最新版はDirectX12、
DirectX11頃から飛躍的に描画力が上がってきました。
パソコンゲームやコンシューマゲームの開発にはこちらを選択すると良いです。
■二種類のノーマルマップ
さて、ここに用意したのは先日、松尾芭蕉に歌われた松島の鹽竈神社で撮影し、Photoshopでシームレス加工した神聖なる敷石のタイルマップです。
この画像を元にノーマルマップを作成します。
良い感じに調整しました。
タイルマップに求められることは、10×10くらいにタイリングして引きで見た時に、つなぎ目やパターンを意識させない自然な繰り返し素材であることです。
そのためには色相差、特徴的な形状をなるべく減らすように画像処理をしましょう。
タイルマップの作成方法に関しては、Substanceでプロシージャルに作成する方法と、Photoshopで手動で制作する方法があります。
手動で作成した方が性格でクオリティが上がりますが、プロシージャルで作成したほうが楽なので、使い分けにコツがあります。
この辺りは需要があれば今後記事にするかもしれません。
…さて、話が脱線してしまいましたが、ここで早速GLとDirectXの違いを見てみましょう。
■GL
人の見た目で違和感のない凹凸方向のノーマルマップがGL用のノーマルマップです。
人の見た目には凹凸が反転しているように見えるのがDirectX用のノーマルマップです。
凹んでるように見えますね。
■まとめ
描画エンジンには2種類あり、ノーマルマップの高さ方向が異なるので、ノーマルマップの運用には高さ方向に注意する必要がある。
というお話でした。
■対策
自分が使っているエンジンとノーマルマップのアップ方向が逆な時の対処法です。
気の利いた描画エンジンであれば、ノーマルマップのスロットにInvertYやFlipY等の項目があると思います。
ない場合は自分でシェーダーに反転スイッチを組み込みましょう。
実際にやってないですが、理論的には255からRGの値を引き算すれば反転されるはずです。。。多分。間違っていたら指摘してください。
面倒な方、シェーダーを弄れない方は、元素材のノーマルマップのRGチャンネルを反転させてしまったほうが早いかもしれません。
ここまで読んでくれた方、ありがとうございます。皆様の素敵なテクスチャライフをお祈りしております。
END