コメント_2019-09-27_020813

Q「なぜバーチャルマーケットはシンプルにブースをずらっと並べないのか」

展示即売会と聞くと、やはりコミケのようにテーブルがずらっと並んでいる光景を思い浮かべる方も多いと思います。

なんでVケットはこんなに会場が広いの?
コミケみたいに、ブースを横にずらっと並べれば良いのでは?
何も無い空間にブースを置いたら、もっと快適に巡れるのでは?

色々と意見や質問、疑問を頂くことも多くなってきたので、ここで私の考えを書き記しておきたいと思います。

全ては描画負荷を下げる為の工夫

VRChatにおいて「重い」という言葉が指すものは2種類あります。
1つは「ワールドの容量が重い」為に「ロードに時間がかかる」。
1つは「描画負荷が高い」為に画面がカクついたりfpsが下がり「重く」感じる。
今回の記事では、後者の「重さ」=「描画負荷」について中心にお伝えします。

Vケットは描画負荷が上がり過ぎないように「視界に入るブースの数」を厳密に管理しています。具体的には10ブース程度を目安としており、最大でも15ブースを超えないように工夫しています。
出展ブースの入稿ルールでStaticとDynamicを分けている(※)のも、配置後の会場仕上げで「オクルージョンカリング」および「ライトベイク」による軽量化を見据えたものとなっています。
※参考「入稿ルール:C. Scene内階層形式規定

オクルージョンカリング:見えないものを描画しない

軽量化に大きく貢献するのがオクルージョンカリング。
ざっくり言うと、壁などの遮蔽物の向こう側にあるものを非表示にすることによって描画負荷を下げる技術です。
詳しくはUnityのドキュメントを参照して下さい。

「何もない平面にブースを並べれば良いじゃん」というのは、実際にやってみると負荷がものすごく高くなってしまうことが分かります。
遮蔽物が無いので一気に大量のブースが視界に入る事になり、全てを描画しなければならない(※)ので「重く」なるのです。
※厳密に言うと、大量のMaterialを一気に視界に入れちゃダメとか色々あるのですが割愛

「Vケット会場は重い。会場(の雰囲気)にこだわり過ぎてて重いんじゃないのか」という話をTLで見かけたりもするのですが、実は、ワールドそのものはとても軽いのです。
「ブースがたくさん視界に入るポイントが重い」のであって、ワールド設計の段階でいかにそういうポイントを無くすか、が肝になっています。

1年前のVケット1の時には入稿ルールはほぼ存在せず、軽量化の知見も無かった(そもそも私がオクルージョンの存在を知らなかった)ので「全てのブースが一気に視界に入る」「ブースのMaterial使用数制限無し」「ブースの容量制限無し」というハチャメチャなことをやってしまい、とんでもなく重い会場が出来上がってしまいました……。
(開催当時、東館から西館の方向を見るとfpsが一桁台まで落ちました)
そこから得た教訓を経て、今の入稿ルールとワールド設計の思想があるということです。

いくつか分かりやすい実例を挙げます。

Vケット2のFutureTerminalやVケット3の仮想工廠は、動線が円形でブースが円の外周に沿って配置されている為、来場者は常にワールドの外側を観ながら回ることになります。背後にある反対側のブースは視界外にあり、上下階層のブースは床と天井で遮蔽されてオクルージョンカリングで分離される為、軽い。そういう構造になっています。

Vケット3のネオ渋谷も導線が円周であることは仮想工廠と共通しています。1階層しか無いのでぱっと見では開けた空間に見えるのですが、随所にブースを格納した建物が置かれていて、建物内部にあるブースを丸ごとカリングすることで軽量化を実現しています。

Vケット2の異世界マルシェやVケット3の九龍帝国城下町参番街は、ブース7~8個程度をひとまとまりとして配置して、今居る場所以外を遮蔽物で隠す構造となっています。

これらの工夫をした上で適切に全てのブースを回れるような動線設計をする必要がある為、Vケットの会場作成は非常に難易度が高いと言えます。
単に似たような部屋を並べて、そこにグループ分けしたブースを置いても体験として面白くないので、まとまりごとに特徴的な区域名をつけて、景観にも工夫を凝らしています。

ただし、これらは会場側の工夫であり、入稿ルール自体が最終的な会場の軽量化を見据えたものになっているので、出展側からすると「入稿ルールを守れば、他には何も気にしなくていい」状態となっています。

ライトベイク:動かないものは影を焼き付けてしまう

オクルージョンカリングの他に、負荷削減に大きく影響するのがLightのBakeです。
こちらもざっくり言えば、動くもの(プレイヤーやpickupオブジェクト)にはリアルタイムに計算される光を当てるけど、動かないもの(会場そのものやブースの壁や床など)にはあらかじめ影を焼き付けておくことで軽量化を図る技術です。
※リアルタイムに影を計算すると重くなりがち
詳しくはUnityのドキュメントを参照して下さい。

Vケットでは、ライトを
①会場側で用意したBakedでSoftShadowな各種Light
②ブース側で各出展者が用意したBakedな各種Light
③プレイヤーとpickupレイヤーに当たるRealtime Noshadow DirectionalLight
の3つに分けていて、動かないものには①と②を当ててLightBakeしてしまいます。プレイヤーと、動くもの(pikcupオブジェクトやAnimationするオブジェクトなど)には③を当てることにしています。

Vケット2までは①と③だけで②が無かったので、会場内の配置場所によっては建物の影になってしまって異様に暗いブースができたりしてしまったので、Vケット3では「自分のブースは自分のブースに含んだBakedのLightで照らす」を基本思想として②を取り入れました。
※参考「入稿ルール:F. Component規定 1-3Rendering/Effect関連

Vケット3では「光の神」を任命し、あらかじめLight Settingを含んだScene Sampleを配布したことと、下見期間を設けたことで配置&Bake後の実際のルックを出展者が確認可能になった為、Vケット2に比べれば大きく改善はしました。
とはいえ、Light Bakeは沼が深いのでこれがまた難しい。
まだまだ課題を抱えているポイントです。

なお残る課題

オクルージョンカリングについては、Vケット2の際にブースは遮蔽物としては小さ過ぎるので機能しない(むしろオクルージョン暴れの原因になる)為、Occluder(遮蔽物)としては扱わないが吉である、という知見を得ました。

また、オクルージョンベイクの設定値が本当に難しくて、遮蔽物がちゃんとあるのになぜか貫通して描画されてしまったりと、最終的な調整段階で技術班の職人技が光ります。ここで技術リーダーのmomoma君の名言を一つご紹介。

「Occluderは遮蔽物としての自覚を持って欲しい」

オクルージョンについては一応の最適解が見えてきつつありますが、まだまだ重いエリアは存在する為、より良い会場設計をVケット4以降も模索していく次第です。

ライトベイクについては、もう少しやりようがあったかな、というのが正直な所です。「光の神」こと、るらさんがいなければ、本当にマズイ事になっていたでしょう。彼の活躍によって大きく救われました。

Vケット2から3にかけて大きく変わった点は「暗いワールドが増えた」ことでしょう。欠番街やLaboratory、仮想工廠などは屋内である為DirectionalLightもほとんど届かず、会場内にもあまりライトは多くない為、自前のライトでブースを照らす必要があります。ところが、全体的にブースを明るくしようとするとArea Lightを置きがちで、ワールド内に大量のArea Lightがあると超高性能マシンでもBakeできないという事態に陥ります。LaboratoryはBakeが出来ない状態が数日続き、非常に苦戦しました。また、欠番街に関してはベイクに50時間かかるという鬼畜仕様でした。

また、アバターに使われるようなShaderはほとんどがLight mapに対応していません。
「マネキンだし動かないから」といってLight Bake staticに設定してしまうと、Light mapがBakeに対応していない為、真っ黒になってしまうのです。
アバターモデルはpickupレイヤーにして③を当てるのが最適解なのですが、そんなことは(一応入稿ルールに記載はあるものの)普通分かりません。(他にLightProbeを活用するという手もありますが、そちらは余計に難易度が高い)
このあたりは、Vケット4以降は入稿ルールと入稿チェックツールの中で改善していければ良いかなと考えています。

他にも、Light設定付きのSampleSceneを配布しているけれど、配置後の実際のLight Bake時には、配置場所によって「周辺の環境光」を拾ってしまったりするので、SampleSceneでBakeした時と異なるルックになる可能性があります。下見期間である程度修正が可能とはいえ、何度も何度も修正アップロードをすることは出来ないので、ここにも大きな課題があります。

Lightに関しては「とことんこだわりたい人」から「分からんので任せたい人」まで、とても幅が広い出展者層に対応可能な状態にしていく必要があります。Vケット4では光の神を増員予定です。それほど重要な技術であるということですね。

そうそう、他にももう一つありました。
「同じワールドに人が増えると重い」
これはもうやむを得ないというか、Vケット側ではどうしようもない部分なので、VRChatの機能向上やHMDの性能向上、ネット回線の強化に期待するしかありません。

おわりに

「バーチャル上のコミケ」や「バーチャル展示即売会」という呼び名自体が実態と乖離しているのではないかという声も聞くようになってきました。

Vケット1では、説明のしやすさを重視し「バーチャル空間上でのコミケみたいなもの」と言っていましたが、Vケットはオリジナルの3Dモデルが中心であり、二次創作の印刷物が中心のコミケとは性質が大きく異なる為、Vケット2以降は「コミケ」という言葉を全く使っていません。

Vケット2以降は展示即売会と銘打ってきましたが、その呼び名自体が「ブースがずらっと横に並んでいる状態」を想起させてしまうのかもしれません。
「本来ブース(出展者)が主役であるはずのイベントなのに、会場の方が目立って見える」という意見、気持ちは大変良くわかるのですが、なぜそうなっているかというと、ここまでお伝えした理由により「ブースがずらっと横に並んでいる会場を作ってもまともに機能しない」為なのです。

バーチャルマーケットという概念自体がこれまで存在しなかったものなので、現実の延長線上にある言葉(コミケ、展示会、即売会、etc…)では説明が難しいのかもしれません。
とはいえ、言葉が与える印象は非常に大きいので「今後Vケットをどのように表現していくか」については今後の課題として考えていきたいと思います。

今回は、技術面での工夫について書いてみました。
明日は、Vケットの思想について触れてみたいと思います。

記事が参考になったら、サポートのご検討をよろしくお願いします!サポートは、より良い気づきを得られる記事を作れるよう、私自身の学びに投資します!