ベイクしたライティングプラットフォームのガイド
カスタムプラットフォームの中で Unity のベイクライティングを使えます!
最初に
カスタムプラットフォームを作るための Unity のバージョンは 2019.3.15f1. 最初に普通のカスタムプラットフォームのガイドでプラットフォームを作ります Guide to making Custom Platforms 英語版.
ベイクしたライティングで動作する BeatSaber 互換のシェーダをご使用が必要。ビートセイバー Modding Group's (BSMG)のBS_Shader_Pack (Discord Link)にある Custom.shader と GlassRefraction.shader を使用することができます。
完成すると、プラットフォームのGameObjectにCustomPlatformスクリプトがもう追加してます。
Unity のベイクしたライティング
この部分で Unity 2019.3 のベイク方法を説明しますので、すでに詳しい読者はPrefabLightmappingまで読み飛ばしていただいて結構です。より詳しい情報は、Unity Documentation on Baked Lighting を参照してください。
ライトをベイクに設定
シーン内に多くのLightを配置してもすべてのLightが影を落とすでもパフォーマンスに影響を与えません。全ての Unity の 4 種類のLightは全部ベイクに使用することができます。
- Directional
- Point
- Spot
- Area
Inspector でベイクしたいのLightをModeをBakedに設定します。Area Lightはベイクのみ使用可能ですから設定が必要はありません。
影が落としたいLightのShadow TypeをSoft Shadowsに設定します。
影を受けるや落とすのGameObjectには、Inspector で Mesh Renderer の部分でこのオプションを設定する必要があります。
- Cast Shadows On
- Receive Shadows チェック
- Contribute Global Illumination チェック
- Receive Global Illumination Lightmaps
全部の GameObject にライトマップ UV を追加
Scene 内の全てのGameObjectのPrefabをベイクするには、 ライトマップ UVが必要です。
Unity が自動的に生成ように、Prefabをクリックし、Inspector の Model タブを選びます、そしてGenerate Lightmap UVsをチェックします。最後にApplyをクリックします。複数の Prefab にクリックをしますと全部まとめてに設定を変われます。
全部のライトと GameObject を Static に設定
Static に設定したのLightとGameObjectのみがベイクに使用されます。Hierarchy のリストの中のシーン内のGameObjectをクリックします。
そして Inspector で Static をチェックします。
トップレベルのGameObjectを Static に設定すると、すべての子GameObjectも現れるのダイアログボックスで static に簡単に設定ができます。
ベイクしたライティング互換の BeatSaber シェーダーを使用する
ビートセイバーと互換性のあるシェーダーが全てベイクしたライティングで動作するわけではありません。今のところ、BSMG のBS_Shader_Pack (Discord Link) にある以下のシェーダーだけが動作することが分かっています。
- Custom.shader
- GlassRefraction.shader
ビートセイバーの「Alpha Glow」問題とベイクしたライティングに対応した他のシェーダを見つけることができるかもしれませんが、この 2 つはほとんどの用途で機能します。
シェーダを Unity プロジェクトにインポートまたはドラッグ&ドロップします。すべて同時にのまたは個々のマテリアルをクリックします、Custom や BeatSaber/GlassRefraction シェーダを選択します。
ほとんどの設定が自動にコピーされるはずですが、再度設定を修正する必要があるかもしれません。
ライトをベイクします
最後に 1 ~ 4 の手順が終わったら、メニューのWindow->Rendering->Lightingを選択して、Lightingのパネルを開きます。
ビートセイバーのカスタムプラットフォームは「Skybox」をエクスポートして使用することができません。 でも「Environment Lighting」と「Environment Reflections」はベイクしたライティングに影響を与えるので、適切な色や環境マップに設定してください。
Window メニュー -> Rendering -> Light Settings パネルを開きます。
- 「Skybox Material」を「None」に設定
- 「Environment Lighting」を「Color」に設定
- 「Environment Reflections」を「Custom」に設定
4GB VRAM と OpenCL 1.2 をサポートする GPU が 1 つ以上あれば、**Progressive GPU (Preview)**を使用してベイクしたライティングができます。
ほとんどの設定はデフォルトのままで大丈夫ですが、私はLightmap Sizeを 2048 に増やします。そしてAuto Generateをオフにすると変更のたびにベイクが行われるのことを止める。
Generate Lightingを押すとLightMapを作成します。
Progressive GPU (Preview)は時々クラッシュのことがあるからEnlightenが使えますけど CPU でベイクするからシーンの複雑に場合 GPU より遅い。どっちでも正しいライトマップができます。
ベイクが成功すると、シーンのあるフォルダに同じ名前のフォルダができます。 ライトマップのデータファイルは、その中にあります。
- LightingData
- Lightmap-0_comp_dir
- Lightmap-0_comp_light
Prefab Lightmapping
次はベイクしたライティングマップを CustomPlatform 内のPrefabに保存し、ビートセイバー内で使用してますための手順です。 ライトマップのデータは普通にSceneにエクスポートされます(VRChat のように)。 しかし、CustomPlatform はAssetBundle内のAssetしかエクスポートできないので、全てのデータをPrefabに付けます必要があります。
Custom Platform のスクリプトのあるGameObjectに、新しいPrefab Lightmap Dataコンポーネントを追加します。
次、メニューからAssets -> Bake Prefab Lightmaps を選択します。 これが完了すると、Prefab Lightmap Data コンポーネントの項目が満たされます。
これで Custom Platform をエクスポートします。
ビートセイバーでカスタムプラットフォームをテストします
ベイクしたライティングを使用するには、Custom Platforms version 6.1.17以降が必要です。
また、ベイクしたライティングと干渉する可能性のある Beat Saber のメニューライトを制御するために、Tweaks55も必要です。
これらの MOD を Beat Saber/Plugins フォルダにまずインストールします。また、ModAssistant からインストールすることもできます。
エクスポートした Custom Platform の.plat ファイルを Beat Saber/CustomPlatforms フォルダにコピーし、Beat Saber を起動します。
Tweak55 でメニューライトの色を変更する
ビートセイバーの自身白いメニューライトはベイクしたライティングに干渉するかも。Tweak55 MOD の UI タブ から Menu Light Color を変更します。黒いに設定でライトを無効する、または他の色に設定でプラットフォームを照らす。
ゲーム内のライトの色を変更する
ゲーム内のライトもベイクしたライティングに干渉するかも。選曲の時左メニューのVanilla タブをクリック、Colors、Override Default Colorsを選ぶ、色表示の行の横にある変更ボタンをクリックします。ここも黒いに設定でライトを無効する、または他の色に設定でプラットフォームを照らす。
他の MOD はプラットフォームに影響を与えるライトを追加できる
他の MOD は新しいライトを追加することができます。新しいライトの「Culling Mask」が「Layer 1」に抜ければならないとベイクしたライティングに干渉する可能性があります。
この画像で VMCAvatar のライトが表示します。この MOD を使えれば、私の MODVMCLightDisabler でいつもビートセイバーのシーンが変わるとライトに無効します。
ビートセイバーをプレイする!
新しいプラットフォームおつかれさまでした!