Programming in VRChat

VRChat でのプログラミングについて調べたことの書き溜め

2022/12/15 付け Developer Update の読み解き / 前編

はじめに

2022/12/15 の VRChat Developer Update の主な内容は、 ワールド作成関連の機能開発状況と 2023 年の年間目標について伝えるものでした。 ここのところ話されることのなかった長期計画について突然と語られたので界隈は盛り上がっていました。 一方で、プログラミングの知識を前提にして書かれている所があったり、 説明が大雑把であるために良く分からないという声も聞かれました。

私も疑問に思うことが多々ありました。 その後、VRChat の開発者との質疑や技術情報の調査などを通して、ある程度内容が見えてきたので、 それら情報を補足しながら今回の Developer Update を読み解いてみたいと思います。

この記事は前編と後編から構成されます。 前編は全体の要約と一般的な話題の補足、 後編Udon 2 の実装技術の詳細を深掘りします。

注意:この記事は未確定な事や予測なども含むため、結果的に正しくないことも書いているかもしれません。 必要に応じて最新の情報を追ってください。

要約

今回の Developer Update 中のワールド作成関連の開発内容を要約すると以下のようになります (これは整理・解説を加えたものであり、翻訳ではありません)。

  • 最近の開発アイテム
    • Udon でのネットからの文字列の取得 / Remote String Loader
    • Udon からの動画保存 / Video Recording
    • Udon からの画像保存 / Image Saving
    • 基本的な機能は作り終わってる。これからアクセス制限を検討・調整する
    • 補足:これらは Udon 2 とは関係ない。おそらく先行してリリースされる
  • 2023年の SDK 関連の年間活動計画
    • リエータに対するコミュニケーションを活発にする
    • ユーザからのフィードバックへの応答を改善する
    • Udon 2 (仮題)
      • Udon を改善するシステムを開発する
      • 互換性を保ちつつ、速度改善、機能追加を目指す
      • 補足:これは年間の開発計画であり、すぐに提供されるものではない。段階を踏んだリリースを考えていて、最初のリリースの基本的な部分はすでに作り終わっている

最近の開発アイテム

現在進行中の開発内容として次のものの紹介がありました (記事中 Ongoing Development )。

これらは VRChat による新年イベントのワールド「VRC NYE 2022」の中で既に使われていたので、基本的な機能は作り終わっているようです。 ワールド作成者に機能提供する前の残る作業として、アクセス制限などの検討調整をするとのことです。 これら機能は後で述べる Udon 2 とは関係はありません。

技術的な話: Remote String Loader によってネットワークからの情報取得が明示的に解禁されるにあたって、 取得元の URL を自由に組めるようになるかは関心が寄せられるところだと思います。 話を聞いたところ、まだ決定されたわけではない言いぶりでしたがさしあたり現状の制限をかけたままになるようです。

補足:URL を Udon プログラムから自由に組める機能があると、 例えばワールド作成者がユーザの行動記録を取るといったことが簡単に行える可能性があります。 そのような事情を考慮して機能制限を設けているようです。

コミュニケーションの改善

Developer Update 記事中 Increasing Communication with Creators は要約すれば「VRChat からの情報伝達の改善」、 Improving and Supporting What We’ve Got は「クリエータからの情報伝達への応答の改善」で、 全体として 2023年はクリエータとのコミュニケーションの改善に取り組んでいくとのことです。

具体的には、以下のようなことが述べられています(口語調のものを箇条書きにした意訳です)。

  • これまでの Developer Update のように、定期的な情報伝達をする
  • 現在の開発状況と、次に何をするつもりなのかを知らせていく
  • 計画の変更があったら都度知らせるようにする
  • 深刻な不具合に関して対応を強化する
  • SDK 関連の Canny 投稿をさらいなおして、それら不具合と要望を解消する期間を設ける
  • ドキュメント(動画やサンプルを含む)の改善を続ける

記事では触れられていませんが、この背景には 2022年10月頃の Twitter での意見交換があると思います。 それは次のような流れで起きた会話でした。

  1. EAC の導入と共に mod の締め出しが行われた
  2. 悪用の意図ではない「mod の機能が必要だ」との声に対する“回答”として、一部の mod が実現していた機能を追加するアップデートが矢継ぎ早に行われた
  3. それらは一般のユーザの日々の利用での快適性改善に関するものだった
  4. それに比べ、アバターやワールドを作るクリエータが欲している機能や改善要求は放置されたままだ(どうすればいいんだ)、 という不満がクリエーターから寄せられた
  5. これをうけて VRChat のユーザコミュニケーション担当の tupper さんから 「クリエーターの問題を解決する要求の処理方法の改善が必要だ、と考えさせられた。何ができるだろうか」という趣旨の 問いかけ がされ、
  6. リエータから現状の問題点と改善策の提案が寄せられた (当時の私のまとめ

私も以下のような 提案をしました

  • 定期的な情報更新はありがたい。(続けて)
  • ドキュメントを正確に最新に保って
  • 当初案から延滞が起きたら追って情報を出して(変更が起きるのはしょうがない。でも言いっぱなしにしないで)
  • 情報が十分に寄せられていて簡単に直せそうな不具合はさっと直して

Developer Update で書かれた内容を見る限り、 意見を寄せたクリエータが感じている事が課題であると認識されたようであり、 記事に書かれたことは良い方向への歩みであるように思いました。 実際にどう変わっていくかは今後の様子を見たいと思いますが、 もしも困る状況が続くようであればここでの目標設定を足掛かりにして話が出来るようになったと思います。

蛇足: B2C な「users」と B2B な「creators」

この Twitter での対話の中で FairlySadPanda さんが指摘していた内容 「ワールドやアバターやツールなどのクリエーターと VRChat 社の関係は、 B2C(business-to-consumer 企業と消費者間のコミュニケーション)というよりは B2B (business-to-business 企業間のコミュニケーション)に近い」 は、なるほどそうだなと思いました。

リエーターではないユーザ向けの情報は、特に前提知識を必要とすることなく誰にでも分かるように伝えていく必要があるでしょう。 一方クリエーターには正確で詳細な(ある意味で遠慮のない)技術者レベルでの対話が必要になります。 実際に例えば、リリースノートで前者向けと思われる平易な表現をしていて後者にとっては情報が不足していることが見受けられます。

この意識を持ってみると既に「users」と「creators」という表現との微妙な使い分けが既に起きているようにも思えてきました。 これまでは冗談めかして「VRChat のユーザはゲームクリエータ」というようなことも言われていましたが、今後は徐々に分かれていくのかもしれません。

Udon の新しい実行環境: Udon 2 (仮題)

Udon 2 (working title) は、現行の Udon スクリプトを実行する仕組みを大きく変える開発が進行中であるという話です。 これはワールド作成者にとっては、

  • Udon プログラムの動作が速くなる
  • プログラムをほぼ普通の C# として書けるようになり、従来 U# に比べて使える言語機能が増える
  • Graph エディタでの作成を容易にしていく機能が追加される

ということを目指すものです。変更にあたっては互換性を重視して、

  • 新たに提供される SDK でビルド&アップロードし直せば、それだけで速くなる(つまり、ワールドのシーンやスクリプトの書き換えの必要はない)
  • 従来アップロードされているものは、システムが更新されてもそのまま動き続ける

という方針が示されました。

(ワールド作成者ではない)ユーザにとっては(Udon 2 は直接使う機能追加ではないので)ある意味影響はありません。 あえて言えば「今のよりももっと複雑な凝ったワールドが多く作られるようになる」かもしれません。

C# が出来ること概ね何でも」のくだり

Udon 2 で出来ることの説明として 「You can use Lists, Dictionaries, Actions etc. – pretty much anything that C# can do. This makes it a lot easier to port existing work to VRChat」 という一節がありました。

これはつまり噛み砕くと

  • C# の言語機能は概ね全て使える
  • 具体的には例えばジェネリクスを伴う List, Dictionary、デリゲートを使っている Action が使える
  • U# ではサポートされていなかったために書けなかった普通の C# としての書き方が出来るようになる
  • 結果的に既存のプログラムを VRChat に持ってくるのが容易になるという効果も望める

ということだと思われます。

つまりここでの「全て」は「C# の言語機能として全て」の意味であって「通常の Unity プログラミングで C# でできること全て」ではありません。 Udon から利用できない範囲の API 、つまりはワールド作成者には触らせたくない機能の範囲の方針は変わっていません。 (これは記事中「you’ll still need to work within the Udon VM sandbox」のくだりなどから読み取れます)

また C# のバージョンについて「the compiler will use C# 7.3 for Unity 2019 compatibility」という注意書きがありましたが、 これは 「概ね全てとは言うものの、いくらかの制限はかかる。例えば Unity との互換性のために C# のバージョンが低く押さえられるといったような可能性はある」 という意味だとのことです。 (「Unity 2019 のままにする」という意味ではない。「この部分、過剰に意味を取りすぎ」とのコメントがありました。)

カスタム・グラフ・ノード / Graph エディタの Nodes の拡張

Custom Graph Nodes は U#(というか C#)でプログラムを書いて、それを Graph エディタからノードの一種として呼び出せるようにする機能追加です。

これまで Graph エディタで Udon プログラムを作成する際の大きな問題として 「グラフとして図形的に表記するにしてはあまりにも(粒度として)細かい記述が要求される」 「結果、あまりにもグラフ全体が大きくなりすぎて扱いにくい」 「見通しが悪くなりがちで、維持する(メンテナンスする)のがつらい」 といった要は図として書く十分に旨味が得られていない点が指摘されてきました。

このカスタム・グラフ・ノードの機能はこれら改善するものになるかもしれません。 「ギミック作成者が U# でプログラムを書いて提供して、 それを Graph エディタを使ってワールド作成する人が利用する」 といった使い方(あるいは役割分担、分業)の道が開けます。 上手く行けば Graph エディタで書くことは主に 「ワールド内で起きる物事(イベント)に対応して、U# で作られている部品の機能を呼び出す」 というものになるでしょう。

グラフとして書かれることが「結び付け」に絞られるならば、 グラフは分かりやすく見渡せるようになり、 現在よりももっと気楽に使い始められるものになるかもしれません。

Udon 2 リリース時期の見通し

Udon 2 は少なくとも二段階に分けてリリースすることを考えているようです。 (記事中 When do I get all this cool stuff?!?! の部分)

最初の段階(現状の Udon を Phase 1 とすると Phase 2)ではカスタム・グラフ・ノードが提供されます。 これを動かす基本的な部分は概ね作成済みで、現在は使いやすくするようにする部分の作業中とのことです。 これはそれほど長くかからずにリリースされてくると期待できます。

その次の段階(Phase 3)についてはリリース目標期日の設定はされていないとのことです。

後編へ

この記事の 後編 では、Udon 2 の実装の技術詳細を深堀りします。