YamaPlayerでLTCGIを使用するための設定方法についてのメモです。
「LTCGIを使用」にチェックを入れただけでは、LTCGI Shadowmapがベイクされなかったり、期待する動作にならなかったため、以下の手順で追加の設定を行いました。
|
Note
|
この記事で紹介する手順は、Unityの基本的な操作とVRChatワールドのアップロード経験がある方を対象としています。
また、シーン内のオブジェクトが |
-
Windows 11
-
Unity 2022.3.22f1
-
VRChat SDK Base 3.10.1
-
VRChat SDK World 3.10.1
-
LTCGI 1.6.3
-
YamaPlayer 1.5.18
-
Filamented 1.4.0 (LTCGI対応シェーダー)
結論
ざっくりとした手順は以下の通りです。
-
LTCGI導入
-
シーン内オブジェクトのマテリアルをLTCGI対応シェーダーに変更
-
YamaPlayerで「LTCGIを使用」にチェック
-
YamaPlayerの下にあるScreenオブジェクトのLTCGI_Screenコンポーネントを設定
-
Diffuse Mode: Lightmap Diffuse (ベイクされたデータを使用した高品質な拡散反射)
-
Color Mode: Texture (ビデオプレイヤーのテクスチャを光源として使用)
-
Lightmap Channel: Red (LTCGI Shadowmapベイク用のチャンネル設定)
-
-
LTCGI Shadowmapのベイク
詳細な手順については、次のセクションで説明します。
インストール
必要なパッケージは以下の通りです。
-
LTCGI 1.6.3
-
YamaPlayer 1.5.18
-
Filamented 1.4.0 (LTCGI対応シェーダー)
VCC (VRChat Creator Companion) とUnity Package Managerを使ってインストールします。(手順は割愛)
|
Warning
|
LTCGIライセンスとクレジット表記
LTCGIのライセンスにより、ワールドでLTCGIを使用する場合はGitHubリポジトリ (https://github.com/PiMaker/ltcgi) へのリンク表記または |
-
VPMリポジトリ:
https://vpm.pimaker.at/index.json -
パッケージ名: LTCGI
-
VPMリポジトリ:
https://vpm.kwxxw.net/index.json -
パッケージ名: YamaPlayer
-
Gitリポジトリ:
https://gitlab.com/s-ilent/filamented
マテリアルをLTCGI対応シェーダーに変更
スクリーンの光を受けるオブジェクトのマテリアルをLTCGI対応シェーダーに変更します。
今回ワールドのオブジェクト (SphereとPlane) のマテリアルをFilamentedシェーダーにしています。
また、光が当たっているのをわかりやすくするため、Directional LightとSkyboxを削除しています。
(Static にチェックを入れるのも忘れずに。)
|
Warning
|
Filamentedシェーダーを使用する場合、「LTCGI Support」にチェックを入れるのを忘れないようにしてください。 |
YamaPlayerの設定
YamaPlayerの「LTCGIを使用」にチェックを入れると、自動でLTCGI_Controllerを作成して設定してくれます。
|
Important
|
この状態でLTCGI_Controllerの「Bake LTCGI Shadowmap and Standard Lightmap」を実行しても、以下のようなエラーが出てライトマップベイクが失敗します。 |
No LTCGI_Screen components were found that are enabled and have a valid LightmapChannel set. Please configure at least one screen and try again.
有効なLightmap Channelが設定されたLTCGI_Screenコンポーネントが見つからないことが原因のようです。
このエラーを解消するため、YamaPlayerの下にあるScreenオブジェクトのLTCGI_Screenコンポーネントを以下のように設定します。
LTCGI_Screenコンポーネントの設定
LTCGI_Screenコンポーネントは、すでにYamaPlayerの子オブジェクトである「Screen」に追加されているため、以下の項目を変更します。
-
Diffuse Mode: Lightmap Diffuse (ベイクされたデータを使用した高品質な拡散反射)
-
Color Mode: Texture (ビデオプレイヤーのテクスチャを光源として使用)
-
Lightmap Channel: Red (LTCGI Shadowmapベイク用のチャンネル設定)
- Diffuse Mode
-
スクリーンの光の拡散方法を指定します。パフォーマンス改善のために無効にする
No Diffuse、LTCアルゴリズムバージョンのLTC Diffuse、LTCGI Shadowmapベイクで計算されたデータを使用するLightmap Diffuseの3つのモードがあります。Lightmap Diffuseを選択すると、ベイクされたデータを使用して静的オブジェクトに対して高品質かつ低負荷なライティングが可能になります。 - Color Mode
-
発光色のソースを指定します。YamaPlayerなどのビデオプレイヤーと連携する場合、
Textureを選択することで動画の映像に基づいたリアルタイムなライティングが行われます。また、Texture Indexは0のままにしておいてください。インデックス0はLTCGIがリアルタイムビデオのレンダーテクスチャを割り当てるスロットであり、YamaPlayerの映像を光源として使用するために必要な設定です。 - Lightmap Channel
-
Shadowmapベイク時に使用するチャンネル (R, G, B) を指定します。どれを選んでもレンダリングには影響しません。スクリーンをShadowmapベイク時の対象に含めるために
Off以外の値を設定する必要があります。基本的に、スクリーン1つにつき1つのチャンネルを割り当てます。(チャンネルはR/G/Bの3つのみのため、スクリーンが4つ以上ある場合は注意が必要です。ただし、影が互いに重ならない程度に離れているスクリーン同士であれば、同一チャンネルを共有することも可能のようです。)
詳細な説明は、以下のドキュメントを参照してください。
LTCGI Shadowmapベイク
最後に、LTCGIのShadowmapとUnity標準のライトマップのベイクをまとめて行います。
LTCGI_Controllerの「Bake LTCGI Shadowmap and Standard Lightmap」を実行してください。
ビルドして動画が再生されると、スクリーンからの光をオブジェクトが受けているのがわかります。
まとめ
YamaPlayerで「LTCGIを使用」にチェックを入れるだけではLTCGI Shadowmapのベイクに失敗します。 YamaPlayerの子オブジェクト「Screen」に追加されているLTCGI_Screenコンポーネントで、Diffuse ModeをLightmap Diffuse、Color ModeをTexture、Lightmap ChannelをRedに設定することで解消できます。
同じところで詰まっている方の参考になれば幸いです。