Imaginantia

思ったことを書きます

記録 WebPanelのはなし

昔々、VRChatにはWebPanelというものがありました。今でも「そんなものがあった」という噂みたいなものだけが語り継がれている気がします。

私が全部を知っているわけではもちろんありませんが、私が喋れることはそこそこある気がするので、ここに記録として残しておこうと思います。

随分昔の話をいろいろ書いているので、もしも一部消してほしいなどの旨があれば、ご連絡ください。

SDK2の時代

現在は2024年9月です。SDK3、即ちUdonがやってきたのは2019年12月なので、もうSDK2が廃れてから随分経ってしまったようです。

Udonがない頃」というのは、Udonがないということなので、今みたいにC#でぬるぬるプログラムを書いたりなどできません。できることは限られていますが、でも何もできないわけではありませんでした。

例えばUnityの機能でアニメーションを再生することができます。オブジェクトにPickupコンポーネントをつけて、持ち上げたりすることができます。これだけでも楽しかったものです。

そしてSDK2の機能として、「VRC_Trigger」がありました。今でも CyanTrigger として精神性が引き継がれているみたいです。

これは「どんなときに」「なにをするか」を指定することで動的なアクションを記述するものでした。キューブをInteractするとアニメーションを再生するとか、別のオブジェクトをOn/Offするとか。

特に同期の機能も付いていて、「Triggerを発火したこと」を記録し、late-joinerに同期させる、ということができました。"AlwaysBufferOne"*1 とか懐かしいですね。

というわけで、多少の基本的な機能はあるんですが、「何でもできそう」ほどの自由度は勿論ありません。

だから、この時代は「できることを全部やる」という感覚でワールド弄りをしている人が多かった、と記憶しています。

 

いろんな人ができることを模索していました。イワシの話とか、StandardAssets、ToyBoxとか、話題は色々ありますが書いているとキリがないですね。「できること」を知るために、その頃はコミュニティ間の交流も盛んだったような気がします。

SDKのドキュメントみたいなものも満足にはなかったので、コンポーネントが何を意味するかみんなわかってなかったのです。試行錯誤してこういう風に使えるんじゃないか、みたいな感じで新たなテクニックが見つかって、「技術革新」と呼ばれる、という現象が度々ありました。ひどい時期は一日一回くらい。

そんな「不思議なコンポーネントたち」の中の一つとしてあったのが、VRC_WebPanelです。

 

WebPanelも同じようにいろんな人が使い方を試し、運用し、便利に使われていました。これを使えばできること、みたいなものがたくさんあった。

だけど、2018年8月18日、突然のVRChatのアップデートにより、消えました。

medium.com

よく覚えています。のんびりとバーカウンターみたいなところで雑談していたら何やら騒がしくなって。聞いてみると「今VRChatを再起動すると、アップデートが入って、WebPanelが動かなくなる」と。

大層びっくりしました。ちょうど次の日にちょっとしたイベントがあってWebPanelが使われる予定だったので、無くなったら困ります。状況を確認するために再起動すると、全てのWebPanelを利用していた板が、謎の黄色と黒のストライプのテクスチャ*2になってしまっていました。

即日にお葬式が開かれました。

界隈の人たちはみんな来ていた覚えがあります。(結果的に) とても強く愛されていたコンポーネントでした。

何ができたのか

WebPanelとは、名前の通り「Web」を映す「板」です。簡単に言うとWebブラウザです。

昔のVRChat関連の記事を漁るといくつか片鱗を見ることができます。

bibinbaleo.hatenablog.com

例えば、この頃はギミック側で「現在時刻」を知ることすらできませんでした。だからWebPanelを使っていました。

y23586.net

何なら「時計が表示されるWebページ」を直接置くことで時計代わりにしていました。

さらに私が知る頃はまだVideoPlayer類 (VRC_SyncVideoStream?) の使い方がわかっておらず、WebPanelを使って配信を見ていました。ワールドに入るたびにちょっと操作して全画面にしなきゃいけないとか面倒だったな。でもWebPanelを使えば「配信のコメント欄」をワールドにそのまま置くことさえできました。

結局SDK2はよくわからないコンポーネントだらけなので、その正体を頑張ってエンジニアリングするよりも、Web関連の手段を使ったほうが早かったりしました。

qiita.com

そして、ただ表示するだけではなくて。

vrcprog.hatenablog.jp

vrcworld.wiki.fc2.com

WebページからJavaScriptを実行することで、VRChat上でのアクションを実行させることができました。例えばその中に「GoToRoom」というアクションがあって、実行すると「指定したインスタンスへ移動させる」ようなこともできました。

gpsnmeajp.sblo.jp

幾つかのイベントでその仕組みを使ったインスタンス管理を行っていた (もしくは、行おうとしていた) 覚えがあります。

まぁ、つまるところ、インフラだったのです。

私がやっていたこと

2018年の4~5月頃かな。私は「VRChatでニュース番組をやりたい」という話を聞いて、技術関連をやる人間として、色々作っていました。詳しくは調べてください。

僅かに写真が残っていました、「YouTubeのコメントをアレっぽく流すやつ」です*3。まぁ、インターネットに繋がるのであとはなんでもできます。

あとスライドを表示する仕組みも作りました。Web経由なので*4ページ切り替えは (WebSocket経由で) 簡単に同期できます。

あと出演者が喋る為のボイスチャットを自作して運用していたので (フィルタとか掛けられるようになってた)、それを使って「発声するとVRChat内の名札が光る仕組み」を作った覚えがあります。でも本番でうまく動かなかったんだっけな。

 

また、おそらく並行して、先述の「インスタンス管理」の仕組みを作ったりしていました。

VRChatには一応WebAPIがあって、インスタンス内の人を取得したりできます。今でもできるんですが、公式に提供されている機能ではないので「いつ壊れても文句を言わない」状態です。

あとは先程のGoToRoomを組み合わせると、「人の居るインスタンスをクリックするとそこに移動できる」仕組みができるというわけです。定期的にリストの自動更新もします。

ちなみに見てわかる通り、40人を限界として作っていたみたいですね。この頃は人一人の負荷が今よりも高かったので、30人の時点でinstanceはかなり重かったと記憶しています。だから赤いんだと思う。

非公式APIをこっそり使っていたわけなので、あんまりコレを宣伝しないよう、私からお願いしていたような気がします。だからこういう映り込みとかでしか記録が残っていないです。

 

あと私の個人ワールドには「天文台ライブカメラのWebページをSkyboxにする機能*5」とか「WebPanelを触るポインタの位置が全員で同期して見えるようになってる板*6」とかありました。やれること・やりたいことはもっといっぱいあって、インスタンス間でゲームできたりとか、こう、いくらでも。

そんなことを考えている中での廃止でした。悲壮感がいくらか伝われば幸いです。

無くなってから

無くなった経緯はこちらにまとまっているかと思います。

私の見解も相違なく、まぁ元々「異常な自由度を持つ仕組み」なので、「ヤバいことが起きても仕方ない」感覚がありました。

でも私達は生きていかねばならないので。代用案をどうにか探していきました。

 

動画や配信については本来のSyncVideoPlayer/SyncVideoStreamを安定して運用することができていたと思います。しかし動的なWebページアクセスを用いていたものは容易には替えが効きません。

そんな中、使われるようになったのが「VRC_Panorama」でした。

vrcworld.wiki.fc2.com

パノラマ画像をWeb上から拾ってくるコンポーネントです。が、パノラマ画像じゃなくても動くので、Web上の画像を拾ってくる方法として使われていました。

例えば時計も動かなくなりましたが、「ロードした瞬間の時刻を画像にして返すWebサーバー」を作れば、後はシェーダの_Time.yを使ってそこそこの精度で時刻を表示できるわけです。

スライドを表示する仕組みとかもPanoramaで対応したかな、でもリアルタイムでコメントを背景に流すことはできなくなりました。動画配信でどうにかしていたんだっけ?

また、インスタンス内の人数表示は動いてるけど飛ぶことができなくなったので、インスタンスリストを動画配信してもらっていました。飛ぶのはフレンド経由。

ちなみにその時期のインスタンス管理の手法について、y23586さんが丁寧に書いております。

y23586.net

まぁ結局WebPanelがなくなって、「できないことはできない」というところに落ち着いたと思います。

その頃無数にあったアイディアメモは半分くらいが消えました。

ちょうどそれがとあるイベントの日だったこともあり、一つの「時代の区切り」を感じていました。

そういえば「1%の仮想」展にも残っていますね…。

 

SDK3になってからは時刻くらいは簡単に取れるようになりましたね。画像を拾ってくるのは長いことできなかったけど、ImageDownloaderが出てきてやっと「標準的なSDK2の上位互換」になりました。インスタンス管理もGroup機能で簡単にできるようになりました。

でもWebPanelは帰って来ません。

別に帰ってきたところで困りますけどね。もっと自由にWebアクセスさせて欲しかったし、インスタンスを越えるような様々な事柄をやってみたかったけれど、そういうアイディアはもう全部捨てたのです。

まとめ

昔は色んなものが欠けていたので、WebPanelをインフラとして使うことで便利になっていたものがいくつかありました。

それが無くなって、それでも普通のワールドで必要な機能 (時計やVideoPlayer) はなんとか代替が効いたので、必要性は認識されなくなっていきました。

これがもしも存続していたら、色んなものの価値観がだいぶ変わっていたと思います。例えばあの24時間で消えるワールドとかね。ワールド制作でWeb関連を触ることが当たり前になっていた可能性もある。

でも、そうはならなかったのでした。

 

いい時代になったと思います。

おわり。

*1:「1回分のトリガーの発火を常に同期させる」

*2:エラーが発生したときに自動的に割り当てられるダミーテクスチャ

*3:Webページにコメントを流して、シェーダで背景色を抜いてる

*4:各プレイヤーのPCで独立してブラウザが動いている

*5:やるだけ

*6:ポインタの位置をWebSocketで共有していた