2023.4.19こんにちは。情熱開発部アートデザイン課の菅野です!春を迎え暖かくなり、段々と日も延びてきましたね。今回は光にまつわる話題で、Unityで負荷をかけずにライトの点滅を作る方法についてご紹介します。※使用するUnityのバージョン:2021.3.11f1ライトの種類ゲーム制作を行う上で、ライトは必要不可欠ですよね。ライトが無いと真っ暗になってしまい、何も見えなくなります。ゲーム制作では「リアルタイムライト」と「ライトベイク」という2種類のライトを使用します。「リアルタイムライト」とは、その名の通りリアルタイムで周りを照らす事が出来るライトです。ライトの計算を毎フレーム行うため、ライトや影を動かしたり、ライトを点滅させる事も出来ます。「ライトベイク」とは、ライトから当たった光や落ちた影の情報を画像として保存し、オブジェクトに貼り付ける方法です。負荷削減のためにゲーム制作ではよく「ライトベイク」を使用しますが、上記の通り画像で保存されているため、以下のように光や影を動かす事が出来ません。動きのあるライトの表現は不可能です。リアルタイムライトを使用すればライトを点滅させる事が出来ますが、負荷が高くなってしまいます。すれば負荷をかけずにライトの点滅が表現できるのでしょうか?そこで役に立つのが「パーティクルシステム」です。画像を生成し、それらをアニメーション化することによって、液体、雲、炎などの流体をシミュレーションする方法を「パーティクルシステム」といいます。(※以降「パーティクル」と表記)早速ですが、Unityで「パーティクル」をシーンに追加してみましょう。System]からシーンに追加する事が出来ます。すると、画像のような球体のアニメーションがシーンに追加されると思います。これが「パーティクル」です。今回はこの「パーティクル」を流体ではなくライトに見立て、ライトの点滅を表現してみます。それでは実際に作ってみましょう!パーティクルでライトの点滅を作成1.今回は流体として使用しないためアニメーションを停止させ、パーティクルの数を減らします。(パーティクルの数)を「15」に設定2.オブジェクトに沿ってパーティクルを生成させます。・「Mesh」に「沿って生成させたいオブジェクト」をアタッチ・「Scale」(アタッチしたオブジェクトの大きさ)等はお好みで変更3.パーティクルを点滅させます。Editor」が出てきます。なるよう設定すると、パーティクルを点滅させる事が出来ます。上のタブは透明度を表しており、黒くなる瞬間に透明度も下げるようにすると綺麗に点滅して見えます。上記の方法で、簡単にライトの点滅を表現する事が出来ます。4.パーティクルの放射の頻度とタイミングを調整します。・「Bursts」の「+」を押すとパーティクル放出の詳細設定ができる※この辺の調整は個々の好みだと思うので、実際に色々調整してみて下さい。いう記事があるのでご参考にどうぞ!シーンに追加した木の位置にパーティクルの位置を合わせて、それらを複製してみました。リアルタイムライトのようにライトの周囲を照らす事は出来ませんが、パーティクルでライトの点滅のような表現をする事が出来ました!気になる負荷は?Unityでパフォーマンス情報を取得するためのツールである「プロファイラー」を使用して、負荷を確認してみましょう。パーティクルで負荷削減が出来たのかを調査します。試しにパーティクルと同じ数のリアルタイムライトを置き、ランダムではありませんが、点滅させてみました。ちなみに、リアルタイムライトは周囲を照らしてくれますが、ライトそのものが表示される訳ではありません。ライトの形のオブジェクトを置き、それを照らす事でライトの点滅を表現しています。(※リアルタイムライトの点滅の詳細については説明を省きます。)パーティクルとリアルタイムライトの負荷を比較してみましたが、以下のような結果になりました。下:パーティクルを使用プロファイラーの見方ですが、簡単に言うと「縦線グラフが上に行けば行くほど負荷がかかっている」状態です。リアルタイムライトは全体的に5ms(200FPS)のラインを上回っており、10ms(100FPS)のラインにも到達しそうですが、パーティクルは全体的に5ms(200FPS)のラインを下回っています。これにより、パーティクルを使用する事で大幅に負荷削減できた事が分かりました。まとめ今回はUnityの「パーティクル」にスポットライトを当ててみました。パーティクルで表現する事によって、リアルタイムライトを使用した時より負荷を軽減する事が出来ました。反対に、リアルタイムライトのように周囲を照らしたり影を生成したりする事は、パーティクルでは実現出来ません。どんなシーンでライトの点滅を使用するかによって、パーティクルとリアルタイムライトのどちらが最適なのかが変わると思います。株式会社ロジカルビートは一切の責任を負いません。understrap.com。