YamaPlayerでLTCGIを使用するための設定方法についてのメモです。

「LTCGIを使用」にチェックを入れただけでは、LTCGI Shadowmapがベイクされなかったり、期待する動作にならなかったため、以下の手順で追加の設定を行いました。

Note

この記事で紹介する手順は、Unityの基本的な操作とVRChatワールドのアップロード経験がある方を対象としています。 また、シーン内のオブジェクトが Static に設定されているなど、ライトマップベイクが可能な状態であることを前提としています。

LTCGI Shadowmapをベイクしてライティングを適用した結果のVRChatワールド
Figure 1. LTCGI Shadowmapをベイクしてライティングを適用した結果 (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対応シェーダー)

結論

ざっくりとした手順は以下の通りです。

  1. LTCGI導入

  2. シーン内オブジェクトのマテリアルをLTCGI対応シェーダーに変更

  3. YamaPlayerで「LTCGIを使用」にチェック

  4. YamaPlayerの下にあるScreenオブジェクトのLTCGI_Screenコンポーネントを設定

    • Diffuse Mode: Lightmap Diffuse (ベイクされたデータを使用した高品質な拡散反射)

    • Color Mode: Texture (ビデオプレイヤーのテクスチャを光源として使用)

    • Lightmap Channel: Red (LTCGI Shadowmapベイク用のチャンネル設定)

  5. 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) へのリンク表記または LTCGI Attribution の設置が必要です。
Attribution Requirements | LTCGI Documentation

LTCGIのインストール (VCC)
  • VPMリポジトリ: https://vpm.pimaker.at/index.json

  • パッケージ名: LTCGI

YamaPlayerのインストール (VCC)
  • VPMリポジトリ: https://vpm.kwxxw.net/index.json

  • パッケージ名: YamaPlayer

Filamentedのインストール (Unity Package Manager)
  • Gitリポジトリ: https://gitlab.com/s-ilent/filamented

VCCでのLTCGIパッケージのインストール画面
Figure 2. VCC (VRChat Creator Companion)
Unity Package ManagerでのFilamentedパッケージのインストール画面
Figure 3. Unity Package Manager

マテリアルをLTCGI対応シェーダーに変更

スクリーンの光を受けるオブジェクトのマテリアルをLTCGI対応シェーダーに変更します。

今回ワールドのオブジェクト (SphereとPlane) のマテリアルをFilamentedシェーダーにしています。 また、光が当たっているのをわかりやすくするため、Directional LightとSkyboxを削除しています。 (Static にチェックを入れるのも忘れずに。)

Filamentedシェーダーを適用したマテリアルのインスペクター画面
Figure 4. マテリアルをLTCGI対応シェーダーに変更
Warning
Filamentedシェーダーを使用する場合、「LTCGI Support」にチェックを入れるのを忘れないようにしてください。

YamaPlayerの設定

YamaPlayerの「LTCGIを使用」にチェックを入れると、自動でLTCGI_Controllerを作成して設定してくれます。

YamaPlayerのインスペクターで「LTCGIを使用」にチェックを入れた画面
Figure 5. YamaPlayerの「LTCGIを使用」にチェック
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.
ベイク失敗時に表示されるエラーメッセージ
Figure 6. LTCGIエラーメッセージ

有効な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ベイク用のチャンネル設定)

LTCGI_Screenコンポーネントの設定画面
Figure 7. LTCGI_Screenコンポーネントの設定
Diffuse Mode

スクリーンの光の拡散方法を指定します。パフォーマンス改善のために無効にする No Diffuse 、LTCアルゴリズムバージョンの LTC Diffuse 、LTCGI Shadowmapベイクで計算されたデータを使用する Lightmap Diffuse の3つのモードがあります。Lightmap Diffuse を選択すると、ベイクされたデータを使用して静的オブジェクトに対して高品質かつ低負荷なライティングが可能になります。

Color Mode

発光色のソースを指定します。YamaPlayerなどのビデオプレイヤーと連携する場合、Texture を選択することで動画の映像に基づいたリアルタイムなライティングが行われます。また、Texture Index0 のままにしておいてください。インデックス 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」を実行してください。

LTCGI_Controllerのインスペクターでベイクを実行するボタン
Figure 8. LTCGI ShadowmapとUnity標準のライトマップのベイク
Unityのライトマップベイク中のプログレスバー画面
Figure 9. ベイク中の画面

ビルドして動画が再生されると、スクリーンからの光をオブジェクトが受けているのがわかります。

YamaPlayerの映像によってオブジェクトが照らされている実行結果
Figure 10. 実行結果 (Ambient Color、Main Cameraの背景色を黒にした場合)

まとめ

YamaPlayerで「LTCGIを使用」にチェックを入れるだけではLTCGI Shadowmapのベイクに失敗します。 YamaPlayerの子オブジェクト「Screen」に追加されているLTCGI_Screenコンポーネントで、Diffuse ModeをLightmap Diffuse、Color ModeをTexture、Lightmap ChannelをRedに設定することで解消できます。

同じところで詰まっている方の参考になれば幸いです。