今回はUnityのシーンをWebGLでビルドした時にぶち当たったライトの問題について紹介したいと思います。
これまでのチュートリアルで作成したシーンはほとんどRealtimeライトだけ、またはBakeライトだけを使用していました。今回はWebGLで両方のライトを使用した時にRealtimeライトが反映されない問題がやっと解決したので紹介したいと思います。
簡単なテストシーンを用意しました。[Lighting]ウィンドウの設定は環境の影響をすべて無しにするため、このようになっています。画像拡大
BakeライトのArea Lightでわずかに照らされた部屋はこんな感じです。
天井にSpotlightを配置、左右の壁際にPoint Lightを配置しました。[Game]ビューでみると、ゲームを再生してもRealtimeライトは壁を照らしています。
ライトの設定はこのようになっています。画像拡大
これをWebGLでビルドするとこんなことに。RealtimeライトのPoint LightとSpotlightが表示されていません。
手探りで色々と設定を変更してWebGLビルドを繰り返しましたが変化なし。諦めてWebで検索したところ、Unityの公式フォーラムに解決方法のスレッドを見つけました!
Spotlight from a torch now showing in webGl, alternatives? – Unity Community
スレッドの内容を一部抜粋して翻訳しました。こんな感じです。
バグレポートを提出してもらえますか?
ちょうどバグレポートを提出しました。RealtimeのスポットライトはWebGLでサポートされることになっていますか?
これは私たちが現在取り組んでいる、WindowsでDeferredレンダリングを使用している場合の問題です。当分の間、あなたはForwardレンダリングを使用することでうまくいくはずです。
しかしレンダリングパスはForwardレンダリングに設定しているのですが… 他にアイデアはありませんか?
ありがとうマルコ!問題はライトのrender modeでした… それを “Important”に設定しました。そして、現在動作しています…
ということで、さっそく設定を変更してみました。まずはCameraのRenderring Path設定を[Forward]に変更しました。
そしてライトの設定。Render Mode設定を[Important]に変更しました。画像拡大
変更した設定でWebGLでビルドすると、ちゃんと表示されました!
ちなみにCameraのRenderring Path設定をデフォルトの[Use Graphics Settings]に戻しても大丈夫でした。
ついでにライトのShadow設定も確認してみました。シーン内に球オブジェクトを置いて、ライトのShadow Type設定を[Hard Shadows]に変更し、[Game]ビューでみるとこんな感じです。
しかし、これをWebGLでビルドすると、影が表示されません。うーん。無念!
影の表示についてはまたあらためて調べてみることにしたいと思います。
View Comments