ゲーム3Dモデルの凹凸の正体。

はじめまして!3Dデザイナーの押見です。
基本的にキャラモデリングを担当していますが、
場合によって色々やってます。
よろしくお願いします!

私はゲーム仕様大好きモデラーなので、
今回は近年ゲームでよく使われているノーマルマップという
テクスチャのお話をしようかと思います。

ゲームのリアルタイム3Dモデルは基本ポリゴンで作成されており、
モデラーは日々データ容量制限と戦っています。
その中でも特に頂点は多くの情報を含み、増えれば増えるほどゲームの世界を圧迫しまくり、
モデラー的にも数十万に頂点が膨れ上がってしまうと管理が大変です。

そんな中で、服のしわや溝などの形状を全て頂点で表現すると
データが大変な事になってしまうので、
凹凸をテクスチャで表現できる「ノーマルマップ」が使われ始めました。
(「法線マップ」などと言ったりすることもありますが、
ここではノーマルマップで統一させていただきます)

ちょっと画像を見ましょう。
↓は、適当なキューブに対して面取りと十字に溝を入れたモデルです。
ワイヤーフレームを見ると、形状を頂点で表現しているのがわかりますね。
これをハイポリゴン(以下ハイポリ)とします。

次に、単純な正方形のキューブをローポリゴン(以下ローポリ)として、
↑のハイポリの面情報をノーマルマップとして焼き付けました。

ローポリモデルはポリゴンを割っていないのに、
フチにハイライトが走っていたり、十字に溝の印影が出ていて、
まるでポリゴンで溝や角の丸みを作っているように見えますね!
これが基本的なノーマルマップの効果です。

大体はハイポリモデルをハイポリ作成用のツールなどで作った後、
ゲーム用のローポリモデルにノーマルマップのテクスチャとして
焼き付けて作成しているかと思います。

この凸凹を表現しているノーマルマップのテクスチャは
以下のようになっています。


なぜこのような不思議な紫色になっているかというのは、
RGBチャンネルを見るとわかります。


↑は先程のテクスチャのRチャンネルです。
主にピクセルが左右のどちらを向いているかを担当しています。
白くなるほど横を向いていて、
黒くなるほど白と逆方向に横を向いている表現になります。


↑は先程のテクスチャのGチャンネルです。
主にピクセルが上下のどちらを向いているかを担当しています。
白くなるほど上を向いていて、黒くなるほど下を向いている表現になります。


↑は先程のテクスチャのBチャンネルです。
主に深さ情報を担当しています。
ここは他の二つとは違い、真っ白なところは何も深さがなく、
黒くなるほど深く凹んでいるという感じです。

結果として、R128 G128 B255は何も凸凹が無い状態と認識していただいて
大丈夫かと思います。
逆にRG128 B255以外の色になっている箇所は、何らかしら凸凹を表現してるってことですね!

この情報を把握していると、
例えばハイポリからローポリへのノーマルマップの焼きこみが上手くいかず、
おかしな陰影になってしまった箇所を修正するのに役立ちます。
極まると、修正だけでなくノーマルマップの手描き作成も可能になりますね!
(コストに見合わないのであまりやりませんが……)

なお、これはあくまで基本的な構成の話なので、
モノによって扱いはガラッと変わります。
特にBチャンネルの扱いはかなり幅がありますし、
ポリゴンメッシュ自体の法線情報、
特殊なシェーダーの実装方法などなどによって
仕様はさまざま、凸凹を表現する方法もさまざまです。

ゲームのキャラモデルはビジュアル畑でありつつ、
こういう数値的で論理的なところが面白いですよね!
普段何気なく見ているゲームキャラですが、
その何気ない表現も中身を見ると様々な処理を行っていたりします。

ゲームの3Dデザイナーを目指す方は、
ぜひぜひこのような仕組み周りにも興味を持っていただけたら
とっても嬉しいです!

ではでは。長くなりましたがこのへんで。
以上、おしみでした。


コメント投稿は締め切りました。