RecRoom、VRChat、PublicとF+、電話、公園デビュー、現実のソーシャル
適当な脳内メモです
- VRChatのF+運用文化によって、多くのユーザはSocialを辿ってjoinするようなプレイスタイルに変化する
- これは初心者に優しくないので高い脱落率は納得が行く
- しかしF+は居心地の良さも提供しているため、一度住み着くと離れづらい
- F+制御システムは現実でも同様な振る舞いはあり、現実でも似たような問題がある
- VRChatはだいたい現実mostly real
VRChatをなんとなく初めるとコケる問題
なぜなら何もシステム的なフォローがないから。TwitterやFacebook、pixiv、mixiなら興味のありそうなユーザをサジェストしてくる、フレンドのフレンドを手繰っていける… だがVRChatにはそれがない*1
かくいう自分もVRChat自体の開始は去年だが、今年のVケット2までハマることがなかった
RecRoomを見てきた
RecRoomにはフローが設計されている。Public前提である。ミニゲームに突っ込まれる、遊ぶ、クリアしたら握手してフレンドになる、フレンドが増える。ポイントがもらえてアバターカスタマイズができるようになる。
これはこれで正しい(その思想に同意できれば)
VRChatにはフローがなく、しばしばpublicを彷徨って脱落する
一方でVRChatにはやることが無い。恐ろしいほどなく、初心者はとりあえずVRのpublicの街角へ放り出される
混沌としたpublicたまり場もあるが、初心者が事前情報なしに見つけるのは困難だ。慣れたプレーヤーほど会員制クラブともいうべきフレンドプラス(通称F+)なインスタンスへ流れがちになる
F+は見知った仲間で過ごせる。まったり過ごす、すやすやワールドが増える。
一方で初心者は治安の悪いpublicを散策して脱落してしまう*2
アクティブフレンドを十分作ると見える地平。Worldタブ or Socialタブ
Socialにアクティブなフレンドが増えると流れが変わる。
VRChatへjoinしたら、メニューを開いてWorldタブからいつものpublicたまり場を目指す、そういうプレイから、Social欄からフレンドを見てjoinするようになる段階へ変わっていく。WorldタブからSocialタブへ重視していくタブが切り替わる。
イベントをよく開催したり、人が集まりやすいハブ的なユーザーを見つけてjoinしたりすると、更にフレンドが増える。アクティブなフレンドが増えると、更にどのインスタンスに集まっているか、単独行動しがちなフレンド、グループ行動をするフレンドの輪が見えてくる。ますまずフレンドにjoinしやすくなるサイクルが回りだす。そうするとWorldタブからpublicインスタンスを選ぶ理由はほとんど無くなる。
しかしここまで行くのがメチャクチャ遠いのだ*3。VRChatのフローはおかしい。
いや、たまたまこう実装してしまって、それに人が慣れたか着いたかかはわからないが、そう回るようになったのだろうなあ
PublicとF+
VRChatのまずおかしいところはこれだ。交流させる設計なら、RecRoomのように強制publicの方が正しい。インスタンスがバラける、人が集まらない、分散するプライベートインスタンスがシステム的に整備されている不思議。人と出会えない、オンライン引きこもりを加速するソーシャルVR、VRChat
F+に籠もるとコミュニティは拡大しない。じわじわ構成メンバーが減少して最終的に消滅に至る。増やすには人を取り込むしかないが、F+は外部からは見えない。つまり、プライベートインスタンスへの誘導が強いVRChatは消滅が運命付けられている、…はずだ
しかしちょっと考える。ソーシャルって何だ?Twitter?mixiやfacebook?と考えると、非同期のテキストソーシャルと比べ、VRChatはリアルタイムなので特性が違う。
電話、しかも正座待機してないと電話が取れない「呼び出し音なし固定電話」がVRChatには近いのではないか?
ボイスチャットサービス・電話を初めたときの最初の相手は?
電話にグループボイスチャットが付いたぐらい、がVRChatのソーシャル機能と言えるように思う
じゃあ、電話と比較しよう。最初に電話を始めたときどうした?リアルの友達から電話番号を教えてもらったり、今なら親から受け取ったスマホに自宅や親の番号がすでに入っていたりしなかった?
電話を初めるとき、リアルのソーシャルネットワークを電話のソーシャルに持ち込んでいる。LINEとかslackとかDiscordとか。リアルの交友のある人から「これ便利だよ。連絡に使おう」と言われて初めることが多いと思う。それだ。
VRChatもこの系列なんじゃないか?VRChatを一人で初める、というのは、LINEを一人で始めたり、通話相手なしで電話を初めるようなものなんじゃないか?
付添い親なしで公園デビューできるのか?何もなしに会話の輪ができるのか?
そうすると、一人でpublicのたまり場へ馴染みに行くには、「子供が親同伴なしで公園デビューを果たす」ぐらいの難易度がありそう。適切なpublicたまり場を知らなければ、まず公園にたどり着けないだろう。たどり着けたとして、公園の輪に参加できるだろうか
そういう場合、話題になるネタがあるといい*4。
例えばデートに映画を使う、なにかのイベントを見に行くとか、買い物に付き合ってくれとか、アスタリスクの花言葉*5も話題の提供と、それによって会話の輪を作ることに一つ目的がある、はず。
RecRoomの場合はこれをミニゲームとして実装しているが、VRChatは完全にワールドに依存している。そしてSDKはミニゲームの様なインタラクションを作るには向いていなく、pickupのごっこ遊びが大多数
かつてMMORPGが高級チャットツールと言われたが、本当に(ボイス)チャットだけにしてしまったのがVRChatとも言える。MMORPGはRPGにオンラインとチャットを付けたことで、ゲーム攻略をネタに会話をさせることができたが、VRChatはそこすら捨ててしまった
現実のソーシャル
現実でも単に会ったから、合流したから、といって会話が弾むのはかなり少数だと思う。満員電車で隣に並んだ人と和気あいあいと雑談になるケースは稀だ。家族や友だち、知り合い、仕事仲間、小さなソーシャルネットワーク内で会話をしている。これは現実のF+だ。これらが縮小して自然消滅したり解散してしまうことはある。
現実の勉強会や各種サークル活動、イベント等をpublicに募集した結果、拡大して制御不能になったり、コストを支払えずに分解するケースもある。
publicの治安悪化、制御困難と、F+の自然消滅リスクは現実でもある。つまりこの辺のソーシャルネットワークの制御が難しいのは、現実でも同じであり、多分人類全体の*6仕様じゃないかなあ
VRChatのソーシャル問題はだいたい*7現実*8というオチが見えてきたので、思考終了
あとまあ、VRChatは「日本語が通じる異世界旅行」「VRなりきりチャット」とかに近いんでは?とも思うので、現地の風習とのギャップで困惑する、みたいなのもありそう。
そもそも知らない人と会い続けるのは楽しいのか、とか
*1:Socialの一番下にランダムなアクティブユーザはいるが…。恐らくほとんど使われていないだろう
*2:そういう意味では、publicなのに人が居着いて治安がよいワールドは稀有でありがたいわけですよ。恐らくは、少数の有志が精力的に維持している。そういうパターンは観測した
*3:個人的にはフレンド200人ぐらいで到達した印象だが、フレンドのアクティブ率や本人のプレイ時間帯に依存するのでなんとも言えない。自分のケースでは、Questリリースのユーザ増加タイミングにVRChat QuestユーザDiscordに合流できたことも強い
*4:ネタがあると、環境のコンテキストがあると簡単なジェスチャーでも伝わるようになる。VR無言勢はその辺の表現力が高くていいですね
*5:これについてはいろいろ書いた方がいいような気もしつつ、いまいち纏まっていないんだけど、とりあえずヨツミさんありがとう。ただ、こう言えるのは一緒に協力できたフレンドがいてくれたこと、そしてクリアを達成できたことによる所も強く、万人におすすめできるコンテンツではないとは思う。でもこれは好きなコンテンツだったよ。あと、これは完全に個人的なイメージなんですけど、ヨツミさんは(beyond the reality:betaでも感じてきたけど)360°又は720°又は1080°あたり捻った豪速球を叩き込んで来るスタイルと認識してまして、今回のアスタでもその認識を再確認し深く納得すると共に、どうしてここまで捻ったストレートボールを打ち出せるのか、打ち出すパワーがあるのかと感心していますありがとう
*6:ここクソデカ主語
*7:代替ではなく「だいたい」mostly
*8:とはいえVRChat内のコミュニティ維持は現実より低コストではある気がする。VRデバイスや通信代は掛かるとはいえ、場所代や現実で会うためのコストよりは安く、プレゼンス/存在感は他の通信手段より高いと感じる。ほにゃらら集会が数多く開催されているように。個人的なイメージだけど
最近の日記
VRChatしかしてない…
- 何かしらVRChatからみの事をやっているはずだけど、Steamの時間はあんまり伸びて無くて、そろそろ300時間というところ。
- なくとんさんからリプを貰ったりして、Animator沼が分かってきた気がする。VRC運営は当初Animatorの仕様をどこまで把握していたのだろうか?
- CyanLaser ClimbingPrefabのpackageチラ見してみたけどやべー。やっぱりコードリーディング?が腕を上げる近道だなあと思う次第
- StandardAssetsとuGUIも触らねば…
- just Redflagワールド製作は一段落した。と思ってたけど、微妙に小物ネタが浮かんでしまうのが悩みどころ
- Flightunit Test用に、視界が広い新しい飛行ユニットのモデルデータが欲しいなあと思いつつblenderしてたけどいまいちいいアイデアが無く… 旋回ギミックだけ早く付けたい
- あ、Quest対応カメラ配布はじめました
- フレンド人数が200人ぐらいに到達し、結構アクティブな方がOnlineで見れる様になった。最近の公式ウェブページ更新で「フレンドが集まってるインスタンスが分かる」ようになったのが本当に素晴らしい。ChromeExtensionでもできていたが挙動が不安定だったこともあり、公式で機能が取り込まれたのは神。おかげでコミュニティが可視化されて、自分のフレンド上でも1,2箇所ぐらいはたまり場的なものができてるのが見えてjoinしやすくなった。…あとはVRC内からこれが見れれば完璧だ。予定されているUI更新に期待
- アスタリスクの花言葉が来たと思ったら、クリアできる前にVケットが来てしまい生活崩壊しております。とにかく可処分所得時間を食うネタがVRChatだけで多すぎる…。体操とSilentClubと筋肉部も行きたいけど、そもそも時間被っとるやんけ!!!!VRChatをやるだけのバーチャル身体が3体ぐらいほしい
VRChat Questでワールドを作るとき、参考にしたい実例ワールドとパーツ類
Quest対応ワールドを作りたいけど何使っていいか分からない
わからんのわかる。
詳しくは公式を見よ、ではあるんだけど、ざっくり翻訳すると
- 透過シェーダー(Transparent/AlphaCutout)はほぼ禁止。が独自シェーダーは使える
- VRC_SyncVideoPlayer,SyncVideoStremは禁止。置くと壊れるので、Questアップロード前にコンポーネントをオフにしろ
- 他はだいたい使えるが負荷に注意ね
という感じ。逆に言うと、そのほかのVRCコンポーネント由来や、カメラ、Animatorなどのギミックは使える。シェーダー芸は要注意だが、判別付かない気もする。
PC版でワールド作っていて、それをQuest対応するならポリゴン数とかシェーダー依存の表現(透明や反射)ですかね。ポリ数が多いのについてはモデルを削減するしかない。テクスチャだけとかならUnityのプラットフォーム別オーバーライド機能で縮小とか使えるんだけど
つまり「制約は多い」とは言われるけど、(VideoPlayerを例外とすれば)多くは描画と表現であって、ギミックは制約はないと言ってもいいんじゃないかな?
使える具体例
- ナルさんのプレーヤーカウンタやワールドクリエイトスターターキット、カードシャッフルシステム
- 7月ぐらいに盛り上がっていたCyanLaserさんのClimbingPrefab(naqtnさんのガイド記事)
- 車や空飛ぶ箒ギミック
- パーティクルを使った銃、パーティクルを使った命中判定
他にもたくさんありそうだけど、Questで実際にワールド散策するしかない気がする?
実例ワールド集
- [JP]Tutorial プレーヤーカウンタ、時計が動いてる。時間帯によってはQuest勢の集会場になってるので、テスター呼ぶには良さそう
- CraftyClimbers Climbing Trials - Rapunzel ClimbingPrefabで登ったりできるワールド。ラプンツェルの方は最初期からあって人気ありましたね
- NyantelGarage Flightunit Test 車と飛行機ギミック。Flightunitは自作
- Archery Cross Platform Quest ShootingRange パーティクルで弓矢と銃ギミック(非殺傷)
- PlayingCards CrossPlatform トランプで遊べるワールド
- YakyuBan(野球盤) 文字通り野球盤再現ワールド。物理ギミック
- Murder2!! Cross-play BattleDiscs 早期に定番化したQuest対応ゲームワールド
- Cross-play CTF 銃撃戦、CombatSystem動くぞ(殺傷アリ)
- just oekaki just RedFlag カメラギミックでお絵かき。redflagは自作です
- Quest Particle Night For Two Sky Island Fireworks パーティクル。沢山でるけどQuestにはじつはそこまで重くない
- Underwater Cave 光表現がすごいがQuestではやや重い。多分独自シェーダー?
- ClubCobalt³ エフェクトいろいろあるけど比較的軽量なクラブ
この辺はQuest勢に紹介するのもよさげ。
Quest勢は見栄えのいいワールド難しいせいか、見栄えよりギミックを好む感じはあります。が、別に見栄えバリバリワールドが苦手なわけでもなく、単に作るのが難しい
実例を見てワールドを作る時の注意
ざっくり
- 最初からQuest対応を考えた、つよつよワールド
- 先にPC版があり、後からQuest対応をしたワールド
の2系統のワールドに加え
- 作者がQuest持ってないようで負荷チェックできてない
- Quest持ってるらしくそこそこ軽量/すげー軽量
なワールドがあります。こればっかりは仕方ないんですが、その辺参考にする時はどっちかな?というのを考えてみると良さそう
パフォーマンス問題
ギミック制約はない、とは書いたが、パフォーマンスの問題は残る。つまり重いかそうでもないか。
ただ、そのパフォーマンスチェックは問題で、Questユーザに来てもらうか、究極的には自分がQuestユーザになるしかない。そこは如何ともし難いです。
お金に余力あればQuest買ってみてよ是非!と言いたくなってしまうけど、まあ自分がガジェット趣味でQuest対応初めたら買ってしまうしかない気持ちになってしまったところもあり、強くは推しづらい…。いやQuestは良いんだけど、やっぱりPCVR持ってると用途被っちゃうし、それだけのために5万円は厳しいよね
あと自分の記事をおすすめする
過去記事です
それはそうと、いいかんじなQuest対応水面シェーダーあれば教えて下さい
VRChat Questのテクスチャ形式はASTCにしよう
VRChat Quest向けアバターやワールドを作ってる/いじってる人はテクスチャの圧縮形式をRGB(A) Compress ASTCにするのがおすすめ。テクスチャのしましまが減ってキレイになるぞ
設定方法
プロジェクト全体設定
特にテクスチャ毎に設定してない場合はこの設定が優先されるはず?なので、とりあえず設定しとくと良さそう
Build Settings → Android → Texture Compression
ここがDon't Overwriteになってる場合は、デフォルトのETC形式で圧縮が掛かり、テクスチャが汚くなってしまう。ASTCを選ぶ
テクスチャファイル個別での設定
プラットフォーム別オーバーライドでテクスチャ毎のあれこれ設定している人はこちらも確認する。個別にテクスチャを自動縮小させたいときもこちらで
ここをASTCにする。
以上!それだけ
ファイルサイズ小さくしたいなら、MaxSizeも小さくしてやると、元画像を残したままUnityが自動で縮小してくれるぞ
他tips
ASTCってなんなの?どうしてASTCがデフォルト設定になってないの?
Android系デバイスでは長らくETC2が一般的なテクスチャ方式だったが、2012年に「ETC2を置き換える、より良い圧縮形式」としてASTC形式が作られた。で普及してきたのだけども、ASTCは対応しているSoCの端末でしか使えない。
圧縮形式としての性能はETC2より高いビットレートをサポート、ETC2よりちょっと高品質(半デシベル程度)とのこと。
端末の統一が取れてるiOSはともかく、様々な端末のあるAndroidではまだETCの方が確実に動いて安心のようだ。それでUnityのAndroidビルド設定では、デフォルト圧縮形式がETCになっている。
ここまで前提
だけれども、VRChatが動くOculusQuestは1機種しかない。Questが使っているSoC Adreno 540はちゃんとASTC対応している。ので高品質のASTCを使って問題ない、というわけ。
公式OculusがASTCにしろ、とも言っている。公式なら仕方ない…
使おうぜ
いっぱいバリエーションあるけど何使えばいい?
block4x4からblock12x12まで
- blockサイズが小さいほど、解像度が高くキレイ、ファイルサイズは大きく
- blockサイズが大きいほど、解像度が低く汚く、ファイルサイズは小さく
という様子。
6x6~8x8あたりが標準的っぽい?文字のようなノイズが目立つと困るテクスチャでは6x6ぐらいが良さそう。他であれば8x8より大きくても良さそう。
VRAM使用量は圧縮でどうなるの?
CEDEC2013『工程の手戻りを最小限に 圧縮テクスチャ(PVRTC・DXTC・ETC)における傾向と対策』発表資料 | OPTPiX Labs Blog を読むと、現行のGPUは対応しているテクスチャ形式(今回のASTC、従来のETC/ETC2、その他DXTCなど)については、圧縮状態のままVRAMに格納されるようだ。つまりVRAM使用量の削減として有効のようだ。
ということでQuestの場合は、何も考えずにすてきなASTC形式が使える。使って良い。
画質参考【Unity】iOSでASTCフォーマットのテクスチャ圧縮を使う - テラシュールブログ
参考記事 Unity+Oculus Quest 開発メモ - フレームシンセシス
OculusQuestをUSB接続しても内部ストレージが見れない時
どういう状態?
- OculusQuestをPCにつないでも、Questの内部ストレージ見れない
- 以前は問題なかったが、急に見れなくなった
- WindowsのエクスプローラーにQuestはいるが、開くと中身は空
- Quest側にも特に表示がない場合
対応方法
解決方法はUSBケーブルでQuestを接続した状態で、adbコマンドを流すとQuest側から「このパソコンを信用する」が出るようになる。信用するを選ぶと、無事ストレージが見れるようになる。
恐らく開発者モードに入れたのが影響してるようす。
自分のケースでは Oculus Quest の映像をテレビに映したりキャプチャする方法 - Qiita の記事に従って、scrcpyをすでにインストールしていたので、そこに付属のadbを使った。
Questを接続した状態で
とすると(恐らくadbでQuestに接続するのであれば何でも良さそう)、Quest内で「コンピュータを信用するか」のダイアログが出る。
普段遣いのPCなら「常に信用する」のチェックをつけておくのがいいだろう。チェック・オフの場合、接続毎にadbを起動する必要がある。
この時点でWindowsからデバイスをつないだ時の「ペコポン」音がして、ストレージが見えるようになるはずだ。
VRChatのQuest用ワールドを雑に作る指針と、ライティングをいい感じにする話
※この記事は2019/6月時点での情報です。今後のVRChatアップデートによっては状況が変わっている可能性があります
VRChat Quest対応ワールドを増やしたい?増やしたくない?
「OculusQuestがVRChat用端末に割といいぞ。んでもってVRChatもユーザ増えてる」ということで、Quest対応VRChatワールドを作るなら今がチャンス!!!! 俺もドバーッとワールド作りたいんだけど、一人では全く間に合わんので、みんな作ってくれ…
VRChatワールド制作歴1カ月ぐらい、初めてのlab送りした自作ワールドjust RedFlagを作る間に得たtipsを適当に書きます。といっても、このワールドは当初からQuest対応するつもりはなかったんだけど、適当にポチポチしたらわりかしQuestで動いてしまい、見栄えもまあまあできたという経緯。
基本的にQuestをターゲットに書いているが、基本すべてのことはPC版でも有効になるはずなので軽量&イカしたライティングのワールドを作るときの参考になるかもしれない
基本コンセプト。まずQuest用に作る、PC向け表現を分ける。
公式ドキュメントに書いてある通り「PC向けを先に作って、Quest向けに軽量化する」よりは「Quest向けに作って、そのあとPC向けに最適化する」方が楽、と思われる。
「PC用/Quest用プロジェクトを作って云々…、って大変そう。しかもオブジェクト類は全部同じ配置じゃないといけないんでしょ?プロジェクト2つをちゃんと同じにそろえるのって大変じゃん」と思うかもしれないが、Quest用Avatar開発で言われてるのと同様、「どっちかのプラットフォームで作って、UnityプロジェクトのSwitchPlatformする」だけで2環境を切り替えて開発でき、オブジェクト配置は同じにできる。最終的には、PC用でアップ→switchPlatform→Quest用でアップ(PC/Questは逆でもよい)、の3ステップでCrossplatformなワールドがパブリッシュできる
PostProcessingStackのようなPC専用機能は、Quest向けにそのままアップロードしても無効化されるのでわざわざ切り替える必要はない。テクスチャについては、Unityのプラットフォームごとのオーバーライドという機能を使えば、自動で環境ごとにリサイズして出力ができる。
Quest用シェーダーはPCでも動く、のでQuest向けシェーダーでPCワールドを構築してしまえばそのまま両対応なワールドが出来上がる。
もちろんQuest基準で全部作ってしまえば、例えば透明マテリアル(Transparent)や特殊な表現シェーダー、VideoPlayerまでPCで使えなくなってしまう。そこについては切り替えるしかない。例えば、PCで作っておいてQuestでアップロードするときは該当GameObjecetのEnableを切るとか。PCのガラス表現は別メッシュにしておいて、Quest側ではMeshRenderをDisableにしておく、とか
ということでPCとQuest用ワールドの差異をQuestに揃えてできるだけ減らす、または自動処理に任せてしまうことで、やるべきことを単純化しておくと案外できる
実際作るときの作業フローは、PC/Questどちらかの環境向けでビルドして編集/確認をし、適度に途中/最後でPC/Quest両方をアップロードして最終確認することになる
自分の動作チェックは主にPCでやっているが、Questでの検証が捗るならそちら基準でもよい。ただし、UnityのSwitchPlatform操作はAssetの量によるが数分PCが使えなくなるので、頻繁に切り替えたくはないだろう。基本はPC/Questどっちかで開発をすすめ、いい感じの出来になったところで、Switchしてもう片方で動作チェックするのが良いと思われる
Quest向けセットアップをする。
公式ドキュメントに従う。Build Settings -> SwitchPlatformをしようとすると、UnityAndroidSDKのダウンロード&インストールが促されるのでそれに従う。インストールしUnityを再起動すると、SwitchPlatformが押せるようになる
あとは普通にワールド作成をする。ミニマムだとVRC SDK内のexampleでもいいし、VRCWorld prefabをD&Dしてもいい。各種有志が公開しているワールド作成キットもいいぞ。ナルさんのStarterKitにはお世話になりました。
シェーダーどうすんの?
VRC SDKにVRChat/Mobile/xxxxx系シェーダーがあるので、それを使う。
ベストはDiffuseあたりのだと思われるが、色指定ができないのでStandardから移行しようとしている人は大変だ。ちゃんとやるなら、色テクスチャを用意して必要に応じてモデル側にUV割り当てたりとかして、マテリアル統合とかするべきとは思うが、しんどい。
そこでVRC公式は移行しやすいよう、StandardLiteシェーダーを用意してくれたので、とりあえずはそれを使ってしまうが楽だ*1。特にCube並べ勢にはこのシェーダー追加は朗報だった。パフォーマンス改善は悪くなってから考えても遅くない*2
(PC含め)Questでもイケるイカしたライティングをする
雰囲気をよくするにはライトを使え、ということでざっくりお勉強してきましょう。まずはUnityで一般的なライトの把握。参考記事 Unity、入門ライティング設定! - Qiita
Quest版VRChatではDirectionalLightぐらいしかリアルタイムライトは使えません。他を詰めていきます。あと、Environment(Ambient)も行ける(と思う)。
- といっても影要らなかったらDirectionalLightも要らん
- PointLightやEmission付きオブジェクトをばらまいて、ベイクすると(レンダリング軽いのに)シックでエモくなる。オススメ
- Lightprobe付けると、アバターとかにちゃんと明るさが反映される。オススメ
- PC用ならReflectionProbeを置くとテカテカした人たちが良い感じになる
のでこれをやっていく。やっていき!
ライトをベイクしろ?
公式は言っている「ベイクは必須です。リアルタイムライトは激重だ。Lightmapとprobe使え。Lightmapも低解像度で十分綺麗だから」「大丈夫だ。問題ない」
一般的にライトをリアルタイム処理すると重い。でもほとんどのワールド内のものは動かないじゃん? じゃあ光の当たり方を事前に計算して、テクスチャに"焼き込んで"おくと、リアルタイムじゃないのにそれっぽい陰が作れる!というのがベイク処理(bake:焼く)。詳しくは「Unity ライト ベイク」とか「アンビエントオクルージョン」とかググって
Lightingウインドウ*3を開いて。Realtime GIをオフに、Baked GIをオンにする。これでリアルタイムライトは機能しなくなり、負荷が軽くなる
動かないオブジェクトのinspectorを開いて、右上のstaticをチェックする。ライトは全部Modeをbakedにする。これによって、オブジェクトやライトがベイクの対象になる。逆に動くオブジェクト、PickupやAnimatorで動くものはチェックしないこと。
Lightingウインドウへ戻って、Generate Lightmapを押そう。するとちょっと待たされた後、ベイクされる。Sceneウインドウのワールドがシックになってるはずだ。Unity便利ですごい
AmbientOcclusionをオンにしてもいいだろう。凹みとかの陰が追加されるが、Lightmap解像度が低いと陰が回り込んでしまって、却って汚くなるかもしれない。この辺は様子を見て選ぼう
内部的には影のテクスチャ画像を生成して持つため、データサイズが大きい。雑にベイクするとあっさり10MBオーバーのワールドになる。しょうがないにゃあ…
とりあえずできたがQuest用は汚いし、データサイズもデカくてひどい*4。
ベイク情報(Lightmap)を軽くする&&縞々で汚いのを対処する。
LightmapSettingsを詰めよう。
なんで縞々かというと、画像の圧縮ノイズだ。どうもPCとQuest/Androidではテクスチャ圧縮方式が違う(追記 ASTC形式にすればマシのようだ)ようで、今回ほしいベイクテクスチャ(Lightmap)では特性が合わず、いい見た目にならないようだ*5。ので圧縮Compressionのチェックを外す。ただし、これは未圧縮になるためデータサイズが大きくなるので、併せて以下も行う
なんでサイズが大きいかというと、Unityがめっちゃ細かい影テクスチャを吐いていることに他ならない。なだらか~に明るい/暗いのが付けば雰囲気として今回はいいので、解像度を下げよう*6。今回はLightmap resolutionを40→10とした。これでサイズは理屈の上では1/16になるはずだ
なお、影解像度の低下が目立つ場合は、目立つGameObjectのLightmapだけ解像度を上げる手がある。RendererのLightmap - scale in lightmapを大きくすると、そのRendererだけLightmapの解像度があがる、とのこと。Unity公式ドキュメント
Lightmap sizeは… 正直よくわからん。ほどほどに小さい方が細切れになってメモリを効率よく使えそうだが、収まるなら少ない枚数のテクスチャに収まった方がいい気がする*7。極端に小さかったり大きかったりしなければいいのかな?
最初に比べて解像度は1/4、Lightmapテクスチャは1/16になったが、なだらかできれいな影が付いた。データサイズも半分になり快適。ぶっちゃけ、PCでもこの解像度でいいやと思う程度には十分な品質だ*8*9
LightProbeって何?
LightProbe/LightProbeGroupというのは、Quest版VRChatでは「その空間明るさ情報」を事前計算した点、とそれをまとめたグループ。これがあると、ワールドの明るいところにいるアバターやモデルは明るく、暗いところにいるアバターやモデルは暗くなる*10。色が付いたライトがあればその色が付く。probeから離れた場所では、周辺のrobeから平均をとって明るさを計算してくれる。詳しくは【Unity】モバイル向けのライトマップTipsと、ライトマップを動的に更新するHack - テラシュールブログあたりで詳細を
内部的な話をすると、データはprobeごとに色情報の数値として保存されるらしく、データサイズは非常に小さい。ので極端に多くなければ、ぽこぽこprobeを置いてやって良いと思われる。*11
基本的には「周辺の光がつよいところ(光源の近くやEmission付きマテリアルが光ってる近く)」と「暗いところ」と「光の強さが急に変わるところ(光線が遮蔽されてる壁)」に置くといいらしい。自動化ツールもあるらしいので、それを使うのもよさそうだ(が、自分は手配置した)
Unity上ではLightProbeごとに線が引かれ、LightProbeの範囲が表示される。この空間内/近くなら、それっぽく明るさが決まるということだ
ReflectionProbeって何?(Quest不要/PC専用)
ReflectionProbeはReflection、つまり反射の表現に使われる。鏡のように磨かれた鉄球に周囲の風景が映る、みたいなのをそれっぽく表現するための技術。これがあると、ワールド内に反射するものがあるか、反射するシェーダー付きのアバターがいるときにちゃんと風景が映って見える。フルフルにこれも計算すると重いので、ワールドの一部領域ごとに事前に360°撮影したテクスチャを用意しておき、その場所に来た時反射物にペタっと張ってそれらしく表現する。
が、これはシェーダー制限によってQuestにはないはず。PC版でのみ有効。
内部的には、前述のように360°画像テクスチャを持っているのでデータサイズは大きくなりがち。といっても、らしく反射すればいいのでそんな大きな解像度は割り当てなくていいんじゃないかな。部屋などの、周辺の風景がガラッと変わる場所ごとにProbeを設置する、ことが重要と思われる。
反射オブジェクトがなければ作らなくてもいいモノだが、中には反射マテリアルを付けたアバターがあなたのワールドを訪問するかもしれない。という時はとりあえず1個置いてあると、極端に変にならないのではないか?(消極的対応)
ちなみにReflectionProbeがない場合、反射マテリアルはSkyboxなどの背景を使うようだ。Probeがないと「部屋の中にいるのに、反射マテリアルには空が写ってる」ということが起きうる
オクルージョンカリングって?
まだ自分は手を出せてない。詳しくはUnity公式説明を読んで。視界外かどうかを事前計算しておいて、GameObjectごと消すことで処理を軽くする。
広いワールドや、部屋がたくさん分かれたワールドを作るときに思い出すとよさそうだが、現行小さめのワールドが多いQuestでそういうワールドが来る機会はあるのだろうか?探索して遊ぶワールドとかにはいいかもしれない?
モデルのテクスチャサイズをプラットフォーム毎に自動的に縮小する&&テクスチャ圧縮をASTC形式にする
Unityのプラットフォームごとのオーバーライドという機能を使えば、自動で環境ごとにリサイズして出力ができる。テクスチャのinspectorを見て、PC用(Default)はこういう設定、下枠に環境ごと設定がある
ぱっと見よくわからないがコレはタブになっているので、右のAndroidアイコンを押して、Override for Androidを押すと、環境ごとに自動で設定が切り替える機能が有効になる。あとはSizeなりFormatなりCompressionQualityをいじる。
もう一つ、ASTC形式にする話はページを分けた。VRChat Questのテクスチャ形式はASTCにしよう - おめが?日記_(2) ASTCはAndroidで使える(比較的)新しいテクスチャ圧縮形式でQuestは対応している、RGB Crunched ETC/ETC2と比べてかなりキレイなので何も考えずFormatはASTC*12にしてよいと思う
最終的にどうなる
基本的には
- シェーダーをQuest用にする
だけでQuest不可なものを除いて、Questワールドは動くはず
加えて
- ライトをベイクする。Lightmapを軽く、ノイズを対処する
- テクスチャをASTC形式にする
- テクスチャサイズをQuestだけ縮小
をするだけでサイズは劇的に小さく、かつ軽く、イカした見た目になるはずだ
自作ワールドjust RedFlagは当初10MB程度あったものが、4MB以下になってる。もともとモデルでのテクスチャ利用がほとんどないマップだったとは言え、Lightmap改善だけで半分以下になった。見栄えをそこまで犠牲にせず、ロードも早くなって実によい。
VRC_xxx系コンポーネントはVideoPlayer以外制限が緩い
そう、気づいてる人はそれなりにいそうだが、VRC_xxxx系コンポーネントや許可されたUnityコンポーネントはだいたいが動く。そこにチャンスはある、と思う。
のでギミックやゲーム作る人には朗報ではないだろうか?というか今作ってる。Vケット3までには見せられる形にしたい
他雑多な話
- 当たり前だが、QuestにVRCミラーは重い*13。が、Questは現状自撮りができないのでミラーは欲しい。ので離れたら消えるミラー、ON/OFF切り替えできるローカルミラー等を配置しよう
- レンダーテクスチャを使うカメラ(例・ナルさんのStarterKit付属のSimpleCameraなど)は割とすんなり動く。が、Quest相手にテクスチャサイズはあまり大きくない方が良いだろう。自分は1024pxにしている
- Questでは距離に応じてテクスチャ解像度が切り替わるため、細かい文字を遠くから見る場面はつらい。配置するときは注意、近づいて読めるようにしよう
- 他、CrossplatformAvatarワールドや、あたらしいHubやHomeなどVRChat運営が作ったワールドを見て、何となく察する(ミラーの挙動とか解像度とか)
- 究極的にはQuest買って自分で見に行く。自分はそうした。いいぞ
↑はPC版での見栄え、背景のLightmap書き込みも悪くない質感だが、これでもQuestあわせの低解像度。カメラのフラッシュを見るとPostProcessStackの効果でぼやっとしているのがわかる。これもポチポチするだけで視界がエモくなるので、オススメだぞ
いかがでしたか?
StandardLiteシェーダーをはっつけたCubeを並べ、Lightばらまいて綺麗で軽量なベイクができるだけで、なんかそれらしいQuestワールドは作れる。作れるんですよ。ほんとほんと。ワールドはアバターと違ってボーンだのアニメーションだのは必要ないし、アバター作るより絶対楽だぞ。
あとデータサイズがでかいのはだいたいテクスチャのせいなので、テクスチャサイズを小さくしましょう。まずはASTC形式にして、それでも足りなければプラットフォームオーバーライドで自動縮小させよう。圧縮は場面に応じて使い分けるとgood
*1:パフォーマンスはDuffuseなどのシェーダーと比べると良くないようだが、それでもQuestで十分速度が出て、かつStandardシェーダーと似たような設定ができる
*2:ほんとか?多分もっと抜本的な修正が必要なぐらい重くなってそう?
*3:UnityのメニューからWindow-Lighting-LightingSettingを開く
*4:platform PCだとこの時点で綺麗にでてしまうので、スルーしている人も多いと思う。自分はした
*5:圧縮方式を切り替える手もあるかもしれない。未調査
*6:もともとUnityのデフォルト値が細かすぎるというのもある
*8:逆に考えると、Lightmapが1/16になったのにデータサイズは1/2にしかなっていない。Compressionは1/8サイズに圧縮をかけていたことがわかる
*9:どうも現行のテクスチャ圧縮でGPUが対応している圧縮は、圧縮状態でVRAMに格納され、VRAMの使用量削減になるようだ。さらに読み出しも早いそうなので、画質が若干下がる以外は圧縮にはメリットしかないようだ
*10:当然明るさを見てくれるシェーダーでないと効果はないが、VRC SDKの推奨シェーダーはこれを見ている。少なくともToonLitやStandardLiteは見ているし、Arktoonのような一般的にVRCで使われるシェーダーは見ているので安心しよう。逆に明るさを見ないシェーダーにはUnlitとかがある
*11:厳密には、多くなるとCPUパワーが食われる?ので管理できる程度に配置しよう
*12:ATSC 6x6 blocksとかASTC 8x8blocksあたりから試してみる
*13:数人で集まってオンにするとフレームが半分になるぐらい重い
OculusQuestの感想。VRChat人口増えてるぞ
OculusQuest
あんなこと言っててアレだけど、OculusQuestを結局買った。公式から。
さっくり4,5日でFedex到着
これはすごい。ソフトの継続性は疑問だけど、お手軽6DoFでコントローラ付きVRだわ…快適
ただ、これで5万円が安いか高いかはもう分からなくなってしまっている。VRで5万は安い範囲だと思うけど、例えばPS4とかのゲーム機や他実用的な家電製品、スマホと比べ単機能なVRで5万円が安いと思えるかはわからない。
つまるところ、「全く新しい体験だけど単機能おもちゃ」に5万円が、手が出せるか、という話ではある。かつて、任天堂がファミコンを出す時に「本体価格を1万に収めよう」とした*1話に近い。
ソフトは既存PCのVRゲー移植がほぼすべてと言って良いので、PCVR勢にとっては新鮮味に欠ける。が遊んだことのない人は間違いなく楽しい、だろう。だろう、というのはもうその感覚がVRやりすぎて自分には分からなくなっているからだ。とはいえ何人か身近な人に被らせた感じはみんな楽しんでいたのでイケる。イケるデバイスだ。
あとはこのQuest体験と5万円が乗った天秤が、それぞれの人の中でどちらに傾くか次第だ
本体(HMD)
- 重いといわれるが初期Vive勢からみると、十分軽いと思う。ただ前後バランスは前に寄ってるのはたしかではある
- 外装はファブリック調でまとめられていて、高級感がある。
- 顔あては大きめ、眼鏡対応幅。眼鏡用の奥行追加パーツ付属。パッドがファブリック調なので肌触りは良いが、汚損は心配。公式交換パーツはそこそこいい値段なのが悩ましい
- ベルクロ調整+スライド固定はシンプルながら上々。
- 頬に荷重が乗ってつらい場合は、公式映像を参考に正しい順序で装着するといい。HMDを顔に当ててから、後頭部へベルトをスライドして載せる。左右ベルトの長さをベルクロで調整。最後に頭頂部ベルトを気持ち短めにして、頭頂部ベルトで荷重を分散させるようにするのがコツ
- 鼻の穴はひろい
- レンズのスイートスポットはViveと比べ良い。多少雑に被っても視界がぼけたりずれたりしなくてよい。レンズフレアは少ない
- ELパネルの黒は確かに綺麗
- 視野はViveと比べ気持ち狭い?各種ゲームでは軽量化されたグラフィックと合わせて。パリッとハッキリした感じ。視界縁は気にしていれば明確にfoveated renderingで解像度が下がっているのが見える(解像度が変わる継ぎ目がある)が、動いてる分にはあまり気にならない。スクショ撮影すると解像度落ちは汚い
バッテリー
- バッテリーは公式通り2時間が確実で、それ以上はアプリ次第といった感じ。十分な時間だと思うが、後述する充電の遅さを考えると悩みがないわけではない
- 充電は遅い。USB TYPE-C純正の5V3Aアダプタをつないだまま遊ぶと微増程度。どうも発熱でスローにしている噂もあるので、確実に充電させたいならスリーブではなく電源オフがよさそう
- 3Aということでケーブルと出力は気にする必要があるが、5V供給なので比較的どんなUSB充電器/モバイルバッテリーでも最低限の充電はできそう
- 額のあたりに接近センサーあり。ここで顔を検知してスリープするが、持ち歩きの時にここが反応してしまうと、カバンの中でバッテリーを消耗してしまうケースが出るのはGO同様の様子。念のために電源オフで持ち運ぶのがよさそう
コントローラー
- 旧Touchのフィット感と比べるとまずまず。全体的に質感は下がっているが、機能は不満ないよう注意を払ってコストダウンした、という印象を受ける
- トラッキングは十分。稀にロストすることがあるが、致命的というほどではない感じ。範囲も十分、万歳も手をHMDに近づけても問題ない。総じてWinMR以上、Vive未満で不満はない。
- スティック、ボタンはいい感じ。Viveに欲しかったのはこれなんだよなあ…と思わせてくれる
- トリガーボタンの質感がチャチい、振動がいわゆるHD振動ではない/ケータイであるようなプルプル振動でチャチい、グリップ部が小さくホールドしづらい、重心が前よりのトップヘビーで時々手の中で逆さまになる、といった細かい点は気になったが、問題というほどではない
- ストラップはナックルコントローラー式の方がよかったかもしれない
- バッテリー持ちは良い。片側単三1本で8~10時間といった感じ。HMD内から残量は読める
OSとプラットフォーム
- 設定はスマホのホストアプリで設定する形。決済設定も同様
- 初期設定でWifi設定とちょっとでもうVRを始められる。
- それ以外はすべてHMDの中で操作が完結していて素晴らしい。とはいえ、キーボード入力については厳しい(他のVR、MRデバイスでも同様だが)
- 仮想ウォール設定のガーディアンシステムすごい。これだけで未来デバイス感がある。
- ミラー、VR視界を外部で見る手段がちゃんと用意されてるのは、他人にHMDかぶせてガイドするとき便利。一番楽なのは、ホストアプリを入れたスマホでできるので、持ち出す時に荷物がコンパクトで済む
- スクショ、動画キャプチャ。システムに組み込まれているのは楽、そのままpublishできるのがFacebookしかないのはつらい。内蔵ブラウザでtwitterログインしてみたが、ファイルアップロードはダメだった。PCとUSBでつないでストレージアクセスはできるが、面倒
システム全体
- 総じて高い完成度でまとまってる。高級感があり、購入してからVRを体験するところまで滑らかに体験できる。たしかにエポックなマシンだ
- 6DoFが紐なしコントローラありで遊べるのは最高。性能やバッテリーは妥当だろう。FBロックインは気になる
- VirtualDesktopのSteamVR対応をOculus社が削除要請する事例があったことで、早くもプラットフォームの意向が見え隠れしてしまった。adb(Android開発ツール)を使って、独自ソフトを入れるルートもあるが、そのフローで必要な「開発者登録」はOculus社への登録が不可欠であり、将来的に手を入れられる可能性は否定できない
ソフト類
チュートリアルFirstStep
- Quest専用チュートリアル
- 一通りの操作に、ミニゲーム2種(ガンシューティングとダンス)が含まれてて、楽しい。チュートリアル中の気球ドローン操作たのしい
- Rift用チュートリアルだったFirstContactもQuest版が無料で手に入りあそべる。だいたい内容は被っているが、Contactと比較してさっぱりスッキリしたビジュアルに、段階的に操作が増える丁寧な作りになっている
- とりあえずQuestをかぶせて遊ばせるには最適
ゲームBeatSaber
- ここ1年のVR音ゲーといえばコレ、という感じのBeatSaber
- コントローラの違い、トラッキングの違いからフワッとした違和感はあるものの、ほぼPCの感触で遊べる
- キューブの透明感がなくなってたり、障害物の透明赤ブロックが不透明になったり、セイバーのオーラが明確にビルボードになってたり、LevelFail時のブロックが溶ける演出が差し変わってたり、重い演出は削られてるのは分かる
- Demo版ありではあるが、とりあえず買っとけ系タイトル
- PC版であった曲追加MODが早くもリリースされている。作業内容はウィザード形式でまとまっていて(Quest専用操作で)迷うところは少ないが、開発者登録などの作業も慣れないユーザにはややハードルがあると思う。
- 今後、BeatSaber開発者がふさいでくるのは考えづらいが、今後Oculus側が手出しをしてくる可能性は考えられる
ゲームGameCentral
- XBox360のKinectダンスゲーの続編
- KinectからVR化したことで足のトラッキングはなくなってしまったが、代わりにダンスクラブの雰囲気を体験できるようになった。
- 各種操作を仮想スマホにまとめてるのがなかなか面白い。マップのテレポート移動、曲の選択、各種オプションに加えて、NPCとの会話ストーリーがメッセージアプリ上で展開していく。なかなか自然なUIで感動した
- 仮想スマホを投げ捨てるとちゃんとヒビが入るたのしい
- オンラインマルチがアバターがあったりとSNSを意識した作りになっているようなのだけど、まだ試せていない。
Quest版VRChat
- これこれ、これである。VRChatが動くのか?ちゃんと動くならこれが自分によってのキラーソフトで良い、ぐらいのつもりでQuest購入したとも言える。またはQuest対応アバターを作ってしまったので、自分の目で動作検証してみたくなったともいう
- 思ったより快適で違和感なく動く。とはいってもPC版アバターやワールドは表示されないが、Quest用ワールドの範疇ではそんな困らない
- 同一ワールドで近場10人を超えると音声プチプチが厳しくなる印象だが、PCでも15人ぐらいから厳しくなるので、こんなもんだろう
- カメラ機能がない。これは早く欲しいところだが、DanceCentralの類似機能にプレビューがなかったことを考えるとスペック的に厳しいのかもしれない
- 観測問題ではあるけど、Questの登場によってActiveなワールドの数が激増している、つまりVRChatの全体アクティブ人口が増えてる。ざっくりだけど数倍から十数倍の印象。連日CrossPlatformワールド数がとんでもない量アクティブになってる
- 対応ワールド、アバターはまだまだ少ない。とはいえ、直近たどMurder2がQuest対応ワールドとしてリリースされたり、遊べるワールドは増えてきている様子。
- JP tutorialも連日人が来るようになっていて、夜に行くと有志による勝手チュートリアルを受けたり、逆に初心者を待ち受けてワイワイできる。Himiko AvatarWorld:QuestはQuest版が独立してこれまた便利。VRChatフレンドを広げるには今がチャンスだろう
- 一方で、Questユーザがたむろってる日本語publicワールド*2はいまいちわかってない。確立しているのだろうか?
- この辺Questユーザがどう定着して、PCユーザとどんな関係になっていくかは今後気になるところ
- Viveユーザからすると、スティックでの移動は非常に楽で、ジェスチャー操作は戸惑う。grip(サイドキー)とuse(トリガー)が分かれてるのは、誤操作少なくてよい。VRChatのValveIndexコン対応を聞くかぎり、ViveコンよりはTouchコンの操作方法の方が公式推奨の操作法だろう
ワールド自作、やってみたらできたQuest対応。Just Redflag、小物いっぱい作ったのとカメラギミックがんばってみたので見て〜
- 適当にCube積み上げたワールドのような感じでポリ数等に無理がなければ、すんなり対応できる。シェーダーをVRChat/Mobile系に差し替えるだけでほぼアップのみは通る感じ
- ただし軽量化は多少コツがいるようす。適当にサイズダウンするとテクスチャノイズが目立つようになったりするので、この辺は要調整
- テクスチャ圧縮アルゴリズムがPCと変わってノイズが出やすくなったりしてるところは、低解像度&非圧縮の方がいいケースもあり
- 具体例。Lightingをbakeするときは、LightmapResolutionを小さく(自分は10texelperunit程度に)、Sizeを小さく(自分は256を試し中)、CompressLightmapsをFalse(縞が目出つのを防ぐ)という感じにしている。ライトマップテクスチャの枚数を見て、Sizeを大きくするのはありかもしれない
- カメラギミックもそのままで動いた。念のため解像度を落として設置している
- ミラーはlocalON/OFFで露骨にfpsが変わるので、やはり性能はつらそうではあるが… なんか他が動いてると本当に性能が低い?のかよくわからんね。ミラーON/OFFを自動化してるワールドが多いのも納得
- こうしてみると制限が多いが、逆に見るとVRC_xxxx系のコンポーネントは制限がないので、ゲーム系ワールドは特に問題なく移植できそうな気配を感じる。事実Murder2はQuest対応版がリリースされた。
- アバターの制約に対して、Quest版ワールドの制約は相対的には少なく自由度があるように感じる?ワールド作成者にとっては、突如需要が沸いてる状態と思える