こんにちは。しゅみぶろぐです。
この記事ではノーマルマップ(法線マップ)という技術を使って、2D画像・イラストを疑似的に3Dにする方法をお伝えします。
主にblender(https://www.blender.org/)を利用した作成方法になります。
この記事で分かること
・ノーマルマップ(法線マップ)とは?
・ノーマルマップの必要性と弱み
・他サイトを使った自動生成
・blenderを用いた手動での作り方
・blenderで画像にノーマルマップを適用する方法
ノーマルマップとは?
簡単に言うとノーマルマップ(法線マップ)とは、
2D画像に疑似的な凹凸を表現するための画像
です。

元の画像とノーマルマップを合成させることでまるで3Dのような画像を生み出します。
今回はこのノーマルマップの作成していきます!!
紫や青っぽい色の違いで凹凸を表現しているとのことです。難しい…。

かといって本当に立体というわけではなく、斜めから見ると平ぺったいのがわかります。
なぜ必要なのか
ノーマルマップは、ポリゴンを増やさずに表面の凹凸を表現するための技術。
本来であれば細かい凹凸をすべてモデル化する必要がありますが、それでは処理負荷が大きくなってしまいます。そこでノーマルマップを使い、光の当たり方だけを変えることで、実際には平面でも凸凹しているように見せることができます。
・ポリゴン数を削減できる
・ゲームやCGの動作が軽くなる
・高品質な見た目を維持できる
よって、「形状はシンプルにして、見た目だけ詳細にする」という考え方が重要になります。
ノーマルマップの弱み
大きな凹凸表現には向かない
ノーマルマップは見た目だけの凹凸であるため、横から見ると輪郭は平面のままです。
シルエットなどは変わりません。
先ほどの画像からも見て取れますね。
近距離では粗が見えることも
大きく寄った場合、実際の形状ではないため違和感が出ることがあります。
よって実際のゲームではノーマルマップ以外の技術も利用されています。
ノーマルマップの作り方
作り方として自動生成する場合と手動生成する場合で合計3通り紹介します。
どちらも長所・短所が大きく、用途に合わせて使い分けてください。
2D画像、ノーマルマップの画像は1:1のアスペクト比であることが望ましいです!!(操作が楽になるため)
自動生成する
・速い。すぐにを作成できる!
・シンプルに楽
思い通りの立体感にならないことが多い。
とにかく楽なのはこの2つの方法です。
短所が痛いですが(´;ω;`)
他サイトで生成
以下のサイトから直接飛べます↓↓↓
画像をアップロードするだけで自動でノーマルマップを生成してくれます。便利。
AI生成
こちらもアップロードのみで作成できます。
割と形になってる…?って感じでした。
しかし画像がずれていたりと、あとから微調整の作業が必要になってくるので他サイトでの生成のほうが確実だと思われます。(課金していればこちらのほうがいいかも)
blenderを用いて、手動で作成する
・自分の好きなような立体感を出せる
・blenderを使うため、操作を覚える必要がある
・時間がかかる
・理想の形にならないこともある(複雑な場合)
この記事では、軽く工程のみ紹介します。
細かいやり方は別記事を参考にしてください(後日作成予定です)。
2D画像を立体化する

めちゃくちゃめんどくさいです(複雑なイラストだと特に)。
画像のように用意した2D画像をメッシュ化して、ひとつひとつに立体感をつけていきます。
頂点や面を一括選択してある程度時間は短縮できますが、細かいところは地道な作業になってしまいます。

ベイク(ノーマルマップの作成)
ベイクは、3Dモデルの凹凸情報をテクスチャとして保存する処理です。
ここでいう凹凸情報がノーマルマップにあたりますね。
ベイクの作業を行い、ノーマルマップ作成完了となります。
blenderで2D画像とノーマルマップを合成
2D画像とそのノーマルマップが用意できたら、実際に合成する作業に入ります。
(blender内の単語は、「英語(日本語)」で表しています)
2D画像をblenderにインポートする
blenderを開いたら、初期状態で配置されている立方体は不要なので[Delete]で消してください。

[Shift + A] > 「Mesh(メッシュ)」>「Plane(平面)」
から、画像を張り付けるための板(紙?)を追加します。

次に画面下部の時計のようなマークをクリックし、「Shader Editor(シェーダーエディター)」を選択します。(エリア上部をドラッグするとエリアの範囲を拡大できます)

平面を選択した状態で、上部の「+ New( + 新規)」を選択します。

[Shift + A]>「Texture(テクスチャ)」>「Image Texture(画像テクスチャ)」
よりノードを生成します。

「Open(選択)」より2D画像を選択し、「Open Image(画像を開く)」でインポートしましょう。
平面に画像を表示させる
早速画像を反映させていきます。

「Color(カラー)」から「Base Color(ベースカラー)」へノードをつなげます。
ノードのつなげ方
つなげたい点から点へとマウスポインターをドラッグするとノードをつなげることができます。
透明部分がある方は、「Alpha(アルファ)」同士のノードをつなげると反映されます。
画面右上よりこのアイコンを選択することで実際に画像が平面に表示されたことがわかるはずです。


ノーマルマップを合成する
先ほどと同じように、
[Shift + A]>「Texture(テクスチャ)」>「Image Texture(画像テクスチャ)」
「Open(選択)」より生成したノーマルマップを選択し、「Open Image(画像を開く)」でインポートします。
このとき、ノーマルマップ側の色空間を「非カラー」に変更してください。
(これは癖づけるとよいです)

次に「Color(カラー)」と「Normal(ノーマル)」ノードをつなげます。

変換ノードを追加します。
[Shift + A] >「Displacement(ディスプレイスメント)」>「Normal Map(ノーマルマップ)」
ノーマルマップを生成して、下の画像のようにノードをつなぎます。

カラー → ノーマル への変換は直接はできないため、変換処理してくれるノードを追加しました。
これで反映は完了です!!お疲れさまでした。
確認
本当に凹凸が再現されたのか確認してみましょう。ここ楽しいです^^
3D画面のどこかに下の画像のようにライトがあるはずです。

光源の位置を変えて陰影の変化を楽しんでみましょう。
「ライトを選択」>[G + X or Y or Z]でそれぞれx、y、z軸に平行にライトを移動させることができます。

ライトを選択した状態で、画面右側の電球マークを選択すると光源の種類、強さなどの設定を変えることができます。
左が3Dモデルで、右がノーマルマップを利用したものです。
ある程度の凹凸は再現できていますが、完全再現とはいかないようですね( ノД`)

どちらがノーマルマップによるものなのか、並べると一目瞭然です。
まとめ
ノーマルマップとは、
2D画像に疑似的な凹凸を表現するための画像
であり、その作成方法は主に3つあります。
・他サイトでの自動生成
・AIによる生成
・blenderでの手動生成
自動生成の二つは速さをとった効率重視、blenderでの手動生成は時間をかけた確実な3D化でした。
それぞれうまく使い分けてください。(両極端すぎて使い分け難しいですが…)
やってておもいましたが、2D画像を3D化するのってなんか魅力的ですよね^^
こんな感じでほかの方法も模索中ですので、ぜひ皆さんアドバイスお待ちしています!!!
それではここまで見ていただきありがとうございました!

コメント