法線の錬金術

この記事は、Unityゲーム開発者ギルド Advent Calendar 2021 の12/6の記事です。

「ポリゴンハラスメント」(略してポリハラ)という言葉を聞いたことがあるでしょうか?
恐らくほとんどの人が聞いたことがない言葉だと思います。なぜなら「ポリハラ」は筆者が勝手に使っている造語だからです。
「ポリハラ」とは、デザイナー達が往々にしてスマホゲーム案件で受けるハラスメントであり、「そんなんじゃゲーム動かないから!ポリゴンもっと減らせよ!」と脅されるハラスメントです。
ちなみに同様にデザイナーに降りかかる、テクスチャーの解像度を下げられる「テクハラ」、コライダーの数を制限される「コラハラ」も恐るべきハラスメントなのです。
そんな愚痴はさておき、一般的にスマホゲームでは全部で10万ポリゴン以内に収めた方が良いと言われてるらしいです(筆者が調べた限りでは)。つよつよゲーミングスマホやPCを相手にするならもっとポリゴンを使えるはずですが、無名のインディーゲーム開発者においては、なるべくユーザーの母数を減らしたくないので、古いスマホでも動く軽いゲームを作ることが重要であると思います。(しらんけど)
前置きが長くなってしまいましたが、このように色々と制限され、挫折しながら、それでも3Dモデルのクオリティーを上げたい、美しいグラフィックのゲームを作りたいという古のデザイナーたちが編み出した技法(なのかは知らないですが)が法線の錬金術(筆者が勝手に作った造語)です。

まず法線とは3Dモデルの面や頂点に対して伸びる線の事です。(詳しいことはググってください。)
この線がカメラに対してどの方向を向いてるかによって、モデルの見え方が変わります。
この法線を巧みに操ることで、実際の3Dモデルには存在しない見せかけの細かな造形を作りだしたり、ポリゴンが少なすぎてガビガビになってしまったモデルを滑らかな見た目にしたり、法線の錬金術を使えば3Dモデルの見た目をぐっと良くできるのです。

筆者も法線の錬金術にはお世話になりっぱなしで、現在開発中の宇宙彷徨紀バッカニーアでも沢山使っている技術です。
そんな法線の錬金術の中から今回は、筆者が使っている二例をご紹介したいと思います。

目次
1、バンプマッピング錬金
2、法線転写錬金

1、バンプマッピング錬金
まず法線といえば、ノーマルマップを思い起こす方が多いのではないでしょうか?
3Dモデルの法線がどこを向いてるのか、XYZのベクトル情報を、色情報のRGBに変換し、モデルの展開図であるUVマップ上に記した地図がノーマルマップです。

画像1

このノーマルマップをうまく利用すればローポリモデルに見せかけの細かい凹凸を付けることができます。あくまでも見せかけなので見る方向によってはおかしく見えたり、凹凸に見えなかったりしますが、うまくいけばクオリティアップ間違いなしです。
例えば木の樹皮の模様や石壁の表面のブツブツなんかをすべてポリゴンで表現しようとしたら卒倒してしまうレベルですが、ノーマルマップで表現すれば綺麗に凹凸を表現することができます。

モデルは筆者作のロボットの、ノーマルマップありとなしの画像です。

画像2

このようなノーマルマップを作るにはどのような手順が必要かというと、主に2種類方法があるようです。一つ目はハイポリゴンモデルを使って実際に使用するローポリゴンモデルにベイクする方法です。
こちらの方法は、3Dモデルのスカルプトツール(Zブラシなど)などを使って作ったハイポリゴンを利用するケースが多いようです。
もう一つの方法は、3Dペイントツール(substance painterや3D coatなど)やペイントソフトなどを使ってノーマルマップを直接描く方法です。
筆者は両方のやり方を試してみましたが、現在はsubstance painterでノーマルマップを直接描く方法で作っています。上記のロボットもこの方法で作りました。

ですが、今回は無料の複合グラフィックツールBlender を使ってハイポリをローポリにベイクする方法をご紹介してみたいと思います。

用意するものはハイポリモデルとローポリモデルです。
ハイポリには以下のようなモデルを用意しました。こちらは約82万ポリゴンのモデルです。卒倒しちゃうレベルです。筆者のよわよわPCではめちゃ重です。

画像3

こちらを以下の12ポリゴンのローポリモデルにベイクしていきます。

画像4

ノーマルマップを作る際のポイントは、凹凸を垂直にしないで斜めにすることです。ベクトル情報なので、垂直にしてしまうとエッジが見えない状態になってしまい何の変化も起きません。

そして、あくまでも見せかけなので盛り上げすぎたり、盛り下げ過ぎても表現できないので、ちょっとした味付け程度に盛りましょう。

両方用意できたらローポリとハイポリのモデルを重ねます。

画像5

ローポリモデルにマテリアルを追加します。
シェーダーエディターを開き、追加>テクスチャから画像テクスチャノードを追加します。

画像6

画像テクスチャの新規ボタンを押し、OKを押します。
ハイポリの方に同じマテリアルを設定します。

画像7

ベイクの設定をします。
ベイクはレンダリングエンジンeeveeではできないのでcyclesに変更します。

画像8

ベイクセクションを開きベイクタイプをノーマルに変更します。
「選択物→アクティブ」にチェックを入れます。
「ケージ」にチェックをいれます。ケージとはオブジェクトを覆う箱のようなもので、ベイクをどの範囲までするかという指標になります。
「ケージを押し出し」はその範囲を指定します。ハイポリの大きさをカバーできる量にすれば間違いないと思いますが、うまくいかない場合は何度か変更し、ベイクしなおしてみてください。

ハイポリ→ローポリの順にオブシェクトを選択してベイクボタンを押します。

画像9

結果このように仕上がりました。

画像10

こちらでお借りした木のベースカラーとラフネスを追加してみました。
ポリゴンはあくまで12のまま、これだけのディテールを表現できます。

2、法線転写錬金
次に法線の方向を巧みに操ることによってガビガビのローポリキャラをつるんつるんにしてしまう錬金術をご紹介したいと思います。

blenderなどを使うと、「スムーズシェード」や「フラットシェード」という設定をしたことがあるかもしれません。
基本的にはメカなどのハードサーフェースではフラットシェードを、キャラクターなどの曲面が多いモデルにはスムーズシェードを利用すると思いますが、キャラなどをローポリで作ると、スムーズシェードを適用しても、頂点が少なと滑らかにならず、ガビガビの残念な子になってしまうとおもいます。そこで活躍するのが法線転写錬金です。

ローポリのガビガビモデルにハイポリの球状のモデルの法線を転写してつるんつるんにしてしまうのです。

うちのピコちゃんを例にやっていきたいと思います。説明したいと思いますピコちゃんはポリハラによってポリゴンを2000に制限されたかわいそうな子です。実際は2162ポリあります。

画像11

この不憫な子にリッチなハイポリ球モデルの法線を転写していきます。
まず、モデルのつるつるにさせたい場所だけを選択して別オブジェクトにします。ピコちゃんの場合は、顔のパーツだけ抜き取りました。

画像12

画像のように半球の下を押し出したオブジェクトを作り、ピコちゃんにすっぽりかぶせます。球のオブシェクトに細分化モディファイアーを追加し、ビューポートのレベル数、レンダーの両方を6にします。このオブジェクトはめちゃくちゃ重いので非表示にして大丈夫です。

画像13

転写設定します。
デフォルトではカスタム法線というのが使えない状態なので、使えるようにするためオブジェクトデータプロパティーのノーマルセクションを開き自動スムーズにチェックを入れます。

画像14

顔オブシェクトを選択して、データ転送モディファイアーを追加します。
ソースで先ほど作った球のオブジェクトを選択します。
面コーナーデーターにチェックを入れてセクションを開き、カスタム法線を押します。

そしてモディファイアーを適用します。

画像15

このようにつるんつるんのかわいこちゃんに変身しました。(自画自賛)

画像16

トゥーンシェーダーを適用して双子の姉ピコちゃんと一緒にハイチーズしてみました。

まとめ

いかがでしたでしょうか?法線を操ればポリハラなんて怖くないです!
(ただし、テクスチャーハラスメントとダブルで来るとちょっと怖いです)
法線を操ってできることはまだたくさんあると思います。何か他に良い法線の錬金術がありましたら教えていただけると嬉しいです。

この記事が気に入ったらサポートをしてみませんか?