見出し画像

星街すいせいや宝鐘マリンのライブを彩った照明システム

こんにちは。
カバー株式会社のクリエイティブ制作本部のHと申します。

私はUnrealEngineプロジェクトの開発ディレクターを担当していますが、直近では弊社所属タレントの星街すいせいのHoshimachi Suisei Live Tour 2024や宝鐘マリンの宝鐘マリン1stライブなどのライブの照明システムの開発も担当しておりました。今回はこれらのライブで使われたUnityの照明システムを中心にお話したいと思います。

照明演出で目指したもの

まずは、照明演出が分かりやすいライブパートの1つをご紹介させていただきます。

【チラ見せ】宝鐘マリン1stライブ「Ahoy!! キミたちみんなパイレーツ♡」【DAY2】

動画はこちらからご視聴ください。
https://youtu.be/hmS_z-2epcM?t=2675

ライブにおいて、照明演出はライブの重要なファクターであり、ご来場いただいたお客様に非日常の体験を提供するためにも欠かせない演出の1つです。「さいたまスーパーアリーナ」や「Kアリーナ横浜」を始めとした会場で、来ていただいたお客様に一期一会の最高のライブ体験を提供するためにも、照明でライブを盛り上げていくことは重要なミッションだと考えていました。

一方で、照明はあくまでタレントさんを華やかに彩るためのお化粧でもあり、照明がメインとなってしまっては本末転倒です。どうすれば、タレントさんの魅力を引き出した照明にできるか、そのアプローチを考えることからスタートしました。

その答えとして今回のゴールに設定したのが、照明で生まれる「影の表情」をしっかりと表現していくことと、会場の照明とリンクしたライブならではのダイナミックな「光の立体感」の実現でした。この2つの表現を達成することで、会場側の照明にも負けないタレントさんの迫力ある照明パフォーマンスを目指しました。

勿論、ライブの真価は照明システムだけで決まるものでは全くなく、素晴らしい照明デザインをされた照明担当さんや、関わった多くのスタッフの皆様、何よりタレントさんご自身の圧倒的なパフォーマンスがあったからこそ実現できたものだと確信しています。私が担当してきたものはライブを構成する中でも微々たるものですが、少しでも皆様にライブの照明演出がよかったと思っていただけたなら幸いです。

照明演出の実現に向けた3つのゴール

ここからはUnityの開発者向けの内容となりますが、照明演出の実現に向けて、まず照明システムの開発は以下の3つを達成することをゴールに定めました。

  1. 「影の表情」と「光の立体感」の実現

  2. 「コストパフォーマンス」の高いシステム

  3. 「制作環境」の整備

影や光による表現向上は重要な要素の1つですが、ライブ制作の視点でみると、他にも解決しなくてはならない課題があります。

その1つが「コストパフォーマンス」です。これは幾つかの意味合いを持っていますが、1つは処理負荷のパフォーマンスで、電源容量が限られたライブ会場で稼働するPCを想定してミドルレンジのビデオカードでもレンダリング可能な描画負荷に収まるように設計しています。

他には工数面のコストでは、エンジニア1名でシステムを管理できるように設計しています。例えば、ライブでは様々なシェーダが利用されていますが、基本的にはどのシェーダも3つのインクルードファイルを指定することで、照明システムに対応できるようにしています。また、自動化もしっかり整備することで、一人でも他のプロジェクトの片手間で保守できるレベルでの運用が可能になっています。

もう1つ重要だったのは「制作環境」の整備です。デザイナーがエンジニアのサポートなしに制作が行えるよう、ツールによる自動設定やチェック環境、マニュアルなどにも力を入れてきました。また、多くの照明パターンやテスト計画表を作成することで、様々な状況化でルックが破綻しないよう事前テストできる環境も整えています。こうした制作環境の構築は、属人化を防ぐという点でも効果的でした。

ここからは、新しい照明演出の実現していくためのシステムについてお話させていただきます。

照明システムの開発について

照明システムのゴール方針を決めた後は、約1年前に実施されたhololive Xmas AR LIVE 『Sweet Happy Holiday』の照明システムをベースに、約2か月ほどかけて改修を行いました。

※ 下記リンクに短いダイジェストがございますので、是非こちらもご覧いただければ幸いです。

今回の開発期間が2か月ほどだったのは、デザイナーの制作が始まる前には照明の仕様をFIXしなくてはならず、ライブの半年前には完成させる必要があったためでした。

照明演出のゴールとして、今回は「影の表情」と「光の立体感」の実現を設定しましたが、逆に言えば、この2つの設定は2か月という開発期間で実行可能な内容に絞り込んだ結果でもありました。この選択を間違えてしまうと、半年後のライブを台無しにしてしまう可能性もありましたが、この開発がスタートする前から次に目指すべき照明の表現イメージは見えていましたので、とくにブレることなく開発は進められたと思っています。

次は、開発したライトシステムの実装について、具体的にご説明させていただきます。

独自のライトシステム

まずライトシステムの構築にあたり、Unity標準のライトを利用するか、それとも独自のライトシステムを実装するかの検討を行っていました。

なぜ、独自のライトシステムを検討したのか、そのメリットとデメリットを以下に簡単にまとめさせていただきました。

メリット

  • トゥーンレンダリングに適したライティングのカスタマイズが可能

  • 最適化の幅が広がる

デメリット

  • Unity公式のライトのアップデートの恩恵を受けられない

  • 保守コストが高い

基本的に一般的なゲームやアニメに見られるトゥーン調の表現を目的とするのであれば、Unity標準のライトで問題ありません。しかし、ライブでは多数のライトを扱う必要があります。これは多くの難しい課題を持っており、たった2つのライトでも破綻した見た目になることは容易にありえます。こうした問題を回避するにも、独自にライトシステムを実装するのは必須と考えました。

また、今後のパフォーマンスの最適化に向けても、独自のライトシステムが望ましいと判断しました。ライブ会場では電源容量の制約があるため、スタジオ環境とは異なり、何台もの高性能なレンダリングPCが使えるわけではありません。一台のPCで複数のカメラアングルをレンダリングするのがほとんどですので、低負荷で多数のライトを扱える必要がありました。

誤解を招かないようにお伝えしますと、パフォーマンスの最適化の観点として、基本的にはGameEngineを利用する場合は、可能な限り公式の機能を使用するのが望ましいです。独自に実装してしまうと、公式の最適化の恩恵が一切受けられないデメリットが出てきてしまうためです。とくにUnityの場合は、URPであればForward+が利用できるためUnity標準のライトを使用するべきなのですが、今回はBulit-inの利用だったため、多数ライトの最適化の限界があると考え、今回は独自の実装を行うことを選択しました。

ここからは独自のライトシステムで行った実装について、説明させていただきます。

ライトコンポーネント

Unityの標準ライトの代わりとなるライトの実装にあたり、まず独自のライトコンポーネントが必要となります。

そのため、要件として以下の機能をサポートするよう設計しました。

  • DMXのサポート

  • 標準ライトと同様のライトのパラメータやGizmos(ギズモ)のサポート

  • Mirrorによる複数台のPCでのアプリ間の同期

DMXは通信規格の1つで、主にライブ会場など様々な舞台照明などで使用されています。私がDMXをバーチャルライブに使用し始めたのは8年ほど前で、この頃は知りうる限りではまだ実例がありませんでしたが、今ではデファクトスタンダードと言えるようになったと思いますので、バーチャルライブに限らずゲーム開発などでもお勧めしたい技術になります。

DMXの素晴らしい点は、長年培われてきたライブ会場などの照明演出のノウハウを生かせることにあります。
以下の動画はDMXの照明の結果をシミュレーションするL8と呼ばれるビジュアライザーソフトウェアを使用した事例となりますが、このような舞台照明の演出が利用できるようになります。
https://www.youtube.com/watch?v=F-KUwQw14Qs

DMXにご興味がある方は、前回の弊社の技術ブログの3D配信における照明制御でDMXの説明を行っておりますので、是非こちらもご覧いただければと思います。

次に、ライトのパラメータやGizmosについてですが、Unityの標準ライトと同様の使い勝手を提供できなければ、開発に支障をきたしてしまいます。
そのため、パラメータは勿論ですが、下図のようなGizmosも標準ライトと同じように表示できるようにしています。

最後に、Mirrorによる複数台のPCでのアプリ間の同期についてですが、この機能はライブのリハーサルなどで重宝する機能で、リハーサルでは照明の位置を変えたいなどの要望が多く出てきます。

ただ、リハーサルの時間は限られており、こうした設定を稼働中の全てのレンダリング用PCに行っていくのは、リハーサルを止めてしまうことと同義と言えます。そのため、リアルタイムに全PCを同期しながらライトを調整できる必要がありました。そのために、ネットワークライブラリのMirrorを利用した同期システムを構築しました。

アプリPC①の変更を、他のアプリPCに同期するイメージ

Mirrorは長年利用されているネットワークライブラリで、事故のリスクを少しでも下げる上で、Mirror のように枯れた技術であることは重要でした。また、ローカルネットワークやインターネット経由でのマルチプレイの実績、他ではコードがGithubで公開されていることも採用の判断ポイントになっています。

なお、今なら「NetCode for GameObjects」やUnity 6から利用可能な「Multiplayer Play Mode」も候補になってくるかもしれませんので、新規に実装を予定されている方は、これらのサービスや有償のサービスも検討してもよいかもしれません。

ライトのシェーダ実装

独自にライトシステムを実装するとはどういうことなのか、Unityで開発をしてきた方にはこのアプローチ自体にあまり馴染みが少ないかもしれません。これはシェーダを基準に見ていくと理解が深まるかと思います。

まず、通常 Built-inであれば「"LightMode"="ForwardAdd"」のTagsを設定したPassのシェーダに記載することで複数のライトを反映させるためのシェーダコードを書くことができます。

独自にライトシステムを実装する場合は、「"LightMode"="ForwardBase"」のTagsを設定したPassのシェーダ内で、StructuredBufferのライト情報を参照させることで、複数のライトを独自に計算させることができます。

以下はシェーダでのStructuredBufferの擬似コードによる宣言になります。

struct LightData
{
    float3   col;
    float3   pos;
    float3   dir;
    float    outerAngle;
    float    innerAngle;
    float    length;
    int      type;
    int      gobo;
    float    zoom;
};
StructuredBuffer<LightData> _lightsData;

Built-inだとシェーダの実装方法によっては、ライトごとにDrawCallが呼ばれてしまいますが、StructuredBufferを利用することによって、一度のパスで複数のライトの計算が行うことができ、それによりCPU/GPUの負荷軽減にも繋がります。

下図はRenderDocのスクリーンショットです。標準ライトではこのように同じメッシュのDrawCallが何度も呼ばれてしまいますが、StructuredBufferでのライトを行うことでこうした問題を回避することができます。

また、もう少し踏み込んだところでは、StructuredBufferはForward+の実装にも利用できます。Forward+はUnityのURPでは標準で利用できるライティング方式で、Forward Renderingでも深度情報から事前にタイルベースでライティングをカリングしておくことで、多くのライトを低負荷で利用することができます。なお、扱うライトが少ない場合は、ComputeShaderによるライトのカリング分の負荷がむしろ増えてしまいますので、Forward+を使用するどうかは、負荷を計測した上で判断するのが良いかと思います。

10年以上も前にAMDが発表した技術ですが、今でも利用されている素晴らしい技術です。実装はgithubでも公開されていますので、Built-inでもForward+にチャレンジされたい方は是非ご参考いただければと思います。

https://github.com/GPUOpen-LibrariesAndSDKs/ForwardPlus11

次に、StructuredBufferを利用したライティング表現の利点ですが、ライトが重なったときの明るさの計算を変えるなど、現実世界では不可能な照明担当さんが理想とする表現が可能になります。

これらの利用場面ですが、例えばピンスポットライトのような強い照明が重なった場合の白飛びへの対処や、近年事例が増えてきたSDFを利用したトゥーン表現における複数ライトへの対応などが挙げられます。

もう1つ、ライトを独自実装することで実現できたこととして、ポイントライトやスポットライト以外のライトの種類を追加できるというものがあります。

特に効果的だったものが、スポットライトの発生源を点ではなくラインとして扱ったタイプのライトです。「ボーダーライト」と呼ばれるタイプの照明に近く、一列に並んだスポットライトを1つのライトとして扱えるようになります。このライトにより、スポットライトを多数配置することなく、1つのライトで同様の表現ができるため、負荷軽減にも繋がりました。

影の表現

冒頭で「影の表情」と「光の立体感」の表現をゴールにするお話をさせていただきましたが、今回は「影」についてご説明させていただこうと思います。

まず「影の表情」がより感じられるライブ曲の1つをご紹介させていただきます。

【チラ見せ】Hoshimachi Suisei Live Tour 2024 "Spectra of Nova"【おおきにアリーナ舞洲】

動画はこちらからご視聴ください。
https://youtu.be/Q1s4w-_ujig?t=2539

「影の表情」とは、タレントさんの感情を影に込めていくことを目指したものです。とくに星街すいせいさんのライブの歌に込められた感情は非常に豊かだと思っています。静かな時もあれば激しく揺さぶる時もあり、これらの感情を影でも表現したいと思っていました。

もう一つ、影は人間の視覚情報として実在性を認識するための重要な要素でもあると考えています。仮に影がない人物の写真を見た時に、どこに立っているのかすぐに判断できないこともあると思います。この影の実在性を実現するために、レイトレーシングの品質の影表現を目指しました。

実装にあたっては描画負荷を計測しながら、品質とパフォーマンスの最適解を見つけることも重要でした。検証の結果、ライトは独自の実装を採用しましたが、影についてはUnityのシャドウマップでも品質は十分出せると判断しました。

実際に使用したシャドウマップは以下の3つで、全て平行光源(Directional Light)となります。

  • フェイス

  • 衣装

  • ステージ

フェイスと衣装を分けているのは、フェイスには正面方向からライトを当てたいためです。また、この分け方で最小限のシャドウマップで高い品質を保つことができます。スペックに余裕があれば、一人ずつ割り当てても良いと思います。

前髪から落とされる影
衣装の裾やスカートから落とされる影

また、これらのシャドウマップとは別に、リムライト用のマスクを、シャドウマップを使用して作成します。これにより、本来光が当たらない箇所が発光するような不自然なライティングが発生しないようにしています。


レイトレーシングの影表現

先ほどはレイトレーシング品質の影を目指したと書かせていただきましたが、最終的にはレイトレーシング品質が達成できなかった状況もありました。

例えば、下図のようなボタンの影ですが、このように衣装とボタンの距離が非常に近い場合は、シャドウマップで影を出すのは困難でした。やはり、レイトレーシングそのものを使ってみたい欲求が出てきます。

ここからはライブ後の検証内容となりますが、レイトレーシングをUnityで利用できないかを去年の年末頃に調べてみました。詳しくはカバーのAdvent Calendar 2024に載せていますので、興味がある方は、是非御覧ください。

この調査を元に、実際に自社シェーダにレイトレーシングの影を取り入れた結果が下図となります。

より分かりやすく影の陰影だけにした状態となりますが、しっかりボタンの下に影が出ていることが確認できるかと思います。

今回のレイトレーシングの実装で特筆すべき点は、Built-inで実装されていることです。UnityのレイトレーシングはHDRPでしか利用できないと思われている方が多いと思いますが、比較的簡単にBuilt-inにも実装することができます。

また、先ほどシャドウマップをフェイスと衣装で分けているとお話しましたが、同様の表現はレイトレーシングの影でも可能です。今回はclosesthitシェーダのpayloadに、フェイスか衣装かの情報を書き込むことで、その情報を元にraygenerationシェーダで生成するライト方向のレイの向きを変えることで実装を行っています。このあたりは1つのDispatchで完結できるレイトレーシングのほうが、パフォーマンス面でも有利だと思います。

自社シェーダへのレイトレーシングの実装は半日ほどで行いました。まだいくつか解決しなければならない技術課題はありつつも、今回の検証でUnityでもレイトレーシングは比較的容易に導入できることが分かりましたので、今後も積極的に取り組んでみたいと思います。

最後に

今回は照明システムの取り組みの一部をご紹介させていただきました。技術ブログに載せるにはあまりに長くなってしまうため、ご紹介できなかった取り組みがまだ多数ございますが、どこか別の機会でお話できればと思います。

ライブ制作で大切にしていることとして、テクノロジーとプロフェッショナルの相乗効果があります。私はこれまで業界で誰もチャレンジしていない取り組みを行う機会に運よく恵まれていたと思っており、その時のファンの驚きや感動の声は、実現できてよかったと心の底から思えるものでした。しかし、それらの技術はいずれは当たり前のものとなります。常に新しいチャレンジを続けなくてはライブ体験の感動は徐々に薄れてしまいます。

また、テクノロジーだけでは本当に素晴らしい体験を作ることはできません。生のライブは最高のコンテンツの1つだと思っていますが、それはプロフェッショナルが集まることで生まれるものだと考えています。照明システムも素晴らしい照明演出を手がけてきた照明担当さんが扱うことによって魅力的な演出を生み出すことができます。これは照明だけでなく、カメラや音響、舞台美術などあらゆる領域で言えることで、それらが集結することで最高のライブの舞台に仕上がっていきます。それを肌で感じられるライブは本当にやりがいのある仕事だと自信をもって言うことができます。

今、弊社では最高のライブを作っていく仲間を募集しております。
そして新しいチャレンジとしてUnreal Engine を最大限に生かしたライブに挑戦しようとしています。
ご興味を持たれた方、是非ご一緒に最高のライブ体験を創っていきましょう!
https://uelive.cover-corp.com/


謝辞

本記事ではユニティ・テクノロジーズ・ジャパン株式会社様が提供するユニティちゃんのモデルを使用させていただきました。厚く御礼申し上げます。
© Unity Technologies Japan/UCL