Narazaka::Blog

奈良阪という人のなにか

今よりもっと「クロスプラットフォーム」なVRChatを作りませんか?

こんにちは。VRChatはじめて以来1年半ずっとstatusに「まちカドまぞくを読んで下さい」と書いている事で有名な奈良阪です。まちカドまぞくを読んで下さい。

クロスプラットフォームなVRChat

VRChat Advent Calendar 2019 8日目の今日は2019年12月8日。 同年5月21日にVRChat Questが来てからはや半年。つまりVRChatに「クロスプラットフォーム」概念が本格的に到来してからもう半年です。

開始当初はごく一部という感じだったPC/Quest両対応アバターも、今では結構対応している人が多くなってきたイメージです。

自分が半年前に書いたQuest対応記事を「読みました!」と言っていただけることもたびたびあり嬉しいです。 みんなクロスプラットフォーム対応していこうな!

narazaka.hatenablog.jp (最近シェーダーについての記述修正と裏面描画対応あたりを追加してアップデートしました。)

より広い意味での「クロスプラットフォーム

……しかしふと思いました。「クロスプラットフォーム」、「仕様が全く異なる環境上で、同じ仕様のものを動かすこと」……たしかそういうの……Quest以外にも何か……?

そう、VRChatには「仕様が全く異なる環境」、つまり「デスクトップ民」、「VR民」、「フルトラ民」がいます!(たまに「腰トラ民」も)

つまりVRChatは実は元からクロスプラットフォーム性のあるゲーム(?)だったのですね。

そして「Quest民にはDynamicBoneが見えない」のと同じように、「デスクトップ民はカメラが使えない」、「VR民は寝転べない」、「フルトラ民がアバター椅子に座ると変になる」等々、環境固有の仕様制約というのはたびたび顕在化しています。

環境によってある程度非互換な所があるのは仕方ないのですが、やはりできる限り同じ体験をしてみたいという気持ちは生まれます。

特にやはり「フルトラ民」の自由度が半端じゃないです。様々な可愛い動き、かっこいい動きをほしいままにするその姿。そんな体験してみたい!

そのフルトラ民のみに許された娯楽の一つ、「VR睡眠」。 もちろん「VR民」にも「VR HMDかぶったまま眠ること」はできるわけですが、本当にVRの中で寝ているかのような没入感の高い体験はやはり「寝転がれる」フルトラ民ならではという感じがしますね。

たまたまフレンドのなんとかルームにJOINした時にフルトラの人が4、5人くらい同じ布団で寝転がって寝てるという光景を見て、ああこういうの良いなあと思って……ふと、思いつきました。

これ、「クロスプラットフォーム」でできる……!

クロスプラットフォーム睡眠ワールド「Just Sleep For Everyone」

(もちろんQuestにも対応!)

デスクトップでも、VRでも、Questでも、もちろんフルトラでも、「ベッドに寝転がれる」ワールドを作りました。

仕組みとしては単純で、「立ってる状態でも布団と並行になるよう部屋を90度傾けた」&「床で頭位置調整できるようにした」です。

f:id:narazaka:20191208152356p:plain
横から見た図
f:id:narazaka:20191208152521p:plain
昇降床で位置調整をして布団に寝よう!(床は透明にできます)

実際の使用例はこんな感じ。

予想だにしなかった使い方も含めていろいろな遊びが生まれて面白かったです。

(ややトリッキーな実装方法ゆえ、ぶっちゃけクソワールドとの境界線上っぽいかもと思ってたんですが、結構普通に好評を博したので良かったですね。)

寝ている正面を鏡で見るのも良いですが、横を向いて添い寝感を楽しむのはまた格別。たぶんこういう所がこれまでフルトラ民にしか体験できなかった領域なんだろうなあ……。

今よりもっと「クロスプラットフォーム」なVRChatを作りませんか?

そんな感じで、「フルトラならではの体験」だったものを「クロスプラットフォーム」化したワールドを作ってみたら思った以上に楽しめました。

ワールドでもアバターでも、Quest対応することばかりがクロスプラットフォームではありません。

PC/QuestクロスプラットフォームワールドでPC民とQuest民がそれぞれの違いを面白く感じるように、デスクトップ、VR、フルトラなどの環境差にクロスプラットフォームの架け橋をかけてもまた新しい面白い体験ができてくるんじゃないかと思います。

環境の違いは文化の違い。 より広い意味での「クロスプラットフォーム」で、「異文化」の輸入・展開をするというのも、ワールドやアバター作りのネタの一つとして考えてみてはどうでしょうか?

自分の環境ならではの面白体験、あるいは隣の青い芝にあこがれての無理矢理面白アイデア、色々見てみたい!

宣伝

ちなみに上で紹介した「Just Sleep For Everyone」の床昇降システムはBoothで無料配布してたりします。

narazaka.booth.pm

他にもQuest対応ローポリアバター、Questにも対応できる複数差分アバター自動連続アップロードツールや、スクショを整理するやつ、その他いろいろある「奈良阪配本地」、良かったら見てってください。

narazaka.booth.pm

ついでにTips

最も有名な環境依存非互換の一つ、「デスクトップだとカメラが使えない(故に表情確認などができない)」問題に関しては、以下の「KawaiiCamera」をアバターに導入することで一応擬似的に解消可能だったりします。

デスクトップでアバターをアップロードしている勢は使ってみると便利かも。

(作者は動いたり動かなかったりする城の人です。)

booth.pm

うちのNoyちゃんが一番可愛い!を実現する グローバル同期プレイヤー追従NPC in VRChat

最近VRChatで、プレイヤーについてくるNPCシステムがちょっとした話題になりました。

ワールドに入ると静かに佇んで待っているNoyちゃん。

booth.pm

なんだろうと思いつつサイバーな雰囲気の街を探検しようとすると、なんとNoyちゃんが自分の後ろからトコトコついてくるのです!

つかずはなれずの位置でこっちを見ているNoyちゃんが大変愛らしい最高の体験ができるワールドなのですが、しかしその愛らしさを今そこに感じているのはあなただけ。残念なことにこのNoyちゃんはローカルでしか見えません

つまりそのかけがえのない光景を他人には共有できないのです。

今、そこに確かにいるNoyちゃんを、他の人から見ることはできない……。私の隣にいるNoyちゃんが他の誰よりもかわいいんだと(錯覚)、その抑えきれない感情を、誰にも証明することができない……。

……まあ、そういうのはそういうのでまたエモみがあるシチュエーションではあるのですが……。

というわけで、前置きが長くなりましたが…… グローバルに同期するプレイヤー追従NPCアセット を配布します。

グローバル同期プレイヤー追従NPC

narazaka.booth.pm

f:id:narazaka:20191107144938p:plain
みんなについてきているNPCが見えます

基本的に既存のローカルNPCシステムとグローバルプレイヤー追従システムを組み合わせただけです。

すでにこれを実現したワールドとして Bless The Rainsが存在し、犬(Dogeミーム)のGenericアバターがついてきます。

このワールドを参考にして、Humanoidアバターでグローバル同期するプレイヤー追従NPCを構築したのがこちらのアセットです。

以下このアセットについての紹介です。

ちなみに実際にこれを動作させたサンプルワールドはこちら vrchat.com

必要アセット

基本的な使い方

  1. 必要アセットをインポートしてからこのアセットをインポート
  2. Sync_NPCシーンを開く
  3. PropSpawner/SpawnedItem/pony-tail-01-BUを好きなアバターに入れ替えてコンポーネントの設定を移す。
  4. ワールドの床を好きな地形に変更してから「Window→Navigation」を開き、AgentsとBakeの項目を設定してから「Bake」ボタンを押してNPCが歩ける領域をベイクする。
  5. アップロードする

注意点

  • PropSpawner/SpawnerについているVRC_TriggerのうちSpawnObjectが設定されたActionを通常のモードで開いてはいけません。 もし開くとSpawnedItemをSpawnObjectする設定が消えてしまいます。 debugモードでのみここは編集可能です。 詳しくはToyBoxの当該部分のReadmeを読んでください。
  • PropSpawnerを複数使いたいという場合は特殊な操作が必要になるので、下記の「別々のNPCを選択して出現させたい」を参考にしてください。
  • 必要アセットのプレハブをそのまま使用するためにあえて変更したPropSpawnerをプレハブ化していません。複製などする場合はそれぞれでお願いします。(プレハブのネストが解禁されるUnity 2018も来るしね)

参考: コンポーネントの設定のうつし方

Copy ComponentとPaste Component Valuesなどを使ってください。

f:id:narazaka:20191107002228p:plain
copy component

ユースケース

しゃがみや滞空モーションを消したい

  • ThirdPersonAnimatorControllerをCtrl+Dで複製して、Animatorウインドウで「Crouching(しゃがみ)」や「Airborne(滞空)」ステートを削除したものをアバターのControllerとして設定します。
  • しゃがみだけ消して滞空モーションを残しておきたい場合は、「Airborne→Grounded(接地)」のTransitionから「Jump」に関する条件を削除しないと、なぜかずっと滞空モーションになる問題が発生したりします。

キャラクターを押したい

  • Combat Systemを有効にする(最も簡易的にはVRC_PlayerModsでHealthの項目を追加する)とプレイヤーにコライダーがつくらしく、NPCを押せるようになります。(ColliderのIsTriggerをオフにする必要があるかもしれません)
    • たくさんNPCがいるのを押しのけていくの、なんだか結構気持ちいい体感がありました。

近づいたときにのけぞりすぎるのをなんとかしたい

  • Final IKの数値設定を頑張る(Clamp Weight調整が良さそうな気がするが試行錯誤がそれなりに必要そう)。
    • Final IKの挙動確認自体はUnity上で可能なので、Targetをてきとうに近づけたりして確認すると早いです。
  • Combat Systemを有効にして、一定距離以上近づけないようにする。
  • しゃがみモーションで回避する(のけぞるのと同じくしゃがみもアレなので微妙そう)。
  • 身長の小さいアバターNPCとして使う(Tioちゃんくらい小さいと案外気にならない感じあります)。

booth.pm

NPCを自動出現ではなくボタン等で出現させたい

  • PropSpawner/SpawnerについているAnimatorを無効にすることで、自動Spawnしないようにします。
  • あとは任意のVRC_TriggerからActivateCustomTriggerアクションでPropSpawner/SpawnerのSpawnOwnedアクションを呼び出してください。

別々のNPCを選択して出現させたい

複数のNPCを選択して出現させるなどが必要な場合は、PropSpawner自体を複数設定します。

このとき

  • それぞれのSpawnedItemは全てVRC_SceneDescriptorのDynamic Prefabsに指定しなければならない
  • Dynamic Prefabsに指定したシーン内のオブジェクトは全てオブジェクト名がユニークでなければならない
  • SpawnedItemのオブジェクト名とPropSpawner/SpawnerのSpawnObjectアクションに指定している対象オブジェクト名が一致しなければならない

という全ての制約を満たす必要があります。

なので、PropSpawnerを複製してPropSpawner (1)を作った場合、

  1. PropSpawner (1)/SpawnedItemPropSpawner (1)/SpawnedItem (1)等に変更する。
  2. PropSpawner (1)/SpawnedItem (1)をVRC_SceneDescriptorのDynamic Prefabsに指定する。
  3. インスペクターをDebugモードに変更する(インスペクタ右上の錠前マークの横メニュー、あるいはタブで右クリックしてDebugを選択)。
  4. PropSpawner (1)/SpawnerのVRC_TriggerのうちEvent TypeSpawnObjectになっているものを見つけ出し、そのParameter StringSpawnedItemからSpawnedItem (1)に書き換える。
  5. インスペクターをNormalモードに変更する。(注意: 以後PropSpawner (1)/Spawnerの当該SpawnObjectアクションは開かない)

という手順を行ってこの制約を満たします。

日本語での参考: SpawnObject - VRChat 技術メモ帳 - VRChat tech notes

これを行った後、「NPCを自動出現ではなくボタン等で出現させたい」を参考にTriggerなどを設置すると良いと思います。

NPCを何かのボタンで消す等、その他のアクションを外部から行いたい

  • ToyBox/PropSpawnerのreadmeにありますが、(Collider) RelayというActionを使う必要がある模様です。readmeのとおりToyBoxのサンプルシーンを見てください。

複数のNPCを追従させたい

  • 固定メンバーで良い場合、SpawnItemの中に複数のアバターを放り込めばそのまま使えます。
  • そうでない場合「別々のNPCを選択して出現させたい」で複数出現可能にするのがよさそうです。

近づく時に表情変化させたい

アバターにColliderを付けてVRC_TriggerでAnimatorのステートを操作します。

アニメーションオーバーライドと同じ表情アニメーションをそのまま使いたい場合
  1. ThirdPersonAnimatorControllerをCtrl+Dで複製し、Animatorに複製後のものを指定し直します。
  2. Animatorウインドウ左上の「Patameters」からbool型でnearという名前のパラメーターを追加します。
  3. Animatorウインドウ左上の「Layers」からレイヤーを作成し、歯車マークの設定から「Weight」を1にします。
  4. そのレイヤーの何もないところを右クリックして「Create State→Empty」で2つステートを作ります。Entryステートからすでに矢印が出ている方をidle、そうでない方をnearなどと名付けます。
  5. idleステートを右クリックして「Make Transition」から遷移矢印を作り、nearにつなぎます。nearステートからも同様にidleにつなぎます。
  6. idle→near、near→idle両方の矢印の設定で「Has Exit Time」のチェックを外し、Settings→Transition Durationを0にします。
  7. idle→nearのConditionsにnearパラメーターがtrueという条件、near→idleのConditionsにnearパラメーターがfalseという条件を追加します。
  8. nearステートに笑顔のAnimationを指定します。
  9. アバターの直下に空のGameObjectを作り、Colliderを付けます。ColliderのIsTriggerを有効にします。layerはDefaultで良いと思います。
  10. VRC_TriggerのOnEnterTriggerでAnimationBoolをnearパラメーターに対してtrue、OnExitTriggerでfalseになるよう設定します。 f:id:narazaka:20191107013311p:plain

なお笑顔Animationが変な挙動になる場合、Animationの中にあるボーン関係のキーを消しておくと上手く動くと思います。

NPCが階段をのぼらない

  • NPCシステム構築メモ - VRChat KemonoClub Wiki によればRigidBodyをIsKinematicにすると解決するらしいですが、代わりにモーションに対して移動距離がすくない違和感のある挙動になるので、どうすれば良いのか教えてください。
  • とりあえずスロープにすればのぼってくれます。

NPCが段差にひっかかる

  • 階段のぼれるようになると解決しそうです。
  • 飛び降りができる設定を無くしても解決するかも?

アバター展示会みたいなのやりたい

  • 是非やってください。
  • 近づくと笑顔とか手を振るとか設定すると愛らしそうです。
  • VRChat用アバターはワールドに利用して良い規約のものも多いので、作者以外の人も規約を確認して自分が買った販売アバターを布教するワールド作っても良いかもしれません。宣伝画像とかも置いておくと良いかも。

NPCと手をつなぎたい

  • ちょっと試してみたけどうまくいかないので教えて……。
  • Final IKに含まれる「Biped IK」で手を引くことはできるのだけど、そのオブジェクトをPickupにするとRigidBodyとNavMeshAgentがなぜか干渉して挙動が変になるんですよね……。

NPCと無理心中したい

  • 無限に落下させることは難しそうなので、低い床を作って移動範囲にしたうえで、その少し上を水面にしたり、リスポーン平面にすると良さそう(未検証)?

NPCドラクエみたいな隊列にしたい

  • やってないので分からないですが、固定メンバーで良いなら前のNPCのheadボーンに追従させると良さそうな気がします。

無言でどこまでもついてくるのホラーでは?

  • ホラワに実際使えそうです。
    • 特定の人にとりついて追いかけ回すと怖そう(移動速度も速くできる)。
      • Colliderも付けておいて当たると死ぬとか(Combat System)
    • たくさん追従させて取り囲むとか。
    • というかゾンビっぽい。

重くない?

  • 画面としてはNPCアバター分人が増えたのと同じだし……。
  • 通信負荷としてはObjectSync分は増えると思います(普通のPickupとかと同じ?)。

参考: 1からこのアセットを作るときのおおざっぱな構成

  1. ToyBoxのPlayerTrackingをワールドにいれる。(プレイヤー視点追従の仕組み)
  2. ToyBoxのPropSpawnerをワールドに入れる。(プレイヤー視点にクリスタルが追従するプレハブ)
  3. PropSpawner/SpawnedItemをVRC_SceneDescriptorのDynamicPrefabに追加する
  4. PropSpawnerが現行VRChatだと動かないため、SpawnedItem内のOnEnableを全てOnTimerの0秒後実行に変更する。
  5. PropSpawner/SpawnedItem/FloatCrystal/Visualを非アクティブにする。(クリスタルの見た目は使わないため)
  6. PropSpawner/SpawnedItemアバターを突っ込む。
  7. Navigationを設定し、アバターにAICharacterControlやAnimation Controllerをつけ、数値などを調整する。(ローカルNPCシステム)
  8. AICharacterControlの追従ターゲットをFloatCrystalに設定する。またFloatCrystalの高さオフセットは0にする。(プレイヤー視点追従)
  9. アバターにVRC_ObjectSyncとVRC_Pickup(Pickupableオフ)をつけ、アニメーションなどが同期するようにする。
  10. 今回サンプルにしたアバターではBodyにもAnimation Controllerがついているのでそちらにも同様にVRC_ObjectSyncとVRC_Pickupをつける。
  11. Final IKをアバターに付け、追従ターゲットをFloatCrystalに設定し、ボーン等の設定を行う。(プレイヤーの方を向くなどの姿勢制御)(オプショナル)

この方法はプレイヤー視点の位置を同期し、各自のローカルでNPC移動を計算するのがベースの方式ですが、逆にNPC移動した結果を同期しようとすると方向などが同期されないことがわかりました(試行錯誤した結果)(ObjectSyncの中身を知らないので理由はよく分からない)。

ライセンス

  • アセットの仕組み自体はパブリックドメインとします。
  • サンプルとして使用しているアバターAINAは以下のライセンスを参照してください。商用利用でなければ基本ほぼ何も気にせず使ってかまいません。 narazaka.booth.pm
  • AINAのためにまんまるシェーダーを同梱しています。こちらはまんまるシェーダーのライセンスに従ってください。
  • 各種依存アセットはそれぞれのライセンスに従ってください。

宣伝

このほかにも、エレベーター的に使える床昇降システムとか、複数アバターを自動連続アップロードできる拡張とか、スクショを日付別にフォルダに入れるやつとか、色々便利なものがあるので奈良阪配本地を見ていってください。

narazaka.booth.pm narazaka.booth.pm narazaka.booth.pm narazaka.booth.pm

バーチャルマーケット3の雑な感想 - 改善点と新たな課題

f:id:narazaka:20190923203655p:plain

どうも、密かにVケットおよび落マケを応援しているVRChat Profile運営のnarazakaです。

f:id:narazaka:20190923152728p:plain vrcprofile.com

今日が平日だと勘違いして昨日時点で残ってた7ワールドくらいを1ワールド30分くらいの一人RTAで全ワールドまわりきっちゃったので、せっかくだから雑に感想書きますね。

なおバーチャルマーケット3の概論的感想についてはバーチャルマーケットウォッチャーたましこさん(そんな肩書きはない)が書いた以下のエントリがいい感じにまとまってて良いのでおすすめです。 note.mu

以下は上記と同じく良かった&悪かった混在する感じで、1ユーザーとしてのもっと雑然とした感想になります。 Vケット2の終わりにもった感想と、Vケット3開催告知~開催まで順を追って感想を書いていきます。

Vケット2

前回Vケット2はいろいろなアバターなどに触れることができる楽しいイベントでした。

特に試着ができるという体験がアバター購入の判断材料として非常に有益で良かったですね。 この一点の良さが凄かったので、こういう一種の祭典的な形でなくても恒常的に販売アバターの試着ができる仕組みが現れないもんかなあと思ったほどです

またVRChat Profileはクラファンの広告枠を買ってFuture Terminalに広告を載せることができました。 特に収益化の予定とかはないので流入がどのくらいかとかまじめに計ってはいないんですが、「自分の作った物の広告を往来に出す」というはじめての体験ができたのは貴重だったと思います。ありがとうございました。

で、全体的に良かったんですが、その中で出てきた不満はざっくりこんな感じでした。数多いですが別に叩いているとかではなく、次回改善されないかなぁ~~~という感じで思ったやつです。

  • private大量発生問題 ほとんどのフレンドがprivateワールドにいてコミュニティが分断されている感が半端じゃなくかなりつらかった。inviteなので誰にrequest飛ばしていいのかさえ分からずコミュニケーションがつらかった。基本的にこれが最大の苦痛要因だった感じ。
    • エントランス以外のワールドがprivateワールドだったため、便利な据え置きポータル経由だとprivateインスタンスになってしまう。ポータルにおけるVRChatの仕様制約が悪い方へ出てしまった感じ。
  • ワールド広くて合流がつらい 加えてワールドが結構広いので、やっとjoinしたとしても合流にやや苦労した。
  • 販売場所わからない問題 情報を書いていないブースが多く、検索に苦労した。
    • 販売の機会自ら逃してるとか信じられないのだけど、基本的に素人販売の同人活動なのだし「売るために最低限こうしよう」があった方がいいのかもと思った。
    • ブラウザ連携できないのは大きなネックだと思った。QRCodeListerer ありがとう。
  • 落とした新刊の行方が分からない問題 間に合わなかった販売物を追跡することを想定していない事例が購入者販売者双方に不利益。
    • 販売間に合わなくてもboothでプレースホルダーを作っておいてほしい。他人に勧めるときも参照先がないのはつらい。いいねして備えるからさ……。
  • ワールドの出来 ワールドによる出来の差が激しく、展示場として回りづらい・また特に重いワールドがあった。
    • バーチャルミュージアムは回りづらい&特定方向を向くと激重の二重苦で厳しいワールドだった。アートとしてはまあまあいいけど展示場デザインとしては完全に失敗している感じ。特に動線は当時半年プレイしてVRChat慣れしていた自分でもかなり戸惑ったので、初心者はどれほどだっただろうか……。
    • モクリバザールも段差のせいか微妙に回りづらかったが全貌がなんとなく見られるのはよさげだった。ポータルが分かりづらい謎の場所にあったのはよくわからなかったが、まあ使うの必須でもないしいいのかも。
    • 円形一方通行順路をとっていたFuture Terminalと絢爛博覧会は、回りやすく特別重くもなく世界観もいい感じで、展示場として申し分なく良かった。
    • 異世界マルシェは展示場として回りやすいばかりでなく、ワールド単体としても魅力あふれる出色のできばえで素晴らしいワールドだった。たとえ展示物が存在しなかったとしても人気ワールドになる感じあるし、なんなら実際Vケット期間外でもたまに行っている人を見かけたほど。

以上諸々の感想がありましたが、全体的に色々つらいところがでている原因として、そもそもこのイベント自体VRChatの機能を超えたものを本来必要としていて、それがない中で正直かなり無理して開催している故のものなんだろうなあという、つまるところ「しょうがない」面が多いようには感じてました。

Vケット3が開催される!ブース出展しよう!

とはいえそういうのが次回は改善されてるといいなあと思って期待を寄せていた中で、Vケット3の開催が告知されました。

しかしなんでも抽選制になるとのことで、自分も勇んでブース応募しましたが、あえなく落選してしまいました。。。

コミックマーケットの勢なので落選は慣れてるとはいえ、Vケットはまだ3回目という非常に若いイベント。一回一回がいわば伝説になるフェーズなので、「また次回狙えばいいか」という感じになるコミケより結構衝撃があったというか、体感は思ったより悪かったですね……。

「当選したのに頒布物落としたやつ絶対許さんからな」とか「抽選に作為がある」みたいな吹き上がり方をしている人も結構いて藻前らおちつけという感じではあったんですが、その後Vケット運営もここの衝撃の程度を見誤っていたのか細かい言動で落選勢の神経逆撫でしてた印象はあったので、次回は上手く期待値コントロールしてくれという気持ちになりました。

まあただそこで「落選者」が出たために落選マーケットが開催されたり、その他諸々の小規模展示会風味イベントがVケット運営と無関係に開催されたのは良い傾向だと思います。

一種の祭典的な形でなくても恒常的に販売アバターの試着ができる仕組みが現れないもんかなあ

と思ったあたりがなんとなく実現されてきてる感じで、今後もこの流れが定着してくれるといいなあと思います。

もう幾つ寝るとVケット

そんで落選のあとうだうだしているうちに、落選マーケットにも応募忘れたり、Vケットのクラファンで音速で広告枠が売り切れてVRChat Profileの広告が出せなかったりしました(動く城に乗っけるプランはのこってたけど、そこじゃないなあと思ったので……)。

そもそも広告枠数もっと増えてほしさはあるんですが、会場見ると実際こんなもんが限界ではあるよなあといったところで、難しいところです。

結局VRChat Profileは宣伝画像仕込んだアバターでpublicエントランスにたたずんで野良告知したりしてます。みんな使ってね。

そんな広告枠が埋まって後の祭りの中、続々と企業のスポンサーが発表されてゆき営業凄いなと思いつつ……。

またVケット主催の動く城のフィオさんがプチ炎上してたりそれを運営の他の人が擁護してたけどいまいち微妙な感じだったりがありつつ……。

炎上したフィオさん自身がそもそもが万人受けはしないかなりピーキーな趣味の人なのにも関わらずこういうVRイベントの代表的立ち位置を選んでるのは多分覚悟完了しているからだと思うんでそれはまあ良いんだけど、周辺はそれのサポートするならちゃんと上手いこと立ち回ってほしいなと思いつつ……。

バーチャル性生活という概念は必ず破壊されねばならないと思いつつ……。

名文です otagon.hatenablog.com

Vケットがとうとう開催されました。

Vケット3RTA

全16+1ワールドの広大な会場。

開場1時間後の12時あたりから回り始めて早々にこれ1日で回るのは無理だと悟る圧倒的規模感のVRの祭典が始まりました。

そんな毎回拡大する難しいフェーズのイベントでありながら前回比でしっかりと改善されてきており流石だなといった印象です。

  • private大量発生問題 全てのワールドをpublicとすることで自然解消。
    • 前回はエントランスにまとめていた企業ブースを各ワールドに分散することでエントランス通過必須ではなくなり、結果全部publicにできたっぽい。
    • 企業数が増えた故分散したら結果的にそうなったのか、全public化を見越して分散する前提で企業数増やしたのかは分からないけど、どちらにせよGJ。
    • publicは荒れてイヤだという意見はあるようだけど、publicを愛せよ民の自分としては理想的で無問題。むしろ前回どこにでも行けた移動ポータルが今回機能縮減して限定的になったのは、自分で好きにフレプラとかでポータル立てろっていう暗黙的な誘導だと思う。バランスもとれててえらい。
  • ワールド広くて合流がつらい フレンドのとこにワープできる画期的機能の実現により解消。最高。
    • VケットでVRChat技術革新が起こって、かつそれがシェアされるのは実に喜ばしい。
    • というかむしろ今回のメニュー正直標準SDKに突っ込んでほしいレベル。ユーザー名も表示できてほしいし。VRChat運営と連絡取れてるなら実現できないもんだろうか……。
  • 販売場所わからない問題 相変わらずブースとしては不親切なとこは多いのだけど、ブラウザ連携を取り付けたのでほぼ完全に無問題になった。マジでGJ。
    • 一般的にはセキュリティ問題がある中、企業間交渉だからこその信用って感じはある。他の即売会系でも気軽に採用できるようになるといいが……。
  • 落とした新刊の行方が分からない問題 これは販売側の話なのであまり変わってはないのだが、Vケットでカタログという仕組みを1段かますことで前よりはなんとかできるようになった気がする。
    • 改めて、販売間に合わなくてもboothでプレースホルダーを作っておいてほしい。他人に勧めるときも参照先がないのはつらい。いいねして備えるからさ……。
  • ワールドの出来 前回よりベースラインが明らかに改善してるし、むしろより完成度の高いワールドが増えてて凄かった。さらばバーチャルミュージアム
    • ネオ渋谷 最高傑作。こういうの。こういうのだよ。夢に見たVR空間って。

      BGMも良く雰囲気に調和していて、そこかしこにあるPanasonicのディスプレイが現実とVRの交錯を感じさせるのも相まって、とにかくVR渋谷としてこれ以上なく素晴らしかった。

      路面電車・ロープウェイ・山手線と、過去と現在を象徴するローポリながらいいあんばいの鉄道要素が盛りだくさんで、鉄オタ的にもアガりまくりましたね。

      ちなみに外に出られないのがもどかしかったけど、夜バージョンにある「meiro宝石店」の店内階段から領域外に落ちることができるので、山手線の列車のそばまでいけます。バグ技っぽいので行きたい人はつぶされる前に行ってきてね。

      ただこれだけ鉄道要素が満載なワールドがあるのに、鉄道系出展がなかった(うちはそのつもりだったが落選した)のが痛恨の極みって感じはある。

      あとワールドとしてはアガりまくって素晴らしいのだけど、主役のはずの展示がワールドの強すぎる印象に完全に食われてる感じはあった。このワールドの主役はPanasonicだ。

    • 仮想工廠 前回も回りやすくて好感度は高かったが、The Hangarの巨大ロボット展示のおかげで異世界マルシェレベルに進化してきた。

      The Hangarの巨大ロボット展示と実際に上下するエレベーターが素晴らしい巨大ロボット体験を演出していて、展示ありきでありながら単体のワールドとしての魅力が最高潮。今後VRでロボ展示やるときはここをパクればまず間違いない。

      正直こういう完全にSFが眼前に現れるという事ができるので、巨大ロボットが好きな人々はかわいいアバターが好き勢とはちょっとレベルの違う至高の体験を得てるんだろうなあと思った。

    • 九龍帝国城下町 エモさ抜群の世界観と展示場としての調和が見事で完成度高い。

      参番街はパンクな中華世界観で雑然としているのに回りやすい、絶妙のバランス感。エレベーターも強いし、忘れ去られた神社もエモい。

      なんか最初行ったときオニャンコポンが静かにたたずんでて、これも展示か?と一瞬思ったら本人だった。最高。

      欠番街ではワールドの世界観表現の極まり方が凄いのに加えて、総じて展示ブース側が完全に「わかってる」作りをしてきており、ワールドと展示の調和がすさまじいエモもみを発揮していた。

      即売会という形式が半ばメタ的に作用した雑然感とワールドのテーマの親和性も相まって、ワールドとブースの調和という面においてはこれを超えるものはきっとないだろうと思えるレベル。ヤバすぎる。

    • Sky Island 全体的にトリッキーな移動が多く微妙に回りづらさを感じつつも、最も展示ブースそのものに集中できたワールドかもしれない。

      Mountainの地下、海中の上下動、森の外周などが特にやや困惑した箇所ではあるが、つらいってほどでもなかった。

      全体的にワールドが主張しないのでエモみはなかったけど展示会としてはオーソドックスでいい印象を受けた。

      ただあの「コーロコーロ」って鳴く生物うるさい……。

    • Pretty Pop Party 夢カワな世界観、3Dに落とせるんだ……という感動を覚えた。

      道がうねうねして見渡せない作りなのにもかかわらず、思い切ったファンシーな矢印がきちんと誘導してくれて迷わなかった。

      ここにあった展示の中では汽車風の合同展示ブースがまさに「それだよ!」って感じでめちゃめちゃ良かったですね……。

      Vividの下にいた野中藍が台詞しゃべった後やや謎にそのまま浮いてたり、PastelのVroid学園勢の「お菓子をもらう」がやや分かりづらかったりはしたけど、なかなか好感度の高いワールドでした。

      BGMがかなり好きだったPastelのほうが好み。

    • Castello Magica 今回で一番回りづらさを感じたのはここ。

      今回は前回の回りづらい的な批判の反省を踏まえてか、他のワールドがほとんどわかりやすい円形一方通行順路をとっていた中で、ここは左右対称配置かつワープ多用で「どこを回ったか分からない」になりがちだった気がする。

      あと声優アナウンスが(意図的になんだろうけど)過剰な中二病感を演出してくるのが個人的に合わなくて、正直クサく感じて微妙だった……。

      世界観は割と良い物を作ってた気がするんだけど、「どこを回ったっけ……」感とアナウンスの中二病感で気が散りがちで、いまいち出すべき魅力を出し切れていなかった気がする。

全体的にかなり改善されてて良かったんですが、一方で新たな違和感を感じた箇所もあります。

  • 企業の台頭 企業ブースが各ワールドに分散した結果、渋谷の主役がPanasonicになったり、あらゆるワールドにあるセブンイレブンやDMMが異世界感ではなく観光地感を出してきたり、思ったよりかなり影響有るなあと言う印象。
    • 特に渋谷は展示見ずにワールドを見てパナソニックの写真だけ撮って帰って満足しちゃう感じがある。あの素晴らしいワールドにブースを並べたいけど並びたくない……。
    • Castello Magicaとか仮想工廠にセブンあるの、自分はそれはそれで面白いからいいけど、普通に萎える人もいそう。
  • ワールドの我が強すぎて展示を食ってる 世界観がエモいのはいいとして、展示そのものが目立たないレベルになっているのはなかなか功罪あるなといったところ。
    • 特に展示が割とどうでもよくなってると感じた渋谷、ワールドそのものの体験が最高なだけにバランスって難しいなと考えさせられる。
    • ワールドと展示が渾然一体になっている欠番街、ワールドが展示物の魅力を引き出している仮想工廠とかは我が強いけど、あれはあれでピーキーながら一つの望ましい形っていう感じはする。
    • 「コーロコーロ」って鳴く生物はもうちょっと静かにしてくれ。

技術的な不満がほぼ解消された上で出てきたこれら2点の違和感は、公式文言通りの「バーチャル空間上展示即売会」への人々の期待と、運営の実際目指しているものに差分があって生まれている気がします。

バーチャルマーケット運営が目指す方向性は「バーチャル空間上展示即売会をやるぞ!」という感じではなく、「VRのとにかくすごい体験ができるイベントをやるぞ!」という感じに見えており、やや看板に偽りありというか、目指している趣旨がずれている気がしてるんですよね。

どういうものを目指すのかは自由なのでかまわないんですが、齟齬がいらぬ摩擦を生まないように正しく伝えてほしいなと思うところです。

そういうのも含めて、本業ちゃんと頑張ってるのに開催までしょうもないことでヘイト貯めてた感じあるので、いろいろな伝え方に気をつけてSNSを上手く活用してほしいですね……。ぶっちゃけ自分もなぜか今HIKKYにあまりいい印象持ってないんで……。

あと開催期間のせいで1人RTAすることになると、フレンドと回るよりは確実に楽しくないので、規模に対して開催期間の比率ももうちょっと多めにしてほしい気もします。どういう事情で期間が決まっているのか分からないとこあるんですが、拘束条件にそういったとこも加味してくれるといいな……。

他細かいところではバーチャルマーケット2のページ残しておいてくれないかな……と思いました。どっかにあるんですかね?

Vケット4、受かるといいな

まあそんなこんな色々感想ありましたが、Vケット3はVケット2より確実に全体として良くなっていると感じましたし、今後も改善しつつ次回Vケット4が開催されることを楽しみにしています。

できれば抽選しなくてもいい方法が開発されないもんかな……。 現状の「VRのとにかくすごい体験ができるイベント」的な方向性だと割とスケーラビリティに限界がある気がするので、順当に「バーチャル空間上展示即売会」に回帰するのが良さげなんじゃないかなあと思ったりしつつ……。

あと「バーチャル空間上展示即売会」を恐らくその文言通り遂行している「落選マーケット」や、VケットでQuestワールドが展示会っぽくなかったので展示会っぽいやつやろうぜって言う企画、その他野良の展示なども今後開催されるので、Vケットが終わってもまだまだVR即売会はアツい!

それらも含めてVケットがあって成し得たことだと思うので、今後もVケットを応援してゆこうと思います。

r-market.work

Vケットを応援するVRChat Profile運営のnarazakaでした。(宣伝)

vrcprofile.com

Arch Linux on WSL2

現状のWSL2にArch Linuxを入れようとするともろもろで動かないのでワークアラウンド紹介

Insider Previewなので今後も変わるだろうけれど、とりあえず現状のメモ。 Windowsのビルドは18963.1000。

Arch LinuxのWSL導入は主に以下の二つが知られている

zipでらくちん。appxは導入が少々面倒 github.com

appxだが導入がスクリプト化されていて楽 github.com

今回は後者のものを使った。

まずこれをWSL1でインストールする。少なくともappxの場合WSL2へのインストールはおそらくそもそも通らないし、万が一インストールが通ったとしても立ち上がらない。

インストールが通らないのは下記issueのとおりWSL2が圧縮フォルダ・暗号化フォルダの取り扱いに未対応であるからの模様。 github.com

これの回避方法としては、

まずWSL1でインストールしたArchLinuxのインストールフォルダC:/Users/<username>/AppData/Local/Packages/Archなんとか(appxの場合)にいき、 LocalStateフォルダなど直下のフォルダを全部選択して圧縮設定を解除する。このとき再帰的に子フォルダへは適用しなくて良いらしい。 さらに念の為?Archなんとかフォルダも同様にする。

さらにコマンドプロンプト

fsutil behavior set disableencryption 1
fsutil behavior set disablecompression 1

をしてNTFSのそれら設定を無効化してWindowsを再起動する。

この時点でおそらくWSL2への変換自体は通るようになっているが、通っても起動しない。

これは下記issueのとおりWSL2起動時に/bin/wslpathや/sbin/mount. drvfsを作成するという処理があるっぽいのだか、Arch Linuxは/binと/sbinがsymlinkなのでこれが失敗する模様。 github.com

これを回避するために/binと/sbinを一旦消し、WSLに変換してから復活させるという手順をとるが、/bin/mountなどは必要なようなのでリンクをはって回避する。

WSL1にて

rm /bin /sbin
mkdir /bin
cd /bin
find /usr/bin/ -maxdepth 1 | xargs -n 1 ln -s

WSL2に変換する

# yuk7版の場合はArchになるのでwsl -l -vなどで確認
wsl --set-version Arch_Linux 2

WSL2にて

cd /sbin
find /usr/sbin/ -maxdepth 1 | xargs -n 1 ln -s

元のissueでは/binや/sbinを実体にして/usr/binなどをsymlinkにする方法を取っているが、とりあえず今回そういう風にはしないようにした。

まあ一応使えるっぽいのでこれで様子を見る所存。

お役に立てば幸いです。