VRChat Questでワールドを作るとき、参考にしたい実例ワールドとパーツ類

Quest対応ワールドを作りたいけど何使っていいか分からない

わからんのわかる。

詳しくは公式を見よ、ではあるんだけど、ざっくり翻訳すると

  • 透過シェーダー(Transparent/AlphaCutout)はほぼ禁止。が独自シェーダーは使える
  • VRC_SyncVideoPlayer,SyncVideoStremは禁止。置くと壊れるので、Questアップロード前にコンポーネントをオフにしろ
  • 他はだいたい使えるが負荷に注意ね

という感じ。逆に言うと、そのほかのVRCコンポーネント由来や、カメラ、Animatorなどのギミックは使える。シェーダー芸は要注意だが、判別付かない気もする。

PC版でワールド作っていて、それをQuest対応するならポリゴン数とかシェーダー依存の表現(透明や反射)ですかね。ポリ数が多いのについてはモデルを削減するしかない。テクスチャだけとかならUnityのプラットフォーム別オーバーライド機能で縮小とか使えるんだけど

 

つまり「制約は多い」とは言われるけど、(VideoPlayerを例外とすれば)多くは描画と表現であって、ギミックは制約はないと言ってもいいんじゃないかな?

使える具体例

他にもたくさんありそうだけど、Questで実際にワールド散策するしかない気がする?

実例ワールド集

この辺は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

f:id:o_mega:20190724024914p:plain

ここがDon't Overwriteになってる場合は、デフォルトのETC形式で圧縮が掛かり、テクスチャが汚くなってしまう。ASTCを選ぶ

テクスチャファイル個別での設定

プラットフォーム別オーバーライドでテクスチャ毎のあれこれ設定している人はこちらも確認する。

f:id:o_mega:20190724025644p:plain

ここをASTCにする。

以上!それだけ

他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にしろ、とも言っている。公式なら仕方ない…

使おうぜ

いっぱいバリエーションあるけど何使えばいい?

f:id:o_mega:20190724025810p:plain

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接続しても内部ストレージが見れない時

f:id:o_mega:20190707161853p:plain

どういう状態?

  • OculusQuestをPCにつないでも、Questの内部ストレージ見れない
  • 以前は問題なかったが、急に見れなくなった
  • WindowsエクスプローラーにQuestはいるが、開くと中身は空
  • Quest側にも特に表示がない場合

f:id:o_mega:20190707163720p:plain

対応方法

解決方法はUSBケーブルでQuestを接続した状態で、adbコマンドを流すとQuest側から「このパソコンを信用する」が出るようになる。信用するを選ぶと、無事ストレージが見れるようになる。

恐らく開発者モードに入れたのが影響してるようす。

 

自分のケースでは Oculus Quest の映像をテレビに映したりキャプチャする方法 - Qiita の記事に従って、scrcpyをすでにインストールしていたので、そこに付属のadbを使った。

Questを接続した状態で

# scrcpyを解凍したフォルダでコマンドプロンプトを実行
# またはエクスプローラーのアドレスバーで"cmd"を書いてenterし
$ adb shell ip addr show wlan0
$ adb tcpip 5555

とすると(恐らく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が押せるようになる

f:id:o_mega:20190622024514p:plain

あとは普通にワールド作成をする。ミニマムだとVRC SDK内のexampleでもいいし、VRCWorld prefabをD&Dしてもいい。各種有志が公開しているワールド作成キットもいいぞ。virtual-boysさんのStarterKitにはお世話になりました。

 

シェーダーどうすんの?

VRC SDKにVRChat/Mobile/xxxxx系シェーダーがあるので、それを使う。

ベストはDiffuseあたりのだと思われるが、色指定ができないのでStandardから移行しようとしている人は大変だ。ちゃんとやるなら、色テクスチャを用意して必要に応じてモデル側にUV割り当てたりとかして、マテリアル統合とかするべきとは思うが、しんどい。

そこでVRC公式は移行しやすいよう、StandardLiteシェーダーを用意してくれたので、とりあえずはそれを使ってしまうが楽だ*1。特にCube並べ勢にはこのシェーダー追加は朗報だった。パフォーマンス改善は悪くなってから考えても遅くない*2

f:id:o_mega:20190622044018p:plain

(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をオンにする。これでリアルタイムライトは機能しなくなり、負荷が軽くなる

f:id:o_mega:20190727095648p:plain

動かないオブジェクトのinspectorを開いて、右上のstaticをチェックする。ライトは全部Modeをbakedにする。これによって、オブジェクトやライトがベイクの対象になる。逆に動くオブジェクト、PickupやAnimatorで動くものはチェックしないこと。

f:id:o_mega:20190727100027p:plain

Lightingウインドウへ戻って、Generate Lightmapを押そう。するとちょっと待たされた後、ベイクされる。Sceneウインドウのワールドがシックになってるはずだ。Unity便利ですごい

AmbientOcclusionをオンにしてもいいだろう。凹みとかの陰が追加されるが、Lightmap解像度が低いと陰が回り込んでしまって、却って汚くなるかもしれない。この辺は様子を見て選ぼう

 

内部的には影のテクスチャ画像を生成して持つため、データサイズが大きい。雑にベイクするとあっさり10MBオーバーのワールドになる。しょうがないにゃあ…

f:id:o_mega:20190622041347p:plain

とりあえずできたが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。極端に小さかったり大きかったりしなければいいのかな?

f:id:o_mega:20190622033616p:plain

最初に比べて解像度は1/4、Lightmapテクスチャは1/16になったが、なだらかできれいな影が付いた。データサイズも半分になり快適。ぶっちゃけ、PCでもこの解像度でいいやと思う程度には十分な品質だ*8*9

LightProbeって何?

LightProbe/LightProbeGroupというのは、Quest版VRChatでは「その空間明るさ情報」を事前計算した点、とそれをまとめたグループ。これがあると、ワールドの明るいところにいるアバターやモデルは明るく、暗いところにいるアバターやモデルは暗くなる*10。色が付いたライトがあればその色が付く。probeから離れた場所では、周辺のrobeから平均をとって明るさを計算してくれる。詳しくは【Unity】モバイル向けのライトマップTipsと、ライトマップを動的に更新するHack - テラシュールブログあたりで詳細を

 

内部的な話をすると、データはprobeごとに色情報の数値として保存されるらしく、データサイズは非常に小さい。ので極端に多くなければ、ぽこぽこprobeを置いてやって良いと思われる。*11

基本的には「周辺の光がつよいところ(光源の近くやEmission付きマテリアルが光ってる近く)」と「暗いところ」と「光の強さが急に変わるところ(光線が遮蔽されてる壁)」に置くといいらしい。自動化ツールもあるらしいので、それを使うのもよさそうだ(が、自分は手配置した)

f:id:o_mega:20190622040121p:plain

Unity上ではLightProbeごとに線が引かれ、LightProbeの範囲が表示される。この空間内/近くなら、それっぽく明るさが決まるということだ

ReflectionProbeって何?(Quest不要/PC専用)

ReflectionProbeはReflection、つまり反射の表現に使われる。鏡のように磨かれた鉄球に周囲の風景が映る、みたいなのをそれっぽく表現するための技術。これがあると、ワールド内に反射するものがあるか、反射するシェーダー付きのアバターがいるときにちゃんと風景が映って見える。フルフルにこれも計算すると重いので、ワールドの一部領域ごとに事前に360°撮影したテクスチャを用意しておき、その場所に来た時反射物にペタっと張ってそれらしく表現する。

 

が、これはシェーダー制限によってQuestにはないはず。PC版でのみ有効。

内部的には、前述のように360°画像テクスチャを持っているのでデータサイズは大きくなりがち。といっても、らしく反射すればいいのでそんな大きな解像度は割り当てなくていいんじゃないかな。部屋などの、周辺の風景がガラッと変わる場所ごとにProbeを設置する、ことが重要と思われる。

f:id:o_mega:20190622035951p:plain

反射オブジェクトがなければ作らなくてもいいモノだが、中には反射マテリアルを付けたアバターがあなたのワールドを訪問するかもしれない。という時はとりあえず1個置いてあると、極端に変にならないのではないか?(消極的対応)

ちなみにReflectionProbeがない場合、反射マテリアルはSkyboxなどの背景を使うようだ。Probeがないと「部屋の中にいるのに、反射マテリアルには空が写ってる」ということが起きうる

オクルージョンカリングって?

まだ自分は手を出せてない。詳しくはUnity公式説明を読んで。視界外かどうかを事前計算しておいて、GameObjectごと消すことで処理を軽くする。

広いワールドや、部屋がたくさん分かれたワールドを作るときに思い出すとよさそうだが、現行小さめのワールドが多いQuestでそういうワールドが来る機会はあるのだろうか?探索して遊ぶワールドとかにはいいかもしれない?

モデルのテクスチャサイズをプラットフォーム毎に自動的に縮小する&&テクスチャ圧縮をASTC形式にする

Unityのプラットフォームごとのオーバーライドという機能を使えば、自動で環境ごとにリサイズして出力ができる。テクスチャのinspectorを見て、PC用(Default)はこういう設定、下枠に環境ごと設定がある

f:id:o_mega:20190622151737p:plain

ぱっと見よくわからないがコレはタブになっているので、右のAndroidアイコンを押して、Override for Androidを押すと、環境ごとに自動で設定が切り替える機能が有効になる。あとはSizeなりFormatなりCompressionQualityをいじる。

f:id:o_mega:20190622151926p:plain

もう一つ、ASTC形式にする話はページを分けた。VRChat Questのテクスチャ形式はASTCにしよう - おめが?日記_(2) ASTCはAndroidで使える(比較的)新しいテクスチャ圧縮形式でQuestは対応している、RGB Crunched ETC/ETC2と比べてかなりキレイなので何も考えずFormatはASTC*12にしてよいと思う

最終的にどうなる

基本的には

  • シェーダーをQuest用にする

だけでQuest不可なものを除いて、Questワールドは動くはず

加えて

をするだけでサイズは劇的に小さく、かつ軽く、イカした見た目になるはずだ

自作ワールドjust RedFlagは当初10MB程度あったものが、4MB以下になってる。もともとモデルでのテクスチャ利用がほとんどないマップだったとは言え、Lightmap改善だけで半分以下になった。見栄えをそこまで犠牲にせず、ロードも早くなって実によい。

VRC_xxx系コンポーネントはVideoPlayer以外制限が緩い

そう、気づいてる人はそれなりにいそうだが、VRC_xxxx系コンポーネントや許可されたUnityコンポーネントはだいたいが動く。そこにチャンスはある、と思う。

のでギミックやゲーム作る人には朗報ではないだろうか?というか今作ってる。Vケット3までには見せられる形にしたい

他雑多な話

  • 当たり前だが、QuestにVRCミラーは重い*13。が、Questは現状自撮りができないのでミラーは欲しい。ので離れたら消えるミラー、ON/OFF切り替えできるローカルミラー等を配置しよう
  • レンダーテクスチャを使うカメラ(例・virtual-boysさんのStarterKit付属のSimpleCameraなど)は割とすんなり動く。が、Quest相手にテクスチャサイズはあまり大きくない方が良いだろう。自分は1024pxにしている
  • Questでは距離に応じてテクスチャ解像度が切り替わるため、細かい文字を遠くから見る場面はつらい。配置するときは注意、近づいて読めるようにしよう
  • 他、CrossplatformAvatarワールドや、あたらしいHubやHomeなどVRChat運営が作ったワールドを見て、何となく察する(ミラーの挙動とか解像度とか)
  • 究極的にはQuest買って自分で見に行く。自分はそうした。いいぞ

f:id:o_mega:20190622152838p:plain

↑は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のデフォルト値が細かすぎるというのもある

*7:一般的に、テクスチャ枚数が少ない方がGPUに優しい

*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到着

f:id:o_mega:20190618041120p:plain

これはすごい。ソフトの継続性は疑問だけど、お手軽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とプラットフォーム

f:id:o_mega:20190618041514p:plain

  • 設定はスマホのホストアプリで設定する形。決済設定も同様
  • 初期設定で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

  • XBox360Kinectダンスゲーの続編
  • KinectからVR化したことで足のトラッキングはなくなってしまったが、代わりにダンスクラブの雰囲気を体験できるようになった。
  • 各種操作を仮想スマホにまとめてるのがなかなか面白い。マップのテレポート移動、曲の選択、各種オプションに加えて、NPCとの会話ストーリーがメッセージアプリ上で展開していく。なかなか自然なUIで感動した
  • 仮想スマホを投げ捨てるとちゃんとヒビが入るたのしい
  • オンラインマルチがアバターがあったりとSNSを意識した作りになっているようなのだけど、まだ試せていない。

Quest版VRChat

  • これこれ、これである。VRChatが動くのか?ちゃんと動くならこれが自分によってのキラーソフトで良い、ぐらいのつもりでQuest購入したとも言える。またはQuest対応アバターを作ってしまったので、自分の目で動作検証してみたくなったともいう
  • 思ったより快適で違和感なく動く。とはいってもPC版アバターやワールドは表示されないが、Quest用ワールドの範疇ではそんな困らない
  • 同一ワールドで近場10人を超えると音声プチプチが厳しくなる印象だが、PCでも15人ぐらいから厳しくなるので、こんなもんだろう
  • カメラ機能がない。これは早く欲しいところだが、DanceCentralの類似機能にプレビューがなかったことを考えるとスペック的に厳しいのかもしれない

f:id:o_mega:20190618041641p:plain

  • 観測問題ではあるけど、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コンの操作方法の方が公式推奨の操作法だろう

f:id:o_mega:20190618041714p:plain

ワールド自作、やってみたらできた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版ワールドの制約は相対的には少なく自由度があるように感じる?ワールド作成者にとっては、突如需要が沸いてる状態と思える

 

*1:結局それはうまく行かず15k円程度と足は出たが、その後の普及を後押しするには効果的だった

*2:Fantasy shukaijoや1619みたいな

VRChatやVRMのアバター頭身をいじる(fbx修正不要)

VRChatかわいい(挨拶)

さて、VRChatやらで改変アバターをいじくってると「身長を伸び縮みさせたらどうなるか?視点も変わってなんか楽しくなるのでは!?」と思うこともあると思う。しかしそのままモデルを拡大縮小をすると、なんだか違う。フィギュアだか妖精さんだか、になってしまわない?

普通の人間は、身長が伸びたからって頭のサイズが劇的に変化したりしないし、高身長でスマートな人は手足が長い。

 

のでモデリング作業ゼロ、Unityエディタ上だけでさらっと手足の長さを調整し、低頭身ちびっこアバターや高頭身ナイスガイ・レディなアバターを作る

これはVRChat/VRC SDKで動作を確認したが、同じ方法でVRMでも同様の修正が出来たので、下にVRMの場合も書く

Just作業

いつものUnity+VRC SDKアバターをいじってるところからスタート。ちなみにこのアバター火事屋さんのU10mk2(頭)と、同じくU10ユトver(胴体)をくっつけて、テクスチャやらマテリアルやら改変した状態。

f:id:o_mega:20190521031216p:plain



もうかわいいのですが、説明すると左から高身長化(162cmぐらい)、ちび等身化(107cmぐらい)、最後に右が未変更のオリジナル(137cmぐらい)。

 

やることとはArmatureをポチポチ開いて、手(UpperArm)足(UpperLeg)を選んでscaleをいじる。と、その部位から先のサイズがまとめて変わる。

上の低身長ユトちゃんは、手足(UpperArmとUpperLeg)のYを0.8倍、頭(Head)のYを0.95倍して、やや頭を縦に縮めた*1。高身長ユトちゃんは、全体を1.1倍、手足のYを1.15倍、頭(Head)をXYZすべてに0.95倍して小顔気味にしている。

f:id:o_mega:20190521042740p:plain

 

とりまこれだけで等身は変わるのだが、そうすると

f:id:o_mega:20190521032435p:plain

床から浮いたり足がめり込んでしまう。VRChatに入ってもだいたいこの高さで浮いたり刺さる。グヌヌヌ…

なぜかというと、ここは推測だがVRChatはアバターの腰hipsボーンを掴んで動かしているらしい。腰の位置が変わらないため、足が伸びれば床を抜けるし、足が縮むと空中に浮くと思われる。

これを修正する

浮き/めり込み/接地を修正する

ボーンのScaleを変更すると「その部位から先」にScaleが適用される、ルートボーンのArmatureを修正すると「ちゃんと接地した状態で、全体のScaleが変わる」。これを活用して

f:id:o_mega:20190522030710p:plain

と、Armatureには「接地調整のScale倍率を掛け」「その直上(この場合はHips)ボーンで、逆数を掛けて、接地調整分の倍率を相殺」「改めて足ボーンに倍率を掛ける」とだいたい狙った感じになった

 

さらに全体のスケールを調整する場合は、Hipsボーンに倍率をかければ良い。

f:id:o_mega:20190522042612p:plain
でだいたい近い位置になると思うが、Hipsボーンの長さ?作り?で若干(2,3cm程度?)ズレるようなので、最終的には足ボーン(UpperLeg)のScaleを0.01単位ぐらいで調整し、接地させるのが良さそうだった

あと、アバターを選択すると、足場の線が出るっぽいのでそれをガイドに調整するとやはり良さそう

f:id:o_mega:20190522031328p:plain

 

仕上げの視点調整を忘れずに

f:id:o_mega:20190522033728p:plain

VRC_AvatarDescripterのViewPositionのY数値をいじって、視点ボールを目の辺りにあわせる。この辺は(やったことあれば)アバター制作の作業とおなじ。画像のように▼を押してPipeline Managerを畳んでおくと、(なぜか)ViewPosition調整がしやすい

あとはアップロードすればOK

 

VRMの場合

VRMでこの等身調整をする場合、公式の作業フローでは正規化前のモデルの段階で今回の修正をする

例えばfbxをインポートとしてVRM吐いてる場合

  1. fbxをインポートする
  2. fbxをヒエラルキーに置いて、等身をいじる(今回の作業)
  3. VRMをExport(正規化)
  4. ExportしたVRMを取り込んで、マテリアルやら表情blendshapeやら揺れものやライセンス、FirstPerson Offset(視点調整)等を設定する
  5. VRMをExport
  6. 完成

という感じで出来ました

 

いかがでしたか?

ちょっと違った改変で、ちょっと違った視点も手に入る頭身調整。同アバターと会ったときも単なる色違いだけでなく、なんか姉妹兄弟っぽさがでて、たのしい

低身長(110cmぐらい)でVRChatを過ごしていると、ワールドが150cm~160cmぐらいを基準に作られてて、低身長はなかなか大変なのが実体験できてまた面白い。ワールドによっては低身長向け台座が用意されていて、バリアフリーなことが体験できたり、逆にないワールドではバリアを体験できたり。なんでドアのハンドルが頭の位置にあるんだよ!みたいな体験がVRで楽しめるのはいい。150cmのアバターが背高く見えて、囲まれるとなかなか圧迫感があるとかも良い

おすすめ改変tipsでした

*1:ここではいじってないが、首(Neck)を縮めるのも良さそうだ

Oculus Questを買うべきかどうか。またはQuestはどういうプラットフォームか

結論

VRをOculusDK1から追っかけ、今はVive初代+Trakcer環境の自分からの意見として…、正直読めない。個人的には様子見を推奨する。3カ月経ってからもう一度考えていいと思う

 

 

つよつよPC*1持ってなくて、5万円ポンと使えて過去有名のスタンドアロンなタイトルがやりたい。であればQuestはアリ。

5万円が惜しいVRChatのような特殊なオンラインゲーやりたい、BeatSaberのMOD環境*2やりたい、最新のVRゲーが遊びたい*3という目的だとQuestはリスキー

 

ハードウエア

  • 順当。待ち望まれた6DoF/コントローラ/インサイドアウト
  • PCと比べれば激安で、セットアップが簡易

ソフトウエア

  • 先行き不明
  • ローンチタイトルに有名ソフトが並んでるのは○
    • VRChat,VacationSimulator,BeatSaber,Thumper,BoxVR,RecRoom,PokerStarVR,KeepTalkingAndNobodyExplodes,I Expected you to die,SpacePirateTrainer,DanceCentral等
    • ただし、VRChat,BeatSaber等PC版と大きく仕様が異なったり、MODが導入できないケースを考える必要はあり
    • いくつかは、DK1,DK2時代からの名作であったり、VR必須でないタイトルもあり、PC勢から見ると古く見えるタイトルもある
  • ストアが閉鎖的で、開発者が気軽にソフトを開発できない
    • SteamVR開発はその日にでも始められるが、Questは企画書審査から必要
  • ローンチは良いがその後が続くかは不明

考察

というのを考えていると、どうもPCVR環境とQuest環境はカチ合わない。つまりRiftSとQuestは対抗ではない。たまたまPCVRの1パーツと、Quest単体の価格が同じになり、同日に発表されたと見るのがいい

 

ストアの閉鎖性、環境の独立性を考えると、むしろコンシューマゲーム機に近い。コンシューマのVRといえば、PSVR環境だ。PS4ゲーや各種映像メディアに強く、Moveコンと全体価格で不利な、先行するPSVRと、そこにコントローラと全体で有利なQuestが殴り込みを掛ける図

または、既存ソフトがなく、移植タイトルをたくさん引き連れて他業種(Facebook/Oculus)からコンシューマゲーム機へ参入を決める、と見ると、かつてのXbox3DOを思い出す光景でもある。

 

現行のPSVRが400万台の出荷を達成した、とニュースであった。現行コンシューマVRで一番売れているのはPSVRであることを考えると、Questがそこへどれだけ追いつけるかが一つの目安となりそう。

それまでは、Facebook/OculusがどれだけアプリをQuestに引き込み続けられるか、ローンチ後にどこまでソフト供給を出来るかによると思える

*1:VR Readyである。GeForce1060以上のGPU持ちPCがある

*2:Twitterや動画サイトで見られる動画はほとんどMOD入りで遊んでる連中だぞ!

*3:ここでいう「最新」は個人差がある。VRの中でも「最新の」タイトルを指す