【Unity WebGL】Appleに光あれ!3Dハウスに明かりがついた日

Apple製品での効果音再生問題は、Unityエディタ側のアップデートによって改善された。どんどん良い方向に向かっていることは間違いないが、まだまだ乗り越えるべき課題は多い。

照明が機能していない

Apple製品においてライトが正しく機能していない

音の問題の次は、なんと光の問題に追われることに!今回の3Dコンテンツでは照明として「Point Light(ポイントライト)」というパーツを使っていたのですが、iPhoneやMacではこのライトからの光がテクスチャに反映されないんです。つまり、電気をつけても部屋が真っ暗なまま…。

Apple製品の仕様?

ライトの問題もApple製品の仕様?

光が反映されないのは、今回のスマートホーム体験を目的にしたコンテンツとしてはとても致命的!前回の効果音再生のこともあるので、Apple特有の現象であると仮定して調べてみることにしました。

特定のライトとsafariの組み合わせで起こる問題

同様の問題についてバグ報告が上がってきていた

この現象についてUnity公式のフォーラムにバグ報告がされていました。「POINT LIGHTS AND SPOT LIGHTS DO NOT FUNCTION IN SAFARI 12 (safari 12でポイントライトとスポットライトが機能しない)」とのことで、2018.2.9f1のバージョンから解消されていない問題であるよう。

Directional Light(ディレクショナルライト)を配置する

Directional Light(ディレクショナルライト)であれば正しく動作するようだ

今回の件について具体的な解決策は見つかりませんでしたが、それ以外のライトで機能するものをかわりに採用することに決定。実際に動作を確認できたのは、「Directional Light(ディレクショナルライト)」というパーツ。

ただポイントライトやスポットライトのように周囲を照らすものではなく、直線的にしか光源が反映されないのが難点。光源の処理に負荷がかかるので可能な限り数は少なく、かつ部屋全体が照らされるように配置するところに苦心しました。

別案として

通常表示用のテクスチャ以外にもう1パターン光が当たったことを表すテクスチャを用意する案

仮にUnityエディタ側で用意されたライトが全滅した場合、別案が採用される予定でした。その案は「光が反映されたテクスチャを別途準備する」というもの。最悪の場合、部屋の中に配置したすべての3Dモデルすべてに光が当たった場合のテクスチャを用意する必要があったというわけです。

幸いなことに正常に動作するライトが残っていたので、この案を採用するには至りませんでした。ラッキー。

光は無事にともされた

こうして代替のライトを使うことで、Apple製品でのスマートホームに明かりをともすことができました。無事に照明が準備できたのですが、今度はWebGLとcanvasが絡む画質の問題が浮上。まだまだ完成までの道のりは遠いのであった。