トラブルシューティング

症状から対処を引ける形式でまとめています。

オブジェクトがライトマップに入らない

次を順に確認してください。

  1. Contribute GI の Static フラグが付いているか(Inspector 右上の Static ドロップダウン)。
  2. オブジェクトと Renderer が有効か(無効のものは既定で収集されません)。
  3. シーンに Hikari Lightmapper1 個だけ置かれているか。

光や影が別の面ににじむ・漏れる

ほとんどの場合、ライトマップ UV(UV2)の重複が原因です。

  • モデルの Generate Lightmap UVs を ON にしてください。より高品質な xatlas 生成への切り替えは UV2 の生成 を参照してください。

床に密着した面の接地部分だけが漏れる場合は、Advanced の Exclude Hidden Texels を試してください(Hikari Settings の Advanced)。

ベイク結果がノイズっぽい

  • 環境光(スカイボックス・HDRI)が主光源で、窓や開口からしか光が入らない屋内シーンでは、Sampling > Env Light Samples を上げます(4 → 8 → 16)。環境光由来のノイズには Samples Per Texel を増やすよりはるかに安価に効きます。
  • Samples Per Texel を増やします(64 → 128 → 256)。
  • Denoise Mode が NL-Means になっているか確認し、Denoise Strength を上げます。

Play すると影がリアルタイムに戻る・ライトマップが外れる

他のライトマップベイクツールを併用していたシーンでは、そのツールが保存したバインドが Hikari の結果を上書きすることがあります。メニューの Hikari → Utility → Detach Foreign Lightmap Binding で切り離してから、再度ベイクしてください。

また、Unity 標準の Generate Lighting を実行するとベイク結果が上書きされます。Hikari 使用中は標準ベイクを実行しないでください。

「Hikari data was written by a newer format」というエラー

エンジンと Unity 側スクリプトのバージョンが食い違っています。.unitypackage を部分的にインポートした場合などに起きます。パッケージ全体を再インポートしてください。

ベイクが遅い

効果が大きい順に:

  1. Texels Per Unit を下げる(解像度を落とす)。
  2. Samples Per Texel を下げ、デノイザに任せる。
  3. Device で GPU を追加する(マルチ GPU 分担)。
  4. クラウドベイク にオフロードする。
  5. コースティクスが不要なら Caustic Mode を Off にする。

GPU が列挙されない・ベイクが始まらない

Hikari ウィンドウの Device に GPU が出てこない、またはベイクボタンを押しても進まないときは、次を確認してください。

  • GPU ドライバを最新にする。 Vulkan 対応のドライバが必要です。
  • Vulkan 対応 GPU があるか。 対応 GPU が無い環境では自動的にソフトウェア BVH で動作しますが、著しく低速です。
  • 他の Hikari プロセスが GPU を使っていないか。 別のベイクが動いていると、そのベイクが終わるまで待機します(Waiting for another Hikari process to finish. と表示されます)。

ベイク中に Unity がクラッシュする(TDR)

ベイク中に次のような Unity Error ダイアログが出てエディタが強制終了することがあります。

Failed to present D3D11 swapchain due to device reset/removed. This error can happen if you draw or dispatch very expensive workloads to the GPU, which can cause Windows to detect a GPU Timeout and reset the device. … This is an unrecoverable error and the editor will shut down.

これは Windows の TDR(Timeout Detection and Recovery) によるものです。GPU が一定時間(既定 2 秒)以内に OS へ応答しないと、Windows は「GPU がハングした」とみなしてデバイスを強制的にリセットします。リセットされると Unity は描画先(スワップチェーン)を失い、復帰できないためエディタごと終了します。

Hikari のベイクは GPU を長時間フルに使うため、その裏で Unity 自身の描画が 2 秒以内に終わらず TDR が発動する、という形で起きます。落ちているのは Hikari ではなく Unity 側で、Unity の不具合でもありません。

対処(まずこちら)

Hikari ウィンドウ(メニュー Hikari → Hikari)の Device セクションで、GPU をベイクに占有させすぎないように調整します(Device 設定)。

  1. GPU PriorityLow にする — ベイク中も Unity やデスクトップの描画が GPU を使いやすくなります。
  2. それでも落ちる場合は GPU Usage (%) を下げる(既定 90 → 50 など)— サブミットの合間に GPU をアイドルさせるため、Unity の描画が割り込む余地ができます。ドライバの優先度制御に依存せず、どの GPU でも効きます。

いずれもベイクは遅くなりますが、その分だけ Unity 側の描画に余裕が生まれ、TDR を回避できます。値を下げるほど安定しますが遅くなるため、落ちなくなる範囲で少しずつ調整してください。

それでも落ちる場合:TDR の緩和・無効化

警告自己責任で行ってください

以下は Windows のレジストリを変更して TDR を緩和・無効化する方法です。自己責任で行ってください。 TDR は本来、GPU がハングしたときに自動復旧させるための安全機構です。無効化すると、実際に GPU がハングした場合に自動復旧できず、画面が固まったままとなり電源長押しでの強制再起動が必要になります。レジストリの変更前にバックアップを取り、可能なら完全な無効化ではなくタイムアウトの延長TdrDelay)から試してください。

対象キー(regedit で開きます):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers
値の名前 内容
TdrDelay DWORD GPU の応答を待つ秒数。既定は 2まずはこちらを少し延ばして、落ちなくなる範囲で最小限にとどめるのが安全側です
TdrLevel DWORD 0 で TDR の検出自体を無効化(最終手段)。既定は 3(タイムアウト時に復旧)
  • 値が存在しない場合は新規に DWORD (32 ビット) 値として作成します。
  • 変更後は Windows の再起動が必要です。
  • 元に戻すには、作成した値を削除する(または TdrDelay = 2 / TdrLevel = 3 に戻す)だけです。