BakeryのDirectional ModeでMonoSHを使う方法を書きます。従来(SH,RNM)よりメモリ消費少なく高品質なライトベイク結果が得られます。MonoSHを使うにはBakeryのバージョンは1.9以上にする必要があります。
解説
Unityのライトマップベイクでも、GPUライトベイクアセットであるBakeryにもディレクショナルモードという設定があります。
平たく言うとディレクショナルモードだとライトマップに方向性の情報を持たせられるのでノーマルマップ(と疑似的なスペキュラ)がちゃんと効くようになってディテールが増します。しかし、その分負荷も増します。
Bakeryのディレクショナルモードは方式がいくつかあって、高品質なのはSHです。しかし、ライトマップをHDR1枚+xyz各方向LDR3枚=4枚出力するためメモリ消費が大きいのがネックです。Bakeryのバージョン1.9で追加されたmonoSHはHDR1枚+LDR1枚(xyzの方向情報をグレースケールとしてRGB各チャンネルに格納して1枚にまとめる)になるので、SHより軽量(Unityのディレクショナルモードと比べて半分)でなおかつ、SHとほぼ同じ品質が得られます。
I knew for a long time that I can do it, but today I actually implemented and tested it.
What if we make SH L1 lightmaps grayscale but still sample them using the non-linear Geomerics method instead of using the weird half-lambert solution for directional maps that Unity uses? pic.twitter.com/XoQn9OSVLc— Mr F (@guycalledfrank) July 30, 2022
また、MaterialPropertyBlocksが必要ないため、VRChatでアップロードするときにVRC Bakery Adapterが不必要で手間が省けます。
注意
・ライトベイクするマテリアルのシェーダーがmonoSHに対応している必要があって、Filamented Standard Shader、Orels Unity Shader、BakeryのStandard Shaderが対応しています。ライトベイクしないものはMonoSHの設定は要りません。
・モデルのテクスチャ、特にノーマルマップとラフネスマップをちゃんと作ってる場合でないと十全に効果を発揮しないので、それらがない場合は導入しないほうが負荷やベイク時間減らせてよいかもしれません。
Bakery ver.1.9+パッチを導入する
※Bakeryのアップデートによりこの工程は要らなくなりました。
パッチ導入方法
MonoSHに設定する
BakeryのWindowを開いて、Directional modeのプルダウンからMono SHを選びます。
ライトベイクするマテリアルをBakery StandardかFilamented Standard Shaderに変更します。
Bakery Standardの場合はForward Rendering OptionsにあるEnable Mono SHにチェックを入れます。
Filamentedの場合はLightmap OptionsのBakery ModeをMonoSHにします。
あとは通常通りBakeryでベイクしてください。
余談
ゴーストクラブのCGWorld配信かなにかでSH使ってると言ってて、宍戸あくろ個展はmonoSHだと会場手掛けたtanittaさんが言ってて tanittaさんに聞いたところ、私の聞き間違いで、宍戸あくろ個展はmonoSHではないそうです。monoSHどこで知ったんだ、私…