LoginSignup
4
1

More than 1 year has passed since last update.

NeosVRで今年作ったもの

Posted at

こんばんは。きさらぎです。
この記事はNeosVR(その2) Advent Calendar 2022の5日めです。
昨日の記事はLettuceFryさんの「今年作ったものリスト」でした。

NeosVR1ツイッターをやっています。GitHubではKisaragiEffectiveとして活動しています。ただまあまあ識別子(しきべつし)が長いので、この界隈ではkisaragi(きさらぎ)と名乗っています。よくLinuxのペンギンアイコンが珍しいと言われます2

早速振り返りをはじめていきたいと思います。

今年作ったツール

NeosInventoryManagement

これは何?

NeosVRにはインベントリという、モデルやアバターやワールド(以下、本稿ではまとめて「アセット」と呼ぶ)を保存するストレージがあります。ストレージには容量の上限はありますが、個数制限はありません。
そのインベントリをWindowsのエクスプローラーのように管理できるようにするためのツールになる予定です。

経緯

NeosVRを始めて3から1日目[要出典] の2022年7月29日4。kazuさんと話していた中で、次のようなやりとりがありました(敬称略)。

kazu「あれもこれもと保存していくと、フォルダーの中身がひどいことになるんですよね」
kisaragi「みなさんそれどうしているんですか」
kazu「大晦日に『インベントリ整理大会』を開いて出しては入れてを繰り返していました」
kisaragi「うわぁ…」
kisaragi「インベントリ操作用のAPIとかないんですか?」
kazu「ありますよ、ドキュメント見ますか?」

そうしてドキュメントやkazuさん手製の内部資料が手渡されました。

それから数日で大概の機能は実装し終わりました。途中オプションで有効化することができるTOTP5を追加したりなどもして、0.1.8までバージョン番号を駆け抜けました

今後の展望

将来的にはNeosVRのAPIに対する操作を別のクレート6に分離し、そのクレートをOSSライセンスで公開したり、FUSEを使ったNeosFSを作ろうと考えています。また、アセットのコピーや削除、ディレクトリの移動7・作成もコマンドラインから行えることが望ましいと思うので、今後もおそらくコミットし続けることでしょう。

NoPulseFromDisplayImpulse

これは何?

NeosVRにはLogiXというノードを連結してプログラミングをする要素があります。LogiXのDisplayノードにImpulseという「発火したもの」を出力すると、出力のたびにエヴァンゲリオンのATフィールドのような八角形のエフェクトが出てきます。それを抑制するMODです。

なぜ?

そのエフェクトが高頻度で発火するとセッション8がクラッシュすることがあるためです。

今後の展望

MODリストとかに登録する、とかでしょうか?まだ具体的なビジョンが浮かんでいません。

EnableSitModeOnLaunch

これは何?

以下のツイートを見て「できそうだな」と思ったので作ったMODです。

NeosVRの着席モードってVrchatみたいに固定できないもんかな?起動毎にスイッチ押すぐらい面倒くさがるなと言われればそうだけど。
https://twitter.com/maid_doll/status/1584217788528218112

なぜ?

簡単そうだと思ったからです。

今後の展望

このMODは少なくとも期待したように動作していないのは事実ですが、それがMODのせいか、NeosVRの仕様なのかがはっきりしないのでそこを解明した上で修正したいです。

neosvr-launcher-wrapper

これは何?

NeosVRはコマンドラインから起動することもできます。NeosVRのコマンドライン引数は割と複雑な上、なにかおかしなことがあっても黙って引数を「食べて」しまいます。このプログラムをターミナル9から起動することで、予め不正な引数の組み合わせなどを検知し弾くために作成しました。

今後の展望

  • オープンソース化
  • マニアックな引数に対応していないのでゆるやかに増やしたい

nikka-leaps

これは何?

nvmlを介してNVIDIA製GPUのVRAMの使用量を監視するプログラムです。

なぜ?

NeosVRにおいてVideoPlayerなどにテクスチャが割り当てられないことがある原因を調査するために作りました1011

将来の展望

  • ターミナルで動かすことを想定しているが、ターミナル環境であってもGUIのような「華やかさ」をもたせたい
  • 折れ線グラフの出力

来年の野望

来年の話をすると鬼が笑うと言いますが、来年の野望を表明しておきたいと思います。

LogiXをテキストで管理できるようにする

LogiXは、ノードやコンポーネントのデータの流れを考えると有向グラフとみなせるので、どうにか押し込めればテキストで管理できるようになりそうという直感があります。実際、ほとんどの目にするアイテムは*.7zbsonという拡張子で保存されており、その中身はBSONというJSONのコンパクト版を、GZipで圧縮したファイル形式です。よって、機械可読ではあります。

ただし、JSONでプログラミングするのはオブジェクトのキーの名前や構造に気を自分で気を遣ってやる必要があり、とてもだるいので、*.7zbsonと完全に互換なプログラミング言語を作ろうとしています。

ただし、そこに至るまであまりに知識が足りなさすぎて全く追いついていないのが現状。

  • コンポーネントの数が多すぎる
  • ノードの数も多すぎる
  • どのノードがどのノードの型の組み合わせ (オーバーロード) を受け付けるのかわかってない
  • サブタイピングが入ったプログラミング言語の設計の経験がない
  • LogiXを完全に理解しているわけではないのでエッジケースの振る舞いがわからない
  • どのようにLogiXを「より理想的な形」で再定義できるか考えがまとまっていない
  • その性質上インタプリタを構築するのが難しい

ただ、実現すれば世界を変えることになるかも知れないので、早いところ完成させたいと思います。

NeosVRのMODに対する継続的インテグレーション

NeosVRのMODというのは、人によってインストールしている場所が異なることもあり、*.csprojが完全に自己完結というわけではありません。GitHubのPull requestでビルドを走らせようと思っても、まずはNeosVRのクライアントをインストールせねばならず一苦労です。
そこで、将来的にはGitHub Actionsか何らかの形で、NeosVRのクライアントとNeosModLoaderをインストールした上で、手動ではなくGitHubのサーバーでビルドできるかどうかを確かめる環境づくりをしたいです。

あとがき

今日はものすごく急いで書いたので文が乱れていると思いますが、読んでいただきありがとうございました。
明日の記事はきさらぎの「私とNeosVRの関係性について振り返り」です。引き続きお付き合いください。

注釈

  1. ユーザーID: U-kisaragi-marine

  2. 日本におけるデスクトップパソコンで、Linuxのシェアは1%未満であることから、NeosVRもおそらく似たような状況なのでしょう。

  3. どうして始めたのかは明日書きます。

  4. https://github.com/KisaragiEffective/neosvr-inventory-management/commit/8b0831cb24bc39a4c106b2f545f1da92fd769e3a

  5. 2段階認証に使うコードを生成するプロトコル。RFC6238に沿っています[要出典]

  6. Rustにおけるクレートとは、C#のdllのような「まとまり」のことを指します。詳しくは https://doc.rust-jp.rs/book-ja/ch07-01-packages-and-crates.html を見てください。

  7. 過去のリリースで壊れていることが発覚し、実装力の不足により直ちに実装できないと判断したため、ディレクトリの移動を行うことを一時的に禁止しました。

  8. NeosVRでは、VRChatにおけるインスタンスのことを「セッション」と呼びます。

  9. cmd.exe (コマンドプロンプト) みたいな黒地に白い字のウィンドウが出る なんかハッカーっぽい あいつです。

  10. おそらく素直にGPUを新調したほうが良い気はしています。

  11. VRAM以前の問題として、NeosVideoPlayerFixを入れた上でyoutube-dlを入れていないなどのミスも過去には起こしていました。

4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1