本日はUnityでのMRGT応用枠です。
MRGTで提供されているコア機能のGraphicsTools StandardシェーダーとSubstance Painterの機能を応用していく手法を紹介します。
今回はモデリングツールとSubstancePainter、そしてUnityを使用していきますが、メインとしてMRGTの機能紹介記事のためサンプルとして以下のリンクより素材を無料で入手できるようにしています。
〇完成品
こちらがUnityでのビジュアルになります。
〇SubstancePainterでグラフィックを作成
前提条件としてSubstanePainterではUV展開はできないためBlender等のモデリングツールでモデリングを行う際にUV展開を終えている必要があります
①SubstancePainterに3Dモデルを読み込みます。
②ベイクを行います。
③テクスチャを作成します。ここではSubstancePainterの解説は割愛します。
④上部タブファイルからテクスチャを書き出しを選択します。
これによってテクスチャが書き出されます。
〇ChannnelMapの作成
Substance Painterから出力された段階では基本色となるMainMapのほかにMetalicMap、RoughnessMap、AlphaMap、EmissionMapが出力されます。
これらをUnityのマテリアルで扱う際はそれぞれのパラメータに画像を指定することになりますが、画像数が増えるほどGPU上のメモリーに情報が保持される為パフォーマンスが落ちていきます。
PCアプリケーション等では問題にならない場合がありますが、xRアプリケーションの場合は特に高コストな処理として避けられがちになります。
そこでGraphicsTools StandardシェーダーにはChannnelMapと呼ばれる機能が提供されています。
ChannnelMapは上述のテクスチャのうち、MetalicMap、RoughnessMap、EmissionMapに加えAOMapをまとめた一枚の画像のことを指します。
金属感や光沢、AO、発光といった情報は金属ー非金属、つるつるーざらざら、明るいーくらい、光っているー光っていないとそれぞれ0~1の情報で扱うことができます。
唯一、発光に関しては何色に発光しているのか?という情報が必要になりますが、これはEmissionという別のパラメータで発光色を決めることができるためChannnelMapでは上記の情報をそれぞれR,G,B,A(透明度)として画像が持てる形にまとめたテクスチャとして使用することができます。
重なる点もありますがChannnelMapを簡単に表すと、4枚必要であった画像を1枚の画像で済むようにして3枚分の画像処理分のパフォーマンスを向上させるというものです。
ChannnelMapを作成するためにはTextureMargeを使用することが一番早いと思われます。
TextureMargeは以下のGitHubで入手することができる有志が開発したOSSのソフトウェアになります。
①TextureMerge.exeを起動します。
②赤にメタリック、緑にオクリュージョン(今回は無し)、青にEmission、アルファにラフネスと各スロットに対応する画像をD&Dします。
オクリュージョンには真っ白な画像をアタッチします。これはオクリュージョンの場合影のように値を出力の値に掛け合わせるため白=1であれば結果に影響することがありません。
Mergeを選択することでChannelMapが作成されます。
〇MRGTシェーダーでUnity上でビジュアルを構築
MRGTの導入に関しては以下の記事を参考にしてください。
Unity2020以降のバージョンであればビルドイン、URPどちらのプロジェクトでも実行することができます。23年現在HDRPのみ対応していません。
①モデルとChannelMapおよびMainMap、NormalMapの3枚をインポートします。
②新規でマテリアルを作成します。
③マテリアルのシェーダーをGraphicsTools Standardに変更します。
④ChannelMapにチェックを入れ有効化し、作成したChannelMapをアタッチします。
これで一気に深い見た目となったことがわかると思います。
作業は以上です。
これで一気に深みのあるビジュアルが再現できました。
使いこなすことで荒れた金属肌のような表現なども行えます。
本日は以上です。