Bakery - GPU Lightmapper簡易日本語マニュアル
Bakery - GPU LightmapperはGeforce及びQuadroシリーズのGPUで高品質かつ高速実行が可能なライトマッパーです。
Bakeryならば、CPUで一時間以上かかるベイクもわずか5分で終わらせることが出来ます
PCに搭載されているGPUがGeforce及びQuadroでない場合、
また、Geforceでも700番台(Kepler)よりも前のGPUの場合は使えません。
https://assetstore.unity.com/packages/tools/level-design/bakery-gpu-lightmapper-122218
Unity Asset Storeで購入することが出来、価格は60USDです。
セールの時は半額になったりするのでそれを狙っても良いかもしれません。
このマニュアルはBakeryを最低限、とりあえず使うためのVRChatプレイヤー向け、
”簡易”日本語マニュアルです。
筆者が詳細を把握していない機能については説明しません
Bakeryの公式マニュアルはこちら。
https://geom.io/bakery/wiki/index.php?title=Manual
1.基本的なベイクとUnity標準ベイクとの共通事項
まずはじめに、Lightningウィンドウを確認しましょう。
場所は右のInspectorの隣か、
無ければ上の”window>Rendering”の中にある”Lighting settings”です

一番下の「Auto generate」のチェックがついていないことを確認しましょう。
これのチェックが付いていると何かしらオブジェクトを動かしたら自動でベイクが開始されPCの処理能力を一気に持っていかれます。
ついでにシーンに最初からあるDirectional Lightを消しておきましょう
Mesh Rendererの設定
さて、UnityとBakeryベイク共通の内容として、ベイク対象のMesh Rendererを設定する必要があります

ライトベイクに関わる部分は
・右上のStaticチェック
ライトマップ生成だけをしたい場合は、
「Contribute Global Illumination」のみチェックします
・Cast Shadows
・Receive Shadows
影を作る、受けてライトマップに書き込むなら必須です。
onにしてチェックを入れておきましょう
・Lightmap static
右上のStaticではなくこちらでもLightmap staticを設定可能です
・Scale in Lightmap
Lightmap staticをオンにすると出てくる、オブジェクトごとにライトマップの解像度を
倍率で変更できます。
LightmapResolution(Texels per Unit)の設定に対する倍率なので
20Tex/Uの場合、Scale in Lightmapを2に設定しておけばそのオブジェクトには40TpUの解像度が適用されます。
(TpU=Texels per Unit)
1Unitは1*1mの面積を指すとのこと。
Tex/Uの値はBakeryマニュアルからの翻訳引用をすると
広い屋外エリア(都市):1-5
中程度の屋外エリア(路地等):10-20
高品質のインテリア:100
とされています。
但しTex/Uの値を上げすぎるとワールド容量がかなり大きくなります。
光源の当たらない部分、太陽光しか当たらない部分は解像度を落とすなどの工夫をすると
容量を抑えながらキレイなライトマップが生成されます
2. オブジェクトのライトマップ用UV作成

基本的に、オブジェクトはライトベイクに適切なライトマップを持ちません。
結果、このように壊れたライトマップが発生することになります。
これを回避するためには、読み込んだオブジェクトのfbxファイルを選択します

一番下にある”Generate Lightmap UVs”をチェックした上で左下のApplyを押すと
ライトマップ用のUVが生成され、正しくベイク出来るようになります。
3.BakeryLightコンポーネントを配置
Bakeryライトにはタイプが存在せず、コンポーネント毎に動作が異なります
設置方法はUnityのものと同じ、Add Componentから、
若しくは上のBakery>Createから行います
・Bakery Direct Light
Directionalライトは“Bakery Drect Light”と対応しています
Drectionalライトは主に太陽光として使われる、エリア全体に平行に来るライトです

扱い方はUnityのライトとあまり変わりません。
・Intensity
ライトの明るさです。大きくすれば明るく、小さくすれば暗くなります
・Indirect Multiplier
光が反射したときの減衰率です。
間接光が不要な場合には0、0から1の場合は反射するごとに暗くなり、1以上だと反射するごとに明るくなります。
・Shadow spred
影のぼやけ方?を調整します。ギザギザの影ができる場合はこの値を上げれば改善されるとのこと。
・Bakery Point Light
BakeryPointLightはProjection maskによって特性が変わります
OmniはUnityのPointライトと同じです
ConeはSpotライトと同じです
CookieでもSpotライトと同じような挙動をしますが、
自分の環境では原因不明のエラーによるベイク失敗が多発する原因になったので
おすすめしません。


・Intensity
ライトの明るさです。大きくすれば明るく、小さくすれば暗くなります
・Range
ライトの設置位置からの到達距離です。
基本的に大きければ明るくなり、小さければ暗くなります。反射にも影響を及ぼすので狭い場所だとこれを下げるとかなり暗くなります。Intensityと合わせて明るさの調整が出来ます
・Outer angle
Cone/cookieライトで光を発する角度です。円錐形状に光が出ていきます
・Bakery sky Light
Bakery sky Lightは環境光です。Environment Lightingと対応しています
設定項目はIntensity以外基本弄りません。

このSkyLight及びunity標準のEnvironment Lightingは
シーン全体の明るさ、環境光です
『空気中の塵や水分による屈折や反射等による非常に弱い光』の再現に使います。
4.Bakery Renderウィンドウ
一番面倒くさく複雑なものです。詳細説明してられないので、最低限の説明をして
あとは自分が使っている設定を載せておきます
BakeryRenderウィンドウは上の”Bakery”から”RenderLightmap”を選ぶと出てきます。

Bakeryをインポートしてすぐはこの画面が出てるかもしれません。
このままRenderを押せばレンダリングが開始されます。
設定的にはこの状態でも何ら問題有りません。
VRChatでの利用を想定する場合ではTexels per Unitの値が40以上であれば概ね問題なくベイク出来ると思われます
詳細な設定をする場合は、
一番上の”Simple”を”Experimental”に変更することで設定項目が出てきます

現在自分が使っている設定ですが、
ほぼほぼ標準設定そのままです。
注目するべき点はTexels per unit、
ライトマップの解像度(密度≒画質)くらいで他のところはほぼ弄りません。
画像ではSamplesを間違って64にしていますが、実際ベイクを試すだけなら16で十分です。気分的になるべく高精度にしたいときだけ32や64にして使いましょう
適当に使ってもそれなりにきれいになってしまうのがBakeryの恐ろしい所。
その上ベイク自体が早いのでトライアンドエラーもやりやすいという
割と脳死上等な仕様になっています。

ここで重要なのはRTXmode。
GPUにRTXシリーズを使っている場合、ここのRTXmodeをonにしておくとベイク時間が三分の一くらいになります。
ちなみにRTX30XX以降のGPUでは必ずRTXモードがオンになります。
renderボタンを押した後、確認メッセージが出てオンになります。
RTXに搭載されているレイトレーシング用のRTコアはライトベイク同様、光の反射を計算する専用のものなので
当然早いです。
5.各種、既知のトラブル
・ベイクしたときライトマップがおかしい状態で出てくる
下の画像のようなライトマップになる場合は、デノイザーに問題があります
Open Image Denoiseを使うと解決することがあります

・ライトマップに「色の異常」が発生する場合の対処とAndroid版ビルド(VRChatではQuest版)での利用について
Android版Unityにおいてライトマップは、正常な圧縮ができず、下の画像のような状態になります。

また、[Bakeryでベイクしたオブジェクトの角の色がおかしい]などの現象もこれと同じ原因によるもので、このライトマップの圧縮設定を変更するには

MeshRenderer内のLightmapsから当該ライトマップを選び、

一番下のCompressionの項目を「None」に変更してください。
繰り返しますが、Androidビルド(VRC/Quest版)ではBakery以外でも発生します

また、Quest(Android)版に限りUnity Editorの左上、Fileから開ける「Build Settings」内にある「Texture Compression」をASTCに変更する、という手段を取ることもできます。(Questでは例外なくASTC対応なので問題ないが、それ以外のAndroid端末では対応非対応が分かれるので注意する必要があるとのこと)

既に使っているProjectにこの設定を適用すると、あらゆるテクスチャが再圧縮されるのでかなり時間がかかります。場合によってはCPUをフルで使って一晩くらい覚悟するべきかも
・一時ファイルについて
Bakeryはライトベイクする度に一時ファイルを生成しますが、複数のプロジェクトやシーンで幾つも、何度もベイクするとこの一時ファイルが入るフォルダが肥大化していきます。
私はやりすぎて200GBくらいまで行ったことがあります

一時ファイルの場所はBakeryのRenderウィンドウ(Renderボタンの上)から設定できます。デフォルトではUsers/(ユーザー名)/AppData/Local/Temp/Frenderになります。
このファイルが肥大化した場合は中身をまるごと削除しても問題ありませんが、ベイクをやり直す必要があることがあります(未検証)
また、この一時ファイルの保存先はSSDにしておくことを強く推奨します。
このフォルダ相手に大量の読み書きを行うので、ストレージの性能はライトベイクの所要時間にダイレクトに響きます
・VRAM及びメインメモリと解像度の関係について
Bakeryはベイク中、グラフィックメモリ、いわゆるVRAMを大量に利用し、
グラフィックボードに搭載されている高速な専用VRAMで賄える範囲を超えるとメインメモリをその実装量の半分まで利用できます
(つまり、グラフィックボードに8GBのVRAM、PCに32GBのメインメモリが搭載されている場合、8+(32/2)=24の24GBまで使用します。
高解像度のライトベイクを実行する時にBakeryがメモリを要求した瞬間、メインメモリ上に他のタスク(例えばメモリを大量に食うGoogleCrhome)などがあったり、
そもそもメモリが不足している場合等はライトベイクがその時点でエラーを出して停止します。
解像度が低い場合は消費メモリも少なく、場合によっては専用VRAM以上のメモリを消費しないため、メインメモリ上に何があっても問題ない場合が多いです。
Bakeryで快適にライトベイクをしたいのであれば、グラフィックボードをRTXにして、RAMを32GB以上搭載するべきでしょう。
Bakeryライト設定済みVRchat向け販売用ワールド
最後にBakeryライトが設定済みで販売している
VRChat向けワールドデータを紹介しておきます(ダイマ)


