プロジェクト

全般

プロフィール

タスク #496

完了

1LDK室内ワールドの商用レベルライティングセットアップ

タスク #496: 1LDK室内ワールドの商用レベルライティングセットアップ

エージェント ちゃん さんが5日前に追加. 5日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/07/01
期日:
進捗率:

100%

予定工数:

説明

1LDKマンション想定の室内ワールド(Sanyan_Home.unity)について、商用レベルの見え方を目指したライティングセットアップを行う。

現状(着手前の確認結果)

  • ベースジオメトリ: Assets/mcp-world/chill_world.fbxstatic_obj 配下、3パーツ、Static フラグ ON)
  • ライトマッパー: Bakery(!ftraceLightmaps にレンダー設定あり。bounces: 5 / GI Samples: 16 / texelsPerUnit: 20 / tileSize: 512)
  • ライト: Directional Light 1灯、Bakery Point Light 1灯(light1Downlights 配下)のみ
  • 未配置: Reflection Probe、Light Probe Group、LTCGI・LightVolumesコンポーネント(パッケージはCLAUDE.md記載だがシーン未配置)

対応方針(想定作業項目)

  • Downlightsの量産・配置(LDK・キッチン・寝室・洗面など各部屋の照明器具位置に合わせて Bakery Point Light を複製)
  • BakerySky コンポーネントの追加(Skybox とのGI整合)
  • Reflection Probe を部屋ごとに追加
  • Light Probe Group を壁沿い・家具の陰・床上下ペアで配置
  • Directional Light の色温度制御を有効化し、昼光の色味を意図的に調整
  • LTCGI / LightVolumes の導入要否・使いどころ(窓からの光をLTCGIエリアライト化、動的オブジェクト用LightVolume配置など)を検討し、必要な範囲でシーンに組み込む

見た目の最終判断(ライトマップの繋ぎ目、色味の整合、パフォーマンス実測)は Unity Editor / VRChat 実機でのユーザー確認が必要。

エージェント ちゃん さんが5日前に更新 操作 #1

確認事項 : Reflection Probe / Light Probe Groupの現状確認

Unity MCP経由でEditor上の実オブジェクトを確認したところ、チケット起票時の前提と実態にズレがあったので記録を修正します。

  • Lighting/ReflectionProbe: 実際に ReflectionProbe コンポーネント配置済み。Size 11x3x10、Box Projection OFF、Mode=Baked、bakedTexture: null(未ベイク)。部屋全体に対して1個のみ。
  • Lighting/LightProbes: Transform のみで LightProbeGroup コンポーネントは無し。空のプレースホルダー。

確認したいこと:

  • なし(対応方針の想定作業項目のうち「Reflection Probe追加」は既存1個の見直し・増設に、「Light Probe Group配置」はこのオブジェクトへのコンポーネント追加から着手する形に読み替えて進めます)

いづ さん さんが5日前に更新 操作 #2

Directional Lightは2つ用意して、カリングマスクでプレーヤー用とそれ以外用でわけて運用するみたいな手法があった気がする。
インターネット調査が必要。

エージェント ちゃん さんが5日前に更新 操作 #3

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

制作に着手しました。

  • ブランチ: feature/496
  • 対応方針: Bakery前提でDownlight量産・BakerySky追加・Reflection Probe見直し/増設・Light Probe Group配置・Directional Lightの色温度制御・LTCGI/LightVolumes導入検討を、Unity MCP経由で実施する。

エージェント ちゃん さんが5日前に更新 操作 #4

進捗 : Downlight/Reflection Probe/Light Probe/色温度/BakerySkyをUnity MCP経由で実施しコミット

コミット: e64eebf (feature/496)

  • Downlight: light1Downlight_Living_01 に改名し、Living/Dining/Kitchen/Bedroom/Entry に計9本を追加(合計10本、天井高さ y=2.3)
  • Reflection Probe: 既存の1個(部屋全体カバー)を ReflectionProbe_Living としてリビングの範囲に再調整し、Dining/Kitchen/Bedroom/Entry 用4個を新規追加(合計5個、全て boxProjection 有効)
  • Light Probe Group: 空オブジェクトだった LightProbes に LightProbeGroup を追加。各部屋の壁際2カ所+中央1カ所 × 床/中間/天井の3高さ = 45プローブを配置
  • Directional Light: useColorTemperature を有効化し colorTemperature=5800K に設定
  • BakerySkyLight: Lighting 配下に新規追加(SkyboxからのGI取得用、intensity=1)

作業後にUnityコンソールにエラーなしを確認し、シーンを保存・コミット済み。

確認したいこと : LTCGI / LightVolumesの導入について

パッケージ(at.pimaker.ltcgi, red.sim.lightvolumes)は導入済み。窓(Window_Living_S 等、MAT_Glass)を LTCGI_Emitter にすれば窓からの日光エリアライト化は技術的に可能だと確認した。

ただしこの導入は:

  • LTCGI_Controller の配置と Bake(エディタ操作でarealightテクスチャを生成)
  • 受け取る側(lilToonなど)のマテリアルで LTCGI キーワードを個別に有効化
  • 配置後の見え方の視覚確認(明るさ・反射の強さの調整)
    が必要で、盲擎で自動適用するとマテリアル崩れのリスクがあるため、今回のパスでは見送った。LightVolumesはGIM_Pickup/GIM_Pet_Catなどの動くオブジェクト用の適用先があるが、同様の理由で未着手。

確認したいこと:

  • LTCGI/LightVolumesは別チケットに切り出すか、このチケットのさらなる作業として続行するか

エージェント ちゃん さんが5日前に更新 操作 #5

進捗 : 照明器具メッシュのLight未設定を修正(ユーザー指摘)

コミット: a0916d3 (feature/496)

ユーザーから Pendant_Dining / Floor_Lamp / Bedside_Lamp にLight設定がないとの指摘を受けて確認したところ、確かに三つとも MAT_Light_Warm を付けただけで実際のLight/BakeryPointLightが無い状態だった。横展開で Kitchen_TaskLightCove_Light も同様の抜け漏れだったので合わせて修正。

  • Pendant_Dining → BakeryPointLight×3(ペンダントヘッド単位)
  • Floor_Lamp / Bedside_Lamp → BakeryPointLight×1ずつ
  • Cove_Light / Kitchen_TaskLight → 細長い帯状メッシュなので点光源ではなく BakeryLightMesh(面発光)を直接付与
  • 色は全て MAT_Light_Warm/MAT_Light_Cove の発光色に合わせた暖色(大例R1/G0.85/B0.65)

エージェント ちゃん さんが5日前に更新 操作 #6

進捗 : Directional Lightを環境用/アバター用の2灯に分割

コミット: 6c5baa5 (feature/496)

【確認したいこと】でいづさんが残していた「2つのDirectional Lightをカリングマスクでプレイヤー用/それ以外用に分ける手法を調査し、実装した。VRChatワールド制作で一般的に使われている手法で、環境のムード照明とは独立してアバターを安定した明るさで見せる目的。

  • Directional LightDirectional Light (Environment) に改名。Culling Maskから Player(9) / PlayerLocal(10) レイヤーを除外(Mixed、ベイク対象は継続)
  • 新規 Directional Light (Avatar) を追加。Culling Maskは Player+PlayerLocal のみ、Realtime、Shadowsなし、回転は環境側と同じ、colorTemperature=5800K、intensity=1.2

参考: VRChatワールド制作でのavatar lightテクニックとして一般的に知られている手法(Player専用Realtime Directional Lightを別用意してアバターをベイク環境と切り離す)。

確認したいこと:

  • Avatar用のintensity(1.2)・colorTemperatureは仮の値なので、Unity/VRChat実機での見え方を確認して調整が必要

エージェント ちゃん さんが5日前に更新 操作 #7

進捗 : Cove_LightのBakeryLightMesh適用範囲を修正

コミット: 70544df (feature/496)

いづさんから「Cove_Lightって設定済み?バー型のライトなんですが」と指摘を受けて再確認したところ、前回(a0916d3)の実装に不正確さがあったので修正した。

  • Cove_Light はMAT_Wood_Oak(木部モールディング)とMAT_Light_Cove(発光チャンネル)の2サブメッシュを持つ単一メッシュで、前回はBakeryLightMeshをこのオブジェクトに直接付与していたため、木部モールディングもGI発光面としてベイクに含まれてしまう状態だった(実際に発光すべきのはチャンネル部分のみ)。
  • MAT_Light_Coveのサブメッシュ(24トライ)だけを別メッシュとして切り出し、子オブジェクト Cove_Light_Emitter に配置。BakeryLightMeshはこちらに付け直し、親オブジェクトはGI発光対象から除外。
  • 見た目の変化なし(同一形状・同一マテリアルを同位置に重ねて描画)をスクリーンショットで確認済み。

なおKitchen_TaskLightは単一マテリアル(MAT_Light_Warmのみ)なのでこの問題はなく、修正不要。

エージェント ちゃん さんが5日前に更新 操作 #8

進捗 : LTCGIの窓エリアライト化を実装し、本チケットはここまでで区切り

コミット: b326558 (feature/496)

VRCLV(LightVolumes)はPickup本体が先の方が二度手間にならないといういづさんの指摘を受け、以下の2つに分離して起票した:

  • #497 動くPickupオブジェクト本体の実装(Mug/Blanket/Cat)
  • #498 VRC LightVolumesを動くPickupオブジェクトに適用(#497にブロックされる)

本チケット(#496)はLTCGIの実装をもって完了とする。

  • LTCGI_ControllerLighting 配下に追加
  • LTCGI_Emitter_Windows(1オブジェクト)を追加し、EmissiveRenderersに4つの窓(Window_Living_S/Dining_S/Living_E/Bedroom_E)を登録。LTCGI_Emitterは拡散光のみ・非テクスチャで複数オブジェクトに一括適用できる軽量モードなので、四つの窓をまとめて1個にした
  • 受け取り側: MAT_Floor_Oak / MAT_Wall_Paint(実は lilToon ではなく Filamented/StandardRoughness シェーダーを使用していた)にシェーダーネイティブの _LTCGI トグル([Toggle(_LTCGI)])を有効化。マテリアル側はタグ"LTCGI"="_LTCGI"で定義されているものをそのまま使っているので、自作キーワードや強引な一括適用ではない

重要: LTCGIの発光色は対象レンダラー自身のベイク済みライトマップ(DiffuseFromLm)から取得する仕様なので、以下2段階のベイクが完了するまでは見た目に反映されない(いずれも長時間・ダイアログ進行のEditor操作なので、ライトベイク同様このセッションでは実行していない):

  1. 通常のBakeryライトマップベイク
  2. Unityメニュー Tools > LTCGI > Bake Shadowmap and Normal Lightmap(Bakery検出時は「Yes, use Bakery」を選べばこの1ステップで2も連続実行される)

この2段階ベイク後、VRChat実機OPlay Modeで窓からの日光が床・壁に回り込むことを確認してほしい。

チケット全体のサマリー

#496で実施した内容(コミット順):

  1. Downlight量産・配置(e64eebf
  2. Reflection Probe見直し/増設・Light Probe Group配置・色温度制御・BakerySkyLight(同 e64eebf
  3. 照明器具(Pendant/Floor Lamp/Bedside Lamp/Cove Light/Kitchen TaskLight)の実光源追加(a0916d3
  4. Directional Lightを環境用/アバター用の2灯に分割(6c5baa5
  5. Cove_LightのBakeryLightMesh適用範囲修正(70544df
  6. LTCGI窓エリアライト化(b326558

残っているのは Unity Editor での実際のライトマップベイク(Bakery)とLTCGI Bake Shadowmap、そしてVRChat実機での見え方確認。これらはユーザー側での実施が必要。

確認したいこと:

  • ベイク完了後の見え方を確認して問題なければMRを作成したい。MR作成のご指示をお待ちしています

エージェント ちゃん さんが5日前に更新 操作 #9

進捗 : LTCGIの VRC Light Volumes 連携で発生していたNullReferenceExceptionを修正

コミット: 0b07331 (feature/496)

いづさんから「NullReferenceExceptionがずっと出ている」と報告を受けた。原因を特定して修正した。

原因: at.pimaker.ltcgired.sim.lightvolumes(VRC Light Volumes) の両方が導入済みの場合、LTCGIは LTCGI_Controller がシーンに存在するだけで自動的に LV_LTCGI_Adapter を組み込もうとする仕様だった。VRC Light Volumesの実設定(LightVolumeManager)がシーンに無い状態だと、このアダプタの DoUpdate() が毎フレーム NullReferenceException を投げ続ける。

対応: Lighting 配下に空の LightVolumeManager スタブ(LightVolumeInstancesは0件)を追加し、この依存を満たして例外を抱えなくした。

重要: これはVRC Light Volumesの本格的なセットアップ(LightVolumeSetup・アトラス・実インスタンス)ではなく、LTCGIとの依存を満たすための空のスタブだけ。VRC Light Volumesの実際の適用は引き続き#498(#497にブロック)で行う。

コンソールログをクリアして数フレーム経過後に新規エラーが発生していないことを確認済み。

エージェント ちゃん さんが5日前に更新 操作 #10

進捗 : LTCGIにBalcony_GlassとAffectAvatarsを追加し、実装作業を完了

コミット: 8ce2097 (feature/496)

  • LTCGI_Emitter_Windows のEmissiveRenderersに Balcony_Glass を追加(5レンダラーに)
  • AffectAvatars を true に設定。窓/バルコニーの日光がベイク環境とは独立してリアルタイムでアバターにも回り込むようになった

Unityコンソールエラーなしを確認済み。これで本チケットの実装作業は完了。

本チケットで実施した全コミット(feature/496)

  1. e64eebf Downlight量産・Reflection Probe見直し/増設・Light Probe Group配置・色温度制御・BakerySkyLight
  2. a0916d3 照明器具(Pendant/Floor Lamp/Bedside Lamp/Cove Light/Kitchen TaskLight)の実光源追加
  3. 6c5baa5 Directional Lightを環境用/アバター用の2灯に分割
  4. 70544df Cove_LightのBakeryLightMesh適用範囲修正
  5. b326558 LTCGI窓エリアライト化
  6. 0b07331 LTCGI×VRC Light Volumes連携のNullReferenceException修正(LightVolumeManagerスタブ)
  7. 8ce2097 LTCGIにBalcony_Glass追加・AffectAvatars有効化

残っているのはUnity Editorでの実際のライトマップベイク(Bakery)とLTCGI Bake Shadowmap、VRChat実機/Play Modeでの見え方確認。これらはユーザー側での実施が必要。

確認したいこと:

  • MR作成のご指示をお待ちしています

エージェント ちゃん さんが5日前に更新 操作 #11

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

対応が完了しました。

概要

1LDKマンション想定の室内ワールド(Sanyan_Home.unity)に商用レベルの見えを目指したライティングセットアップを実施。

変更点

  • Downlightの量産・配置(各部屋に計10本)
  • Reflection Probeを部屋ごとに見直し・増設(1個→5個、boxProjection有効)
  • Light Probe Groupを各部屋の壁際・中央×床/中間/天井の3高さで配置(45プローブ)
  • Directional Lightの色温度制御を有効化し、環境用/アバター用の2灯に分割(カリングマスクでPlayer/PlayerLocalを分離)
  • BakerySkyLightを追加(SkyboxからのGI取得)
  • 照明器具(Pendant_Dining/Floor_Lamp/Bedside_Lamp/Cove_Light/Kitchen_TaskLight)に実光源を追加(元々マテリアルのみで発光していなかった)
  • Cove_LightのGI発光範囲を修正(木部モールディングを誤って発光面に含めていたのを、発光チャンネルのみの別メッシュに分離)
  • LTCGIによる窓・バルコニーガラスのエリアライト化、AffectAvatarsを有効化してアバターにもリアルタイムで日光が回り込むように設定
  • LTCGI×VRC Light Volumes連携で発生していたNullReferenceExceptionを、空のLightVolumeManagerスタブ追加で解消

確認

  • Unity MCP経由で各コンポーネント設定後、Unityコンソールにエラーがないことを都度確認
  • Scene view / Game viewのスクリーンショットで配置・見た目に問題ないことを確認
  • YAML差分・参照整合を確認

関連 MR

  • !1 (feature/496 → main)

残課題 / 補足

  • 通常のBakeryライトマップベイクとLTCGIの Tools > LTCGI > Bake Shadowmap and Normal Lightmap、そしてVRChat実機/Play Modeでの最終見え方確認は未実施(ユーザー側で実施が必要)
  • 派生チケット: #497(動くPickupオブジェクト本体の実装)、#498(VRC LightVolumesをPickupオブジェクトに適用、#497にブロック)

他の形式にエクスポート: PDF Atom