本日はBlenderTips枠です。
筆者は公私ともに3Dモデルを作り、HoloLensやMeta Questのアプリを作成していますが、お仕事でインターンとして参加いただいている方にベイクに関して、なぜ必要なのか?どうやるのか?教える機会がありました。
また、今回ベイクした画像のノイズが目立つというほかのエンジニアからのfbを受けてベイクした画像をBlender内で編集する方法をまとめていきたいと思います。
〇なぜベイクが必要なのか?
ベイクとはBlender内でのオブジェクトのレンダリング結果をそのままテクスチャとして焼きこむ作業を指します。
ベイクを行うことで次のようなメリットがあります。
・BlenderのShaderやレンダリングなど固有の機能を使用してレンダリングした見た目をUnityやUEなどで再現できる。
・光の当たり方や影の付き方、Shaderで再現している見た目をそのままテクスチャに変換するため、Unityなどアプリでライトの計算を行わずに見た目を再現できる。
・複数のマテリアルをベイクすることで一つのマテリアルにまとめることができる。
特にxRデバイスやモバイルのアプリにおいて光の計算を行うことは非常に高負荷になる場合があります。
例えば、次のBlenderの中で再現された床は、テクスチャを使用せずShaderで木目やタイルを再現しています。
これをベイクすることで次のようにテクスチャとして書き出すことでUnityで再現できるようになります。
この床の場合ディフューズ(直接光・間接光なしの状態)の画像のほかに次の画像のような発光マップ(直接光・間接光のみ)の2枚をベイクしています。
UnityのStandardShaderで二つの画像を合わせることで、Blenderほどではないですが、Blenderと同じような見た目を再現できました。
※実際にはUnityの画面では2つの画像に加えノーマルマップを使用しています。
〇ベイク後のノイズの修正
ベイクを行うことでテクスチャに焼きこめるものの、Blenderのレンダリングの性質上ノイズが発生することがあります。
例えば前述の床の場合発光マップを拡大すると白いぼつぼつのノイズがあることがわかると思います。
テクスチャの使われ方によっては気が付かないレベルではありますが、今回の場合床という大きな面積を覆うテクスチャのため、特にxRデバイスで見るときにノイズが気になることがあります。
今回のこのノイズをBlender内の機能を使用して除去していきます。
①Blenderでベイク後にTexturePaintタブを開きます。
②デフォルトでは右画面にベイク後の画像があたった3Dビュー、左画面には2Dテクスチャが表示されます。
この際にテクスチャが参照されず紫になる場合は、Shadingウィンドウでベイク後のテクスチャ画像のノードを選択してください。
2Dウィンドウの場合は上部の画像テクスチャからベイク後の画像を選択します。
③今回のようにピクセル単位でのノイズの場合は2Dウィンドウで隣のピクセル色を塗りつぶし、一つ一つノイズを消していきます。
ベイク後のノイズが全体的にかかっている場合ぼかしを選択し、3Dウィンドウでぼかしを行い対面を塗りつぶします。
以上でベイク後のノイズを除去する方法でした。
Blenderではレンダリングのサンプル数を上げればノイズは減りますが、どうしても時間がかかりますし、時間をかけてもノイズが残るときは残ってしまいます。
大がかりなノイズの場合は再ベイクしたほうが良いこともありますがちょっとしたノイズであれば今回のようにTexturePaintの機能を使用することで簡単に修正できます。