PSF進捗まとめ #5

忘れてた 久しぶりに、PROJECT: SUMMER FLARE関連のツイートまとめ。

まだまだ絶賛作業中なのですが2020年中には公開したい……!


LC3関連

「一日前」でも出てるヤバい銃ことLC-3です。

ゲームに登場する普通の銃(?)ではステージ内の弾薬を拾って使うのが一般的ですが、VRChatの場合はパフォーマンスやプレイヤーまわりの仕様があまりにも複雑で制御しづらい1ため、なんか不思議なしくみで銃弾が無限に使えるようになっています。この銃、いつか機会をうかがって物理でも作ってみたいんですけど、こんな小型の2色16セグLEDは実在するのか……?

スリーブガンという仕様は「本編で銃をずっと持ってワールドをまわるのが(特に物理的に常にコントローラを握っている必要があるIndexコントローラの場合)つらい」とか「両手を使わないと進めない場所がある」という理由で実装したものです。なので、大して歩き回る必要のない「一日前」ではこの機能は有効になっていません。ただ、右腕に常に銃がくっついてくるのは微妙にウザいのと、手を振ったときに誤爆しやすいので、もしかしたら別の仕様で銃を持ち運ぶように変更されるかもしれません。なんかこう、手を前にパッと突き出すと「召喚」されるとか……


望遠鏡

「一日前」でも出てる望遠鏡です。

そもそも「一日前」のエントランス部分は「1%の仮想」のセルフパロディで、そっちの方の演出の〆で使ったギミックをこっちにも持ってくるという目的で実装しました。もちろん本編でもいい感じの場面で出てくると思います。望遠鏡、月、仮想、何も起こらないはずはなく……

この望遠鏡はツイートのように実際にものを見ることができます。倍率とか、覗き込んだときの像の見え方とか、いろいろツッコミどころが多いギミックなんですけど、Half-Life: Alyxに毒されてワールドに置かれた機能的なオブジェクトが本来の機能を持っていないのが気に入らないのでそれっぽく望遠鏡してくれるようにギミックを作りました。技術的には、頭と接眼レンズの位置から見え方を計算して視界ジャックの要領でものを見せています。また、このギミックはVRモードとデスクトップモードで挙動が違っていて、VRでは実物よろしく見たいものが視界の中央に来るように顔を動かす必要がありますが、デスクトップモードではそのような細かい調整はできないので、単に頭を突っ込むと像が画面中央に表示されます。


「一日前」の小物類

私たちはその先に進めるのでしょうか?
天まで届くあの塔を超えた、その先へ?

ここらへんは「一日前」のワールドとかギミックの紹介です。詳細は、実際に訪れてみてください。

ホワイトボードにいたっては手で触って回せる必要はまったくないのですが、単に没入感が出ると思って実装しています。VRChatではオブジェクトのオーナーでない人がオブジェクトを動かしてもすぐオーナーが保持している姿勢で上書きされてしまう(結果よくわからないもぞもぞした動きをする)ため、ホワイトボードに近づいた人に自動でオーナーシップが移動するようにしています。地下にあるLC-3用の的についても、近づいた場合かLC-3を持った場合に自動でオーナーシップの移動を行っています。


ダイダン

だからダイダンってなんですか?

4本足の重機のアニメーションを手付けでやるのはとてもじゃないけどやってられないので、Udon様にお願いしたデモです。油圧シリンダーの動きも(Constraintの勉強をするより書いたほうが早いので)すべてUdonで実装しています。動画内の赤い球は足先の目標地点で、足先が到達できないような姿勢になるとレイを飛ばして場所を再設定します。動画の時点では足先が現在の姿勢のみから決定される(移動方向は考慮しない)ため急峻な坂では体が引っ張られるような挙動になっています2。が、実際に使われるシーンではいろいろな制約があるので見かけ上そこまで問題にはならない……はずです。


アーム

うで。私の作品は例のごとく†解釈†がただひたすらにややこしいので、解釈違いが発生しないように慎重に実装を進めてまいります。

ダイダンもあるように、PSFでは「フルスクラッチアバターを何体もワールドの演出として使用する」とかいうVRChat界隈的には非人道的な人月の使い方をしているので、のちのちアバター単体の販売とかもできればいいんですけど、こいつの場合は扱いがややこしいのでいろいろ検討中です。

というかこの腕とLC-3のプロトタイプは2018年にすでにツイートしてるんですよね。もとは3本指だったのですが当時はスキニングの概念を知らなかったHumanoidアバターの構造との相性を考慮して新規にモデルを組み直しました。


夏の景観

夏、いいですよね。なんてことない住宅街の路地裏も、「最高の夏」としてラベリングされてしまうと、もう帰りたくなくなっちゃいますよね。


水族館

アクアリウム。

魚群は大昔に書いたシェーダーで1024匹のボイドを計算し、それらの一部か全部を描画するSkinned Mesh Rendererを複数配置してくことでたくさんの魚を表現しています。とくに、水槽によっては細長い空間に魚を満たす必要があるため、同じCustom Render Textuerを使いながら描画側のシェーダーのパラメータをいじることで魚の描画範囲を変更しています。そんなわけで、遠目によ〜く見ると水槽の長い辺方向の速度がやけに速かったり、2つの離れた魚群が同じような動きをしているように見えたりしますが、VRで見ていると(2つの意味で)視野が狭いのでそこまで気づかないと思います。

コースティクス的なアレは水槽ごとに設置したプロジェクターによるもので、Udonでプレイヤーがどの部屋に居るか検出してオン・オフを切り替えています。とくにこの水族館は2部屋先が絶対に見えないように設計してあるので、今いる部屋とその前後のみ有効にすれば不自然になることなく高コストなエフェクトをガンガン使用できます。


リスポーンシステム

本当は「一日前」の時点で実装するはずだったやつです。

VRChatではピックアップ可能なオブジェクトがどっか行くのは日常茶飯事で、ワールド作者側が厳密に制限することはほぼ不可能なため、進行に必要なオブジェクトをただ単に配置しておくだけでは必ず「詰み」が発生します。「1%の仮想」と「アスタリスクの花言葉」では徹底してピックアップオブジェクトの初期地点にリスポーンボタンを置いて対策していましたが、今回はもうちょっとスマートに自動で復帰するようにしました。

このリスポーン機能は青いUIを出すUdonの一部として実装してあるので、このUIが出るオブジェクトすべてに自動で実装されます。強いて言えばPortalシリーズとかBorderlandsシリーズ3における「統一感のあるリスポーンエフェクト」のようにメッシュがいい感じに消えるやつができればいいんですが、実装と動作検証に時間がかかりすぎるのであっさりめな演出になりました。


その他小物類

たぶん本編には出ないけど作りたいから作ったやつ、その1とその2。

見ての通り、謎の言語で書かれた洋(?)書と無駄に黒塗り4された学術論文(プレプリント版)です。実際はワールドを作ることに疲れて設定資料集を出すというていで試しにレンダリングした画像です。こういう「作中では登場しないかさらっと言及されるだけだけど設定上重要な役割を果たしてるオブジェクト」っていいよね……。洋ゲーとかをクリアしたあとにFandomを読み漁っちゃうこと、あるよね……。


はしご

はしご。VRChatの文脈でいうとCyanLaserさんのクライミングシステムとそれを使用したワールド群が有名だと思われますが、こちらはUdonで独自に実装したものです。

システム的には、「はしごの段を握った手を握った地点に近づけるように速度を与える」ように実装しています。そのため、(リアルの)手を動かしながら手を離すと、当然、動画のように飛べます。ただしこういうアグレッシブなレベルデザインを好き勝手できるかというとそうでもなくて、トラッキング方法・PCスペック・VR酔いへの耐性が人によってだいぶ違うことを考慮するとコンサバに作らざるをえなくなります。特に非VIVE/SteamVRベースステーション環境では真後ろに手を回したりできなくなるはずなので、まあ、「アスタリスクの花言葉よりは簡単なアスレチック」にはなるんじゃないかと思います。(それVery hardくらいのニュアンスになってない?)

このギミックではmasterとslaveと名付けられた2つのPickupを使用していて、はしごを握っていない場合にmasterが手から最も近い地点の段に移動し、masterが握られている場合のみslaveも使用されます。Pickupは「左右どちらの手で持たれているかを区別できない」「持てる手を左右どちらかに制限できない」「両手で同時に持つことができない」という致命的な弱点があるので5、2つのPickupをうまいことハンドルして両手でつかめるっぽくしています。動画で持つ場所のアイコンがなぜか持ち手の左右に寄っているのも「今は右手(または左手)で握られることを想定してるから別の手で持つんじゃねーぞ」という威嚇です6

このシステムでは1つのUdonBehaviourでワールド内のすべてのはしご(プレハブ)の位置をロード時に取得しているので、ワールド内にはしごプレハブをペッと置くとそれだけで登れるようになります。動画では1種類のはしごしか出ていませんが、本編では「前に進むやつ」とか(実装済み)、「横に進むやつ」とか(余裕があれば実装予定)、常識的な範囲で非人道的なギミックが出てくる予定です。こういうのはboothとかで配布(販売)すれば界隈内でウケるのかもしれないですけど、そもそもこういう「単体では無価値なギミック」7を1つの作品として昇華できる人はそもそも自前で実装できると思われるので、そういうスタンスで日々を生きています。


  1. 冷静に考えて「プレイヤーの誰かがガチで寝てても体験が進行できるようにする」みたいな要件が必要になってくるのはある種の狂気です。家からゼロコストで来れちゃうからね……
  2. 逆に言うと、腰の位置を同期してしまえば全プレイヤーが「同じダイダン」を見ることができます。
  3. Borderlands 2 DLC4をやったあとにBorderlands 3本編をやってほしい、泣くから
  4. 個人的にはこういう設定資料でカッコつけて黒塗りにするのは嫌い(ディティールを詰めるのを放棄してるように見える)なのですが、今回は長文のクソザコ英語を書きたくないそれも設定の一部として内包するようにしています。詳細はまたいつか。
  5. と思ってたのですがcurrentHandで取得できるっぽい?
  6. ので、右側にアイコンが出てる状態(左手よりも右手がはしごに近い状態)で左手をPickupにフォーカスが入るギリギリまで近づけて握ると、「左手で握っているはずなのに右手につられて体が動いちゃう」現象が起こってしまいます。
  7. 「はしごをVR界で一番ブチ上がるはしご演出に昇華した例」といえばBONEWORKSです。はしご好きならぜひやってください。