お久しぶりです、おもちライダーです。
前回の記事に引き続き、ローポリモデルをよりよく見せる方法です。
前回も書きましたが、「VRにおいてモデルは軽ければ軽いほど良い」です。
それでいて美しく見せる方法として、今回は「テクスチャのベイク」をやっていこうと思います。
AO=アンビエントオクルージョン とは
まず用語の説明。
ざっくり言うと、周囲の光を遮って影になる部分を計算するレンダリング方法のこと。
凹凸部分の陰影をテクスチャとして書き出すことができます。
手順を一言で説明すると、
「ハイポリモデルの陰影をテクスチャに書き出し、ほぼ同じ形のローポリモデルのマテリアルで使用する」
というものです。
今回は例として、車のタイヤを作っていきます。
コツをつかめば、自分で描いたりするより圧倒的に綺麗で正確な陰影表現をつけることができます。
では早速作っていきましょう!
①Blenderでモデルを作ろう
ハイポリモデル編
まずはハイポリモデルから。
64角柱を作り、底面の角をベベルで丸め、ホイール部分を面の差し込みで作ります。
この際、「六角柱の厚み・円の半径」「ベベル・差し込み面の幅」はメモしておいてください。あとでローポリモデルと形を合わせるために使います。
側面の辺に「細分化」で中点を作り、メッシュを半分削除。
片面だけモデリングした後コピー(ミラー)することで、モデリングやUV展開の二度手間を省けます。
あとは面の押し出しや差し込み、移動したりしてホイールの凹凸を作ります。適度にシャープも入れます。
この辺りは実物の写真を見ながら、ニュアンスでつくってます。
ネジもつけましょう。別オブジェクトで六角柱を作り、角をベベルで落として、スピンでコピー。
モディーファイア「ブーリアン」で、ホイールにねじをガッチャンコ。
この時タイヤのオブジェクトは片方空いたままなので、
一度先ほど細分化で増やした中点たちを選択 → [Ctrl+F]面を貼り → ブーリアンしないと、理想的にくっつかないです。
ブーリアンが終われば、この面は消します。
ネジがホイール表面にくっついていて、裏面は抜けているとOKです。
あとで説明しますが、意外とここが重要なポイントです。結合ではなく「ブーリアン」であるのも重要ポイントです。
曲面部分(接地面)も作っていきます。ミラーコピーで増やせるように、円周に対して1/4だけにして溝を掘ります。
そして平たい底面部と曲面の側面部を2つのオブジェクトに分離します。
この時境目の部分をシームマークしておけば、分離や今後の作業が楽になります。
また、適当なタイミングでスムーズシェードをかけておいてください。自動スムーズのチェックも付けましょう。
ローポリモデル編
今度は16角柱を作り、同じく底面の角をベベル、ホイール部分を面の差し込みで作ります。
この時、ハイポリを作った時と同じ「六角柱の厚み・円の半径」「ベベル・差し込み面の幅」で作るようにします。
なおベベルの「幅とシェイプ」はハイポリと全く同じであるべきですが、「セグメント(面の数)」は増やしてもOKです。
ローポリモデルも「細分化」→片側半分削除。曲面部分(接地面)も同じく、円周に対して1/4だけにします。
そしてこちらも、平面と曲面部を分離して2つのオブジェクトにしてください。
もちろん、スムーズシェードもお忘れなく。
②UV展開をしよう
ここからが本番。
ベイクしたテクスチャを使うためには、ハイポリとローポリのUV(展開図)がほぼ一致していないといけません。
まずはハイポリの方から展開していきます。
ホイールが正面になるように3Dビューを調整し、ホイールのメッシュを全て選択。
3Dビューにカーソルを置いてUキー→「ビューから投影」を選択して、UVを開きます。
そしてUVを範囲いっぱいに拡大します。
次に曲面も、Uキー→「アクティブ四角面に追従」で展開します。
こちらは縦か横が範囲いっぱいになるように、縦横比を変えないよう注意して調整します。
(範囲いっぱいに配置してるのは、確かTexToolってアドオンのフィルって機能なのですが、アドオン入れすぎてて定かじゃないです…)
次はローポリモデルの展開です。
平面(ホイール側)は同じく、ビューから投影 → 範囲いっぱいに拡大 or ハイポリUVに合わせて拡大。
曲面側(タイヤ接地面)は、アクティブ四角面に追従 → ハイポリUVに合わせて比率調整。
溝を掘っている分、UVに対するメッシュ縦横比が変わるので、ここはハイポリに縦横比を合わせます。
UVが開けたので、今半分になっているタイヤを元に戻します。ローポリゴンのタイヤだけ作業してください。
平面と曲面オブジェクトそれぞれに「モディファイヤー」→「ミラー」でコピーしていきます。
平面は1つの軸、曲面は3つの軸とも指定すれば元通りの形になります。
原点の位置とトランスフォームの回転が動いている場合があるので、必要に応じて適用・再設定するなどしてください。
そしてバラバラになっていた2オブジェクトを結合して、1つのオブジェクトにしたらモデリングは完了です。
頂点が重なっている箇所がありますので、頂点マージも行います。
③テクスチャベイクをする
テクスチャをベイクする手順
ここからが本番です。(2回目)
ハイポリゴンモデルを使って、陰影(アンビエントオクルージョン)を表現するテクスチャをベイク(書き出し)していきます。
まずは、ベイク用のマテリアルを作ります。
分かりやすいようにシェーディングタブ表示にしました。
ベイク用に新規マテリアルを作成し(図内:Bake)、ベースカラーを画像テクスチャに設定。
ブランク画像を新規追加(図内:無題)します。
そしてハイポリモデルにベイク用マテリアルを割り当てます。
次に、レンダープロパティ(右下区画の上から2つめアイコン)を開き、以下の通り設定します。
- レンダー → レンダーエンジン → 「Cycles」
- ベイク → ベイクタイプ → 「アンビエントオクルージョン」
- ベイク → 出力 → ターゲット → 「画像テクスチャ」
設定ができたら、ベイクしたいオブジェクトだけ残して残りはレンダリング対象外にします。
そして、シェーダーエディター上のレンダリング先画像のノードを選択(白く縁どられていたらOK)。
そこまで出来たら、ついにベイクボタンを押します!
分かりやすいように、左下画像ビューでベイク先(ベイク用マテリアルに設定している画像テクスチャ)を表示しておきましょう。
ベイクボタンを押下後、数秒程度待つと……
出来ました!!!!!!
凹凸だけでなく、斜面もグラデーションがかかっていていい感じではないでしょうか。
ベイクした画像は、画像ビューのハンバーガーメニューから 画像 → 名前を付けて保存、で保存してください。
真っ黒になってしまうときは…?
ここで、ベイクした画像に辺に黒くなってしまう場合があります。
それはUV投影方向に対し、面が2つ以上重なっている場合に起こります。
この場合、ネジのところが黒くなっていますね。
このネジ、ブーリアンでなく結合でくっつけてしまったので、ホイールの面と裏面が付きっぱなしなんです。
そのため投影方向に対し、面が3つ重なっている六角形の場所だけ黒くなった、というわけです。
なので手間ですが、必ずブーリアンでメッシュを結合して作る必要があるんです。
また、ベイク結果がゆがんでいる場合は、UVの開き方を見直してみましょう。
UVのストレッチを表示して、歪みが無ければ(すべて真っ青なら)綺麗にベイクできるはずです。
2枚以上のテクスチャベイク またはベイクの修正をしたい場合
側面分もベイク画像を作ります。
ベイク用マテリアルは使いまわせますが、画像テクスチャは置き換えない限り上書きベイクされます。
そのため、ベイク前にリセットされるよう、プロパティ → ベイク → 出力 → 「画像をクリア」にチェックを入れてください。
もちろん上書きベイクなので、保存していないと消えます。ベイクが成功したごとに、画像を保存すると良いでしょう。
また、画像テクスチャをベイクの度新規作成・切り替えていたら消えることはないです。
④マテリアルの設定をする
マテリアル設定の手順
2つのベイク画像ができたところで、仕上げのマテリアル設定です。
平面側(ホイール側)のマテリアル(図内:Front)と曲面側(接地面)のマテリアル(図内:Side)をそれぞれ新規作成。
ローポリモデルにマテリアルをはめて、メッシュの割り当てを行います。
そして以下のようなノードを組みます。
ベイクした画像ノードをカラーランプノードにつなぎコントラスト調整。
そして調整したカラーを乗算ノードのAにつなぎ、BにはRGBノードをつなぎ色味を乗せます。
その結果をベースカラーにつなげば、アンビエントオクルージョンの陰影がついたマテリアルができます。
ホイール内は金属になるのでここもマテリアルを作りましょう。(図内:steel)
とかやってたら、ホイールとタイヤゴムの境目がかなりずれていたので、「UV」をスケール調整して合わせます。
側面も同様に作成。
そして完成!!!!!!
接地面の溝部分が作り甘いですが、ローポリでもそれっぽく見えませんか?
UV展開を省略したい場合
もう一つの方法として、ハイポリからローポリに直接ベイクする方法もあります。
ローポリもハイポリもUV展開はスマートUV展開でOK。
ただしローポリのUV展開は、アイランドの余白をある程度開けていた方が良いです。
UVの準備ができたらレンダーの設定に入っていきます。
ローポリの方にベイク用マテリアルを設定します。
レンダープロパティ → ベイク → 「選択物からアクティブ」 をチェック。
そして、ハイポリ→ローポリの順でオブジェクトを選択。
(この場合、ハイポリが選択物(オレンジのフチ)、ローポリがアクティブ(黄色のフチ)になります。)
そしてベイク。
実はこっちの方がメジャーな方法です。
しかし、UVを小さめに展開しているために、ベイク結果の解像度が荒くなってしまいます。
(テクスチャの解像度を上げればいいですが、その分テクスチャの容量も重くなります。)
割とギザギザが見えるのと、どちらにせよマテリアルは数を使うので2枚テクスチャベイクしました。
UV展開が大変なモデルは、この方法の方が楽かもしれないです。
おまけ:UE(Unreal Engine)での使い方
AOテクスチャはUE(アンリアルエンジン)でも使えます。下記の例はマテリアル設定やノードとしてはほぼ同じことしてます。
Blenderでベイクした結果を、他ソフトでもテクスチャ1枚で表現に使うことが出来ます。
応用すれば、他のいろんなテクスチャもベイクすることが出来ます。
ワイドでは、VR制作にUEを使っています。私自身はまだまだ勉強中なので、UEも腕を磨いていきたいと思います。
まとめ:見ないところはチープに、でも綺麗に
VRだと、遠いところや床に近いところは除き込まないと見ないことがあります。
なぜ今回タイヤだったかというと、そういった「しっかり見ないところだけど、ちゃんと作るとメッシュが多くなる物」だからです。
でもそういったところに処理を割いてられないので、ポリゴン数を減らし、テクスチャやマテリアル設定を工夫することで処理を軽くしていくのです。
実際、PCVRよりQuestなどのスタンドアロン機でのVR需要が高まっているのを感じます。
見る・体験するが主流になるVRだと、説明会や体験会で使いたい、持ち出して使いたいという要望に応えるため
軽量化且つクオリティアップを日々目指しています。
あとこのベイクやアンビエントオクルージョンのやり方は、一番基礎です。
ノードやアドオンを駆使ことで時短や精度、表現アップも期待できます。
でも初歩の初歩が分からない、なんか詰まったけど解決方法も見つからない…、という困りごとの中でも
アンビエントオクルージョンという知名度の低い、しかもローポリゴンモデルを利用すること限定の、どニッチに次ぐどニッチ記事を書いてみました。
過去の自分みたいな人に見つけてもらえると良いな。