見出し画像

ジャイアン・リサイタルを開きたい!③ 技術編(完結)

前回のエントリが8月末だったので、あれから3か月弱経ちました。結論からいくとジャイアンリサイタルは決行されましたので今回は技術編として、そこに至る経緯と使われた技術についてまとめておきたいと思います。

実は前回のエントリを書いた時点でイベントを開くための準備は基本的に全て整っていました。ワールドはきちんと機能する状態で完成しておりDJをしてVRChat内に配信することができていました。そもそも6月には基本的なギミックは全てできていたのです。ただその出来にあまり満足できていなかったのと、そもそもDJやるのがめんどくなっていたという身も蓋もない状況が続いていました。
ただ6月なかばくらいにワールドに実際に十数名入ってフレの知り合いのDJさんVJさんが小一時間プレイしてみてくれるという運用テストの機会があって「あ、なんだ普通にここでイベントできるじゃん」と思ったのが先にすすむきっかけになりました。

6月の時点での状態。今見るとこれも悪くはないかも

正式名称「ROOM305 NEOTOKYO」

ビルの地下にある空間をリノベートしてクラブっぽい空間にしたという体でモデリングなどを進めていたので、当初は壁や床はコンクリート打ち放しの暗くて雰囲気ある空間を目指していました。ただそれに陳腐さも感じていたので7月末くらいにワールドの基本的なテクスチャを変更し、ついでにテストの結果などもふまえてフロアの奥行などのサイズも修正しました。同時に暖色の建築化照明をやめて色温度をもっと高くし、モノトーンでシャープなイメージにしてみました。基本面積の広い箱の部分はPBRマテリアルをタイル配置し、パーツ化できるパイプやダクトなどはSubstance Painterでテクスチャを作っています。


Substance Painterによるテクスチャリング

以前(SLでお店をやっていたときなど)は素材を自作しレンダリングした後にBlenderで焼き出したテクスチャをフォトショップで編集するなどかなり手を加えて作成していたのですが、時間もかかるために今回から全てのテクスチャ作業をSubstance Painterで行いました。そもそもVRChatではそこまでフォトリアルな3DCG的クオリティを求められるわけではないので、Unityのシェーダーとの組み合わせで低コストでそれなりの効果を出す方法を模索した結果です。
今回のワールドはクロームっぽいキラキラした金属表現がテーマなので、Unity内にリフレクションプローブを設置してsmoothを上げてしまえばそれだけでも結構それっぽくなってしまうということもあり、かなり適当に作業を進めました。これは正しい制作フローとは言えないのですが全てフルスクラッチでモデリングして制作する上で効率的ではありました。

SubstancePainterでエクスポートしたテクスチャを正確に使用するのが本来なのですが、あくまで味付けとしてカラーマップとAOとノーマルマップを生かすような使い方になっています


LTCGIの導入

文系なので技術的なことはまったく理解していないのですが、映し出されたスクリーンなどを光源として、その光がGI的な拡散をして周囲のスタティックなオブジェクトに映り込む、いわゆるレイトレースというものがあります。GHOSTCLUBやECHOなどVRChat内の有名なクラブでも効果的に使用されているので目にしたことのある方もいるかと思います。
これをリアルタイム処理でやると負荷が高くなってしまいそれなりの人数が集まるイベントにはかなり厳しいものとなってしまうようです。そこで様々なソリューションが開発され公開されています。(先駆者であるGHOSTCLUBでは自前でその仕組みを開発しているようです)
今回どうしてもそれをやりたくて、私が選択したのはLTCGIというシステムでした。これはPiMakerさんという方が開発し公開しているものです。GitHubで公開されているほかBoothなどでも配布されており現在ではVCC経由で導入が可能になっています。
https://github.com/PiMaker/ltcgi)

実際に導入している人が結構いるため導入手順やドキュメントにアクセスしやすいこともあり、導入はかろうじて何とかなったかんじです。(慣れている方なら簡単に導入できると思います)またVJ映像用のスクリーンだけでなく、UDON AudioLinkで動作するフラッシャーもLTCGIで壁や床に映り込むようになっています。

REDチャンネルでLTCGIのシャドーマップをベイクしている様子 赤く染まっている部分がLTCGIの光の拡散範囲ということになります


orels Unity Shaders

LTCGIは通常のシェーダーでは作動せず、拡散光を受ける部分にLTCGIに対応したシェーダーを使用する必要があります。選択肢はいくつかあるのですが今回はorels1というシェーダーを使うことにしました。これも現在VCCから導入することができます。これを選択した理由は
・VRChatで使える中ではリッチな物理ベースシェーダーであること
・ネオン表現ができるシェーダーやAudioLinkに対応したものなどかなり汎用  性の高いフルセットのシェーダーであること
などが挙げられます。これはとても良いものでしたのでLTCGI以外の部分でも今後使っていきたいと考えています。

謎ネオンサインのリアルにまたたく感じなどはOrles1のネオンシェーダーによるもの


Topaz chatとOBS Studio

会場へのDJ音声とVJ映像の配信はVRCでの定番、Topaz chatとOBSの組み合わせで行いました。遅延も少なく簡単に配信できるのでVRCの日本の音楽イベント関連の配信のデファクト・スタンダードですよね。
ただ初期段階のテストで、音声だけだと問題ないのに映像も配信をするとすぐにサーバとの接続が切れてしまうという現象に悩まされました。送信レートや解像度を下げても解決しなかったのでお手上げ状態。そもそもうちの光回線が古くてギガとかではないのもあれなのですが、ネットで調べると基本アップロード側が数十MBpsあれば十分問題無いとのこと……。
いろいろ検証した結果、配信用に使っていたPCが古すぎて送信のための映像エンコードが間に合ってないためにエラーが出てしまうということが判明したのでこの機会に13世代のi5で1台新たに安価なPCを組むことで解決しました。(旧PCはAbletonLiveでDTMなどに使っていただけだったので十分動いたんですよね……)Topazはなんも悪くなかった……。
OBSに関してはSpout2などを使用してVJソフトとも問題無く橋渡しができるので使い勝手は良かったです。


UDON AudioLink

この手のワールドによくありがちな演出としてAudio Linkでオーディオリアクティブに光るというのをやってみました。とはいえ現実の小さめの雰囲気の良いクラブではこの手の演出はかなり控え目ですし、派手なレーザーにカラフルなムービングスポットにスモークに……というのはぜんぜんChicではないですよね。(個人の感想です)そもそも今後やっていきたい音楽ジャンルとも合わないと思う。そこでランダムに配置された直管照明と業務用のLEDパネルが白色に明滅するだけの仕組みを制作しました。これだと「パーティ!」という雰囲気にはならず良くあるメディアアートっぽいかんじなのでまあいいのではないかと……。(いいの?)
ちなみにシェーダーはorels1のAudioLink用を使用しています。トラックがベースドラムだけになったときなど鋭く反応して光ったりするのが結構かっこいいです。


VJソフトsynesthesia

今回のコンセプトはジャイアンリサイタル、つまり独演会なので全てを自分一人でこなさなくては意味がありません。人前でDJをやるというのが第一義ですがVJも絶対必要だと感じていました。なぜなら素人DJだけで1時間とか間が持つわけないから!  そしてDJだけでも覚束ないのにVJをどうしたらいいのかというのが今回最大の問題だったといっても過言ではありませんでした。まず今回の目的に必要なVJソフトの条件として

①オーディオリアクティブであること
②リアルタイムでの継続的なスイッチングはほぼ不可能であると思われるのでそれなりのシーケンスを事前に設定して組み立てられる
③いわゆるVJ素材ループを流すだけでなくそれをシェーダーなどでリアルタイムにモジュレーションできる
④シェーダーなどの選択肢がそれなりに用意されていること
⑤実際の操作からシーケンスの準備までそれなりに直観で操作できること

というかんじでしたがなかなかそんなもん見当たりません。いっそのことtouch designerやMax for Liveのようなものを使ってきちんと仕込みをして臨むというのも考えましたが時間も才能もリソースも有限です。(そもそもUnityだけでおなかいっぱい)
そんなときに出会ったのがSynesthasiaというソフトでした。DEMOで試してみたところ先の条件をそれなりには満たした上、価格もSrandard版で99ドルと手頃だったので即購入。結論からいくとこれはとても良い買い物でした。
おそらくガチで映像やってる人からするとあまり魅力のあるソフトではないかもしれませんが、今回の私の目的にはこれ以上のものは探せなかった。
一応不完全ながらISFやShadertoyのシェーダーをインポートできる点なども評価できます。ただ10ダウンロードしたうちの3個使える、くらいなかんじではありますが。それでもISFのMITライセンスのエフェクト系シェーダーなどそれなりの数を揃えることも可能でした。
ボタンやフェーダーをMIDIコントローラーにアサインするのも簡単で、今回は死蔵していたLaunch PADをリアルタイムの簡単なパラメーター変更に使用しました。

今回は30秒ほどのシーン(素材とシェーダーの各数値設定を組み合わせたプリセット)を150個ほど制作し、順番に再生していく方法をとりました。計算上75分程度の再生時間になりますが、曲や音の変化に合わせて頭出しで再生してくれる機能があるので実際は1時間程度、ちょうどDJの尺に合うギリギリを作れたかんじでした。


Runway Gen-2による動画生成

VJの映像素材を用意するのに、本来であれば自前で撮影するなりレンダリングするのが良いとは思うのですが今回はあまりに時間が足りません。そこでフリーのVJループ素材として配布、頒布してくれているものも利用し、あとはNASAや航空会社の古い広報映像、50年くらい前の技術ドキュメンタリーなどを切り刻んで使用したりしました。
そのほかに活用したのがRunway Gen-2というAIによる動画生成サービスです。テキストによるプロンプトで4秒から16秒の動画を生成するもので、一通りこの手のものを見渡した中ではかなり実用に耐えうるものと感じました。でも今回あまり上手く使えたとは感じておらず今後研究の余地があります。(この分野は言葉通り日進月歩なので半年後くらいにはまた状況は変わってくる気もします)
今回はとりあえず初回無料ポイント分生成してみましたが、今後課金してでも制作に生かす価値は感じました。

今回使用したRunway Gen-2による出力例(未加工)

その他に、入口にあるパニックドアにそれっぽいステッカーが貼ってあるという設定を最小限の時間コストで制作するためにStable Diffusionで画像生成したりもしました。(最終的にはワールド軽量化のためにボツ)
遠目だと一見それっぽく見えなくもないのに近づくとロゴが謎言語だったりするところがいかにもAI画像生成というかんじ。

一見それっぽいけどよく見ると変なとこだらけのAIクオリティ


MeshBaker

表現をリッチに、多機能にすればするほどワールドは当然重くなります。
制作の各段階でこの問題に直面し、適宜対応しましたが、最終的に頼ったのはMeshBakerというUnityのアセットでした。
これは同じシェーダーで動作するメッシュ群をひとつにまとめ、さらにテクスチャもアトラス化してくれるというものです。LTCGIに反応する金属っぽい部分、ガラス表現の部分、通常シェーダーのプロップなどに分けて結合してまとめることによってかなりの軽量化ができました。
「軽量」にはふたつの意味があるわけで、まずそもそものワールド容量の削減の他に、動作の負荷の軽さも重要になってきます。今回はAudioLinkで発光する部分を結合したときに劇的に負荷が軽くなるのを感じました。(おそらくドローコールが一気に減ったためでしょうか)


最後に

というわけでワールドはなんとか完成し、2023年11月17日深夜、1時間ほどではありますが当初ジャイアンリサイタルと呼称されていた私による私のための私のDJイベント「A Lollypop or A Bullet」は開催されました。
当初は誰も来ないんじゃないか、来ても憐れんで来てくれた数人程度が関の山なのではないかと思われましたが、蓋を開けてみれば会場同時接続で40人を超える人が来てくれ、延べでは100人もの人が足を運んでくれました。なんの実績もない素人がフォロワーも少ないXで告知しただけにしてはこれはなかなかではないかと思うのです。
同時に、SNSで拡散してくれたりアドバイスをくれたりしたフレのみなさんや、興味を持っていただいた方たちのおかげだなと強く感じます。本当にありがとうございました。
こんな思いつきの自己満足イミフ企画、やる意味あるのかとも思ってたのですが自分なりにちゃんとやってよかった。VRChatのクラブシーンはほんとに層も厚いし面白いので今後なんらかの方法でいろいろ参加していけたらいいなと思います。
A Lollypop or A Bulletもそのうち2回目ができるとよいのですが……


おわり

この記事が気に入ったらサポートをしてみませんか?