VRChatに足りないもの

追記(2019/2/25):
以下の問題点を解決する上で特に重要だと思われる点について、Canny(VRChat運営に機能改善をリクエストできるページ)のリンクをリストアップしました。同意する点については投票(▲ボタン)をお願いします!


このツイートをしたらちょっとした議論になったので、現時点での私の意見をまとめてみます。といっても、私はVRやSNSに関して専門的な知識があるわけではないので、現在私が主に活動しているプラットフォームであるVRChatについて「何が足りていないか」を書いておきます1
「VRプラットフォームのあり方」みたいなものを議論する上でのちょっとした一意見になれば幸いです。

利益相反の開示

私(ヨツミフレーム)はVRソーシャルプラットフォームであるVRChat上で趣味としてコンテンツ制作をしています。例として「VRメディアアート個展」と称した「1%の仮想」というイベントを2018年9月に開催しました。詳細はこちら
私の活動に関しては一切収益を得ておらず、VR関係のいかなる企業・団体・個人からも利益を受け取っていません。VRに関しても特に専門的な知識があるわけではありませんし、本職とは一切関わりがありません。
ただし、VRChatに関しては、以下の記事を書いているように国内ユーザとしては一定量の知識やデータは持っていると思います。

他のVRプラットフォームに関しては、AltspaceVR、Rec Room、バーチャルキャストを少し触ったことがある程度です。

TL;DR(1行まとめ)

VRChatではVRソーシャルを成立させるために必要な極めて最低限・原始的な機能しか実装されておらず、ユーザの熱意によって(少なくとも日本人コミュニティは)無理やり成り立っている状態のため、「最低限VR SNSとして成立するなにか」を誰かが作るだけでもユーザを総取りできるのに、という愚痴です。

以下は足りないものの一覧です。なお、VRChat自体アーリーアクセスなので、不可抗力的なもの(例えばSDKのバグが多いこととか)については特に書いていません。

ソーシャル機能の欠陥

VRChatでは「インスタンス」と呼ばれる「部屋」の単位があります。ユーザは常にいずれか1つの属し、同じインスタンス内のユーザとのみ会話することができます。
インスタンスには大きく分けて以下の分類があります。

  • Invite, Invite+:インスタンスの作成者(前者)やインスタンス内にいる人(後者)が特定のユーザに対してInvite(招待)するか、Req. Invite(招待の要求)を受諾した場合のみ入室できます。インスタンス外からインスタンス内の人数やメンバーを把握することは一切できません。
  • Friends, Friends+:インスタンス作成者のフレンド(前者)やインスタンス内にいる人のフレンド(後者)のみが入室できます。VRChatクライアント内では入室できる場合のみそのインスタンスのIDが表示されます。
  • Public:運営の審査を通ったワールドのみが設定できる種類で、誰でも検索・入室することができます。

問題は、ユーザがVRChat内で知ることのできるインスタンスが以下の2種類しかなく、インスタンスの検索性が極めて乏しい点です。

  • Public:メニューの”Worlds”欄から確認することができます。一方で、Publicインスタンスにいるユーザは海外ユーザがほとんどであり、荒らしや冷やかし目的のユーザも一定数いるため日本人コミュニティではあまり利用されていません。
  • フレンドのいるインスタンス:メニューの”Social”欄で表示されるフレンドを一人ひとり選択すると、そのフレンドがいるインスタンスを(入室可能な場合)一人ひとり確認することができます。しかし、言うまでもなくこれは非常に非効率的な操作であり、劣悪なUI2と相まって「複数のフレンドが集まっているインスタンス」を手早く確認することはほぼ不可能です。そもそもAPIの観点から見ると「フレンドのいるインスタンス一覧」を表示することはAPI(=サーバ負荷)の変更なしに実装できるため、なぜこの仕様が放置されているかは不明です。

また、VRChatでは国内・国外ともにユーザ主導の多くのイベントが開催されますが、上記の問題からこれらのイベントの存在をVRChat公式の機能で感知することは不可能です。一方で、例えばAltspaceVRでは”EVENTS”欄で開催予定のイベントの詳細を確認することができます。

この問題に対しては、ユーザ主導で以下の解決策が提案されています。

  • APIの使用sunaさんの記事で詳しくまとめられていますが、ユーザが作成したアプリを使用することができます。一方で、これらのアプリをVRChatと統合して使用することはできません3し、アプリに対して安全にアカウント権限の一部を与える方法は実装されていません。また、アプリ経由でインスタンスに入室する場合は使用上一度VRChatを再起動する必要があります(数十秒〜数分の待機とキャリブレーションのリセットが入ります)。
  • イベントカレンダー国内国外ともにイベントの予定が列挙されたカレンダーが公開されています。もちろんこちらもVRChatとは完全に独立したものです。

ここからは私の考察になりますが、おそらくVRChatの方針として「VRChatのみでソーシャルが完結する」ことは意図されておらず、普通のゲームのように事前に他のSNSでプレイ時間やメンバーを示し合わせてから遊ぶことを意図していると思われます(以下のインスタンスの考え方も参照)。もちろんこの方針のほうが実装コストが下がりますが、数百人のフレンドがいて一度に数時間もインするヘビーユーザ4にとってはたまったものではありません。

インスタンスの哲学

VRChat内でインスタンスを作成した場合、それを固定化すること(特定の名前をつけたり公開用リンクを作成したりすること)はできません。これをするためにはVRChat外で特殊な起動URLを準備する必要があります。VRChat内で作成されるインスタンスにはVRChat内から不可視なハッシュ値が設定されるため、自身のインスタンスに退出後入り直すことすら(内部にフレンドがいなければ)不可能です。これはおそらく「インスタンスは一時的なセッションであり、『住む』することが意図されていない」ためと思われますが、一度に数時間もインするヘビーユーザにとってはたまったものではありませんし、何らかのイベントを開催する場合には明らかに不向きです。
一方、これに対する対照的な哲学としてはDiscordのボイスチャンネルがあります。DiscordではSkype等と異なり、ボイスチャットをする際に「一時的に作成・破棄されるセッション」ではなく「常に一意に存在するチャンネル」を採用することで入退出を容易にしているのですが、運の悪いことはVRChatはSkype方式を採用しているために非常に使い勝手の悪い仕様となっています。

インスタンス・モード遷移の不連続性

インスタンス間を移動する場合、ワールドのロード(キャッシュされている場合は数秒)が発生します。問題はこの遷移が同期的(ロード中は他のユーザと交流したりアバターを切り替えたりできない)であり、ユーザの回線速度によるロード時間の差やインスタンス人数が溢れることによる強制的な移動等の問題と相まって「集団でインスタンスを移動しようしたらはぐれる人が頻出する」問題が発生します。さらに悪いことに、インスタンス間でユーザ同士がインタラクトする手段はInviteとReq. Inviteだけであり、何か問題があった際にVRChat内だけで意思疎通を取ることができません。
なので、素早い連携が必要とされるようなイベント時などには「VRChatのボイスチャットを切ってDiscordを裏で起動する」という身も蓋もない解決策が使用されてたりもします(もちろんVRChatは他のいかなるSNSとの連携機能も実装されていないため、VRChatとは別途でチャンネルの作成等を行う必要があります)。
似た問題として、「デスクトップ(非VR)モード・VRモードの動的な切り替えができない」という問題があります。VRChatがVR機器なしにプレイできるというのはコミュニティ人口を増やすための素晴らしい機能ですが、VRでプレイしていると以下のような理由でデスクトップモードに切り替えたくなるような場面が往々にしてあります(少なくとも私の場合は)。

  • コントローラ・トラッカーのバッテリー切れ
  • 一時離席
  • VR内からでは困難な(PC)作業を行う必要がある場合

切り替えのためにVRChatを再起動するともちろん前述のように同じインスタンスへのアクセスを再度繰り返す必要があり非常に面倒なため、多くの人は一時的な作業の場合にHMDを外したり頭に乗っけたりしています(当然会話を続けることは困難になります)。
補足として、唯一「トラッカーのON・OFFによる両手トラッキング・フルボディトラッキング」については動的な切り替えに対応しています(トラッカーをON・OFFにするとトラッキング仕様が切り替わる)。このノリでVRとデスクトップモードを切り替えれるようになるとプラットフォームとしての利便性が大幅に向上すると思います5

コミュニティの不透明性

VRChatコミュニティは「ユーザとフレンドになるとその人のいるインスタンスが(条件付きで)分かる」「フレンド以外の人については名前・サムネイル・ランク以外の何も分からない」というざっくりとしたシステムから、純粋なP2Pネットワークとして成立しています。実装としてはこれが一番シンプルなものですが、一方でこのシンプルしすぎる性質から「コミュニティの全体像(やその部分集合)を誰も知ることができない」という問題が発生します。Twitterで例えると、「全員が鍵アカウントで誰のF/F関係・いいね・RTも見ることができないTwitter」のようなもので、明らかにスケールアップの限界が発生すると思われます(このあたりはこの記事で簡単に評価しています)。まあ現実世界もスケールアップすることは不可能なので、SNSの性質としてはアリといえばアリですが、もう少しコミュニティ全体のトレンドを伺い知れるような機能があるとうれしいですね(例えばフレンドに自分のフレンドを見せることを許可できるようにするとか)。

「物」の実装

VRChatではなんと「物」を定義することができません。ワールドに置いてある物(例えば持ち運べるコップ等)はワールドデータの一部ですし、武器を持っているようなユーザがいればそれはアバターデータの一部(としてそのユーザがアップロードしたもの)です。このようにVRChatでアップロードできるデータは「アバター」と「ワールド」の2種類のみで、その中間の粒度の「アイテム」に相当するデータがアップロードできません。これはもちろん実装コストの関係で実装されていないだけだとは思いますが、これが実装されるだけでも文化の多様性が爆発的に増えると思うので早めに実装してほしいですね6

スケーラブルなユーザの描画

VRChatでは同じインスタンスにいることのできる人数は50人程度が限界です。これはサーバ側というよりは各クライアントのPCスペックの関係でこの人数以上のユーザを処理することができないためです。ですので、1つのインスタンスに数人から数百・数千人収容できるとうれしいという話です(技術的に可能、という話ではない)。
実際、やりかたとしてはclusterのように「間引き」をしたりLODのような概念を導入すれば(クライアントのスペック的には)対応できそうですが……7


ではなぜVRChatが(ごく一部で)アツいのか?

それはおそらく以下の3点に集約されます。

  • 好きなデータを運営の審査なしに好きにアップロードできる(=なんでもできる)から
  • SDKやシェーダーを使ってそれなりのギミックが実現できるから
  • 多対多のコミュニケーションができるから

逆に言うと、この3点を満たしてまともなVR SNSとしての機能を実装すればVRChatのユーザを総取りできるということなので(例えバグが盛りだくさんでもVRChat自体バグが盛りだくさんなのでVRChatよりはマシ)、「住むことのできる」VRソーシャルプラットフォームの誕生が待ち遠しいところです。

  1. 素人の私が書くのも恐縮なのですが、少なくとも日本人コミュニティはTwitterが議論の場の中心になっていることが多く、誰かが固定された記事として書かないと検索性が低くなってしまうので
  2. フレンドをクリックしたあとに前の画面に遷移するとフレンド一覧が折り畳まれるため「次のユーザ」を選択することができない
  3. VRモードの場合、OVERDrop等のVRオーバーレイアプリを使用する形が主流だと思われます
  4. 例:私
  5. 究極的にはApple製品のHandoffのようなデバイス間切り替え機能まで実装されれば万々歳ですけど、まあこれは無理な話ですね
  6. 幸い、運営による審査やSafety Systemといった運営上必要な機能はすでにアバター・ワールドについては実装されているので、これを転用すればそんなに技術的には難しくないと思います
  7. そもそも人間の生物的なスペックの限界で数百人の容姿を同時に見たり声を同時に聞いたりする事はできないので、愚直に全員描画する必要は絶対にない