Categories: Unity

UnityのWebGLでビルドした時にPoint LightやSpotlightが表示されない問題

今回はUnityのシーンをWebGLでビルドした時にぶち当たったライトの問題について紹介したいと思います。

WebGLでBakeライトとRealtimeライトを同時使用するとRealtimeライトが表示されない

これまでのチュートリアルで作成したシーンはほとんどRealtimeライトだけ、またはBakeライトだけを使用していました。今回はWebGLで両方のライトを使用した時にRealtimeライトが反映されない問題がやっと解決したので紹介したいと思います。

BakeライトとRealtimeライトを同時使用する

簡単なテストシーンを用意しました。[Lighting]ウィンドウの設定は環境の影響をすべて無しにするため、このようになっています。画像拡大

BakeライトのArea Lightでわずかに照らされた部屋はこんな感じです。

天井にSpotlightを配置、左右の壁際にPoint Lightを配置しました。[Game]ビューでみると、ゲームを再生してもRealtimeライトは壁を照らしています。

ライトの設定はこのようになっています。画像拡大

これをWebGLでビルドするとこんなことに。RealtimeライトのPoint LightとSpotlightが表示されていません。

Unityの公式フォーラムで解決方法を発見

手探りで色々と設定を変更してWebGLビルドを繰り返しましたが変化なし。諦めてWebで検索したところ、Unityの公式フォーラムに解決方法のスレッドを見つけました!
Spotlight from a torch now showing in webGl, alternatives? – Unity Community

スレッドの内容を一部抜粋して翻訳しました。こんな感じです。

完全に真っ暗なシーンがあり、プレイヤーのトーチによって照らされています。これはスポットライトを使用しています。
ベイクGIを使用していますが、スポットライトがWebGLビルドに表示されません。これはサポートされていないのでしょうか?なにか代替案はありますか?スタンドアロンのビルドは正常に動作しています。

バグレポートを提出してもらえますか?


ちょうどバグレポートを提出しました。RealtimeのスポットライトはWebGLでサポートされることになっていますか?


これは私たちが現在取り組んでいる、WindowsでDeferredレンダリングを使用している場合の問題です。当分の間、あなたはForwardレンダリングを使用することでうまくいくはずです。


しかしレンダリングパスはForwardレンダリングに設定しているのですが… 他にアイデアはありませんか?


ありがとうマルコ!問題はライトのrender modeでした… それを “Important”に設定しました。そして、現在動作しています…

答えはライトのRender Mode設定だった!

ということで、さっそく設定を変更してみました。まずはCameraのRenderring Path設定を[Forward]に変更しました。

そしてライトの設定。Render Mode設定を[Important]に変更しました。画像拡大

変更した設定でWebGLでビルドすると、ちゃんと表示されました!

ちなみにCameraのRenderring Path設定をデフォルトの[Use Graphics Settings]に戻しても大丈夫でした。

ついでにライトのShadow設定も確認してみました。シーン内に球オブジェクトを置いて、ライトのShadow Type設定を[Hard Shadows]に変更し、[Game]ビューでみるとこんな感じです。

しかし、これをWebGLでビルドすると、影が表示されません。うーん。無念!

影の表示についてはまたあらためて調べてみることにしたいと思います。

今日のひとこと

画像素材:フリー写真素材ぱくたそ

corevale

View Comments