PSF進捗まとめ #4

UI会議

これUIのデザイン決定したあとに描いてません?

3Dのモデルやデザインを考える上で、最も簡単なブレスト方法はVR空間にペンを持ち込んで「空間上に描く」ことです。このやり方はVRプラットフォームの概念に慣れていない人から見れば「バーチャル空間上でディスカッションするなんて新しい!」みたいな感じかもしれませんが、廃人慣れている人から見れば「いや、あっちに『行って』考えればいいじゃん」みたいな感じだと思うので難しいものですよね。

執筆現在のVRChatでは、インタラクトまたはピックアップ可能に設定したオブジェクトについて、手やカーソル(デスクトップモード時)を近づけた時に水色のアウトラインと事前に設定したテキストが表示されます。ただし、これはあくまでミニマルなもので、SF映画でありがちな「空間に情報がシュイーンと出て手でシュッ!とやるとシュイシュイシュイッ!ってなる感じのやつ」をやろうとすると、やはり自分で作るしかありません。

しかし、自分でUIを作るとなると、今度はVRChat本来のUIが強制的に表示されてしまうためかえって邪魔になってくるわけです1。なので、このときは「VRChatのUIと自然に馴染む『装飾』としてのUI」ということで、後述するツイートのようにオブジェクトの前面にピコッとアイコンが出てくる形に落ち着きました。本当は直方体の角にマーカーが表示されるタイプでもよかったんですけど、デフォルトキューブとイメージが被りそうだったのと、ピックアップ中のオブジェクトに常に直方体がかぶさって見えるのがたいそうダサそうだったのでなかったことになりました。


自販機

で、出来上がったやつです。前述のような「対象となるオブジェクトの角になにかを表示するタイプのUI」だとこういった小さいボタンにうまく対応できないので、結果的にこういうアイコンタイプでよかった形ですね。ちなみに、この自販機の本体(UdonBehaviorがついてるやつ)は自販機表面をビュンビュン飛び回ってる不可視のボタンひとつで、両手のうち近いほう(VRモード)または視線の先(デスクトップモード)の位置をもとにしてうまいことたくさんボタンがあるかのように見せかけています。また、出てくる缶2についてはワールド全体で缶プールを共有しているので、古い缶はときどきしれっと消えます。

実装面でいうと、このUIは1) 表示用のプレハブをInteractまたはPickup対象の子に配置し、2) UI表示用のUdonBehaviourをアタッチすることで実装しています。結果的にUdonの数が倍増するのであんまりきれいな実装ではないのですが、逆に今のUdonSharpには継承のようなきれいな実装をするための機能がないので仕方がないのかなと思います。アイコンの種類とか色とかはいい感じにマテリアルに渡してテクスチャから引いています。これ(分かる人には自明だし分からない人には分からないので)書く意味ある?

ちなみに、動画ではあまりうまく映っていませんが、取り出し口の「ふた」は缶が出てきた衝撃でプラプラするしなんなら手で押せます3。これは実際そんなにUdonを使ってはいないのですがこういう細かいディティールがあると「そこにある感」が出ていいですね。

この動画、「撮り方」をよくよく考えてみると例のアレの機能も同時並行で進化していってることがわかります。遍在、させたいですよね。


LC-3

VRコンテンツにおいて、銃というアイテムには魔力とも呼ぶべき魅力があります。極端な例をあげればただ銃を撃つだけのゲーム(失礼な言い方)まで存在するように、現実ではそうそうできない「銃を思う存分ぶっ放す」という体験は一般的に大きな魅力なのでしょう。かくいう私も、Half-Life: Alyxとか、Fallout 4 VRとか、PAYDAY 2とか、BONEWORKSとか、Skyrim VR(ただし弓)とかで計百時間くらいは撃ちまくっています。まあ、これを作らない手はないですよね。

しかし、一つ問題になってくるのがリロード方法です。上記のようなタイトルにおける銃のリロード方法は、コントローラのボタンを押すだけのもの(F4VRとPAYDAY2、どちらも非VRゲームからの移植なのと銃の種類がかなり多いので実装コスト的にやむなし)、本物の銃とほぼ同じ動作が必要なもの(BONEWORKSとH3VR、そもそもコンセプトからしてリアル志向なので妥当)、その中間(Alyx)がありますが、VRChatの場合はPickupの実装の自由度(うまく実装しないとフォーカスが銃本体に吸われてしまう)やコントローラごとの差異の吸収がうまいことできない4 5関係でこれらの手法はあまり安全ではありません。なのでLC-3では「弾を撃ち尽くして下に振り下げるとリロード、その後振り上げると装填+自動コッキング6」という無から弾が湧き出てくるメソッドになりました。まあ、そもそも呪詛もとい祝福の言葉が刻んであるような不思議銃なので、理由付けはいくらでもできます。

動画ではしれっともう片方の手でマガジンの底を押して装填していることもありますが、これはAlyxリスペクトというか、「直感的に操作できそうなことは全部実装する」の精神で実装しています。特に二丁持ちしてマガジン同士をカッと突き合わせて装填するのがかっこいいんですよ。本編ではたぶん一丁しか出てきませんけど。


電波暗室

「この部屋はダイナミックなライティングをガッチガチにやりたいなぁ」と思ったのでやったやつです。リプライの通りめちゃくちゃアドホックなやり方で実装しているので決して汎用的なギミックではありませんが、まぁこういう丁寧な実装が質の高い体験につながる7ので、やりました。


エレベーター

こういう動画を撮りたかったんですよ(話速1.10倍・高さ1.10倍・抑揚1.30倍)。執筆時点で300いいねがついているのですが、何に対する「いいね」なのか内訳が微妙に気になっています。

エレベーターの実装については、「実際にハコを動かす」か「動作音だけ再生しておいて、ドアが開く直前にテレポートさせる」の二通りがありますが、前者のほうがエレベーター外部の声や環境光の変化、エレベーターが移動することによるアバターやDynamic boneの「ブレ」によって上下移動していることを「感じる」ことができると思って前者にしました。実際のところこれはVR感覚ならぬ「VRC感覚」で、VRChatをプレイしたことのない人がはじめてこのエレベーターに乗ったら「なにこのガッタガタなエレベーターは」となることは確実なのですが、まあ、諸条件を考えるとどちらを優先すべきかは目に見えてるので……


神社

神社、いいですよね。境内の敷地面積の都合上、「Ennichi Playgruond」とは無関係の別の神社ということになりました。

たしかこれがルピさんファスさんと三人ではじめて動画を撮影したときだったと思うのですが、ファスさんが案外私と身長が変わらなくて驚いたり、一人で撮った動画を確認しているときにファスさんとすれ違ってビビったり、こいついつも面白い体験してるないろいろ面白い体験でした。


コンビニ

こいつらは一体何を撮りたいんや……

ちなみに、この入店音は1%の仮想のBGMのアレンジなのですが、これ自体が2009年に作ったゲーム「Daydream」のテーマ曲のアレンジで、これを2015年前後に作ってたゲーム(未完)のコンビニ入店音としてアレンジして使おうとしていたものを5年の時を超えて持ってきたものなります。使いまわし。


水着回

はい。


  1. PickupやInteract相当の機能をまるっと自作することもまあ不可能ではないとは思いますが、Haptics等のUdonで直接触れない機能は全損してしまうので多分やらない方がいいと思います。
  2. 当たり前ですが、ペットボトルのボタンを押すとペットボトルが出ます。私こういう細かいところに手が届いてないのが嫌いなので。
  3. 現実の自販機では「押す」ではなく「引く」なのですが、そんな細かい動作はユーザに要求できないので「優しいウソのふた」です。
  4. 「自分の持ってるコントローラで空いてるボタンだから大丈夫だろう」と思って不用意に割り当てると、ジャンプするたびにマガジンが排出される銃が爆誕したりする可能性があります。
  5. この辺りはVRChatの運営も苦慮しているようで、先日のAvatars 3.0アップデートで操作がさらに複雑になったことでTwitterでは一部ユーザーにボロカスに叩かれたりしてます(かわいそう)。
  6. LC-3の画像をよ~く見てもらうとわかりますが、そもそもマガジンの先がチェンバーに届かない設計なのでなにか不思議なことが起きて装填されます。
  7. Half-Life: Alyxをやれ