NeosFesta2を支えるダイナミックスポーンシステム

12月12日土曜日、NeosFesta2がついにオープンしました！
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">🎊ついに <a href="https://twitter.com/hashtag/NeosFesta?src=hash&amp;ref_src=twsrc%5Etfw">#NeosFesta</a> がオープン！！🥳🎉<br><br>その場で体験・入手できるアイテムが盛りだくさん👏<br>未来のVRフェスティバルをお楽しみください！🥽<br><br>Neos VRをインストールしてこちらにアクセス！😜<a href="https://t.co/reN5dKsPd8">https://t.co/reN5dKsPd8</a><a href="https://twitter.com/hashtag/NeosVR?src=hash&amp;ref_src=twsrc%5Etfw">#NeosVR</a> <a href="https://t.co/TrVWlJTOnJ">pic.twitter.com/TrVWlJTOnJ</a></p>&mdash; オレンジ (@mikan3134) <a href="https://twitter.com/mikan3134/status/1337598759232962562?ref_src=twsrc%5Etfw">December 12, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

私は入稿システムや本会場のロジック制作など裏方的なところを作っていました。
今回は特にこだわったダイナミックスポーンシステムについて書きたいと思います。

##そもそもダイナミックスポーンシステムってなに？
NeosFesta2では来場者が見たいブースを選択して開く形になっています。

そのため、会場ワールドの読み込み時には最小限のデータだけ読み込み、来場者が開いたときに各ブースのデータを読み込むようにしています。
この仕組みをダイナミックスポーンシステムと呼んでいます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547843/7984e316-01ca-ce79-88fc-96f809b4cb1e.png)
ダイナミックスポーンシステムはNeosFesta2のこんな魅力に貢献しています。

来場者目線
・会場は1ワールドで完結＆読み込みが高速
・負荷に合わせてブースを開いたり閉じたりできる

出展者目線
・自動入稿受付といつでも会場チェック機能
・来場者が負荷をコントロールできるので、入稿規定がゆるく自由度が高い



##会場は1ワールドで完結＆読み込みが高速（来場者目線）
ブースの容量を気にする必要がないので会場は1ワールドで完結しています。回るのが楽になりますね。
さらに、ブース数に関わらず会場ワールドの読み込み速度は高速です。（私のホームワールドより速いです。）

この仕組みだと例えブース数が1000を超えても、1ワールド完結で今回と同じ読み込み速度を実現できます。

![](https://media.giphy.com/media/6MAD3uqeSNBbg6YGeO/giphy.gif)

##負荷に合わせてブースを開いたり閉じたりできる（来場者目線）
NeosFesta2では開いたブースを4つまでストックしています。（次のブースの読み込み中に以前のブースを眺めたり、複数人で別々のブースを見たりするために残しています。）
負荷が高いときはメニューから閉じることもできるため、来場者がPCスペックに合わせて開いておくブースを調整できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547843/6b7ddc09-9d56-0a64-1ddc-9b28cf5127df.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547843/448c573f-824c-3238-05b2-d75aff89ec2b.png)


##自動入稿受付といつでも会場チェック機能（出展者目線）
NeosFesta2の入稿は専用ワールドを公開しており、NeosVR内で完結していました。
また、入稿したブースは自動でダイナミックスポーンシステムに乗るようになっており、入稿後はすぐに本会場同様の読み込みテストを行うことができるようにしていました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/NeosFesta?src=hash&amp;ref_src=twsrc%5Etfw">#NeosFesta</a> の入稿風景はこんな感じ✋<br>完全自動なのでVRから出ることなく、入稿してすぐにプレビューできます🧐<br>便利でしょ！<a href="https://twitter.com/hashtag/NeosVR?src=hash&amp;ref_src=twsrc%5Etfw">#NeosVR</a> <a href="https://t.co/UEtgcknlMI">pic.twitter.com/UEtgcknlMI</a></p>&mdash; オレンジ (@mikan3134) <a href="https://twitter.com/mikan3134/status/1335073758944452608?ref_src=twsrc%5Etfw">December 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

##来場者が負荷をコントロールできるので、入稿規定がゆるく自由度が高い（出展者目線）
来場者視点でも書いたとおり、来場者がブースを開いたり閉じたりできるため、負荷の高いブースも許容できます。
そのため、ブースの制限も優しくなり、自由なブースが制作されました。

明確に定めた制限は以下の3つだけでした。

> ・ブースサイズは5x5x5以内
> ・Directional Light使用禁止
> ・Audio Outputの数は通常時10個以内

実際、それだけでワールドにできるほどの自由度の高いブースがいくつも出展されています。
ぜひ会場で見てみてください。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/NeosFesta?src=hash&amp;ref_src=twsrc%5Etfw">#NeosFesta</a> で遊んでゲーム内マネーKFCをゲットしよう！💴🌟🤑<br><br>『クルーズシューティング』のブースでゲームを遊ぶとスコアに応じてKFCがもらえるぞ！😁🎯<br>協力プレイでハイスコアを狙おう！👀<br><br>KFCはNeos VRのカジノや競馬、麻雀などに賭けて遊べるゲーム内マネーです😜<a href="https://twitter.com/hashtag/NeosVR?src=hash&amp;ref_src=twsrc%5Etfw">#NeosVR</a> <a href="https://t.co/1yP6XjJnS1">pic.twitter.com/1yP6XjJnS1</a></p>&mdash; オレンジ (@mikan3134) <a href="https://twitter.com/mikan3134/status/1337942680827916290?ref_src=twsrc%5Etfw">December 13, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 


##ダイナミックスポーンシステムのこれから
NeosFesta2はダイナミックスポーンシステムのテストでもありました。
結果は大成功だったので、NeosFesta3ではもちろん、色々なところで使っていくつもりです。

こんなことしたいなーって思っています。
・Evolverのアプリストアを作りたい（Evolverとは？→https://twitter.com/mikan3134/status/1282253366383370242?s=20）
・誰でも何時でも何でも出品できる自動販売機作りたい
・ゲームワールドのステージをそれぞれ読み込むようにして特大ボリュームのゲームでも読み込みを快適にできそう




少し違う話ですが、これはダイナミックスポーンシステムと似た仕組みのアイテムです。便利なので良かったら使ってみてください。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">メニューからパブリックフォルダのアイテムを取り出せるツールを作りました!<br><br>- パブリックフォルダを更新したら同期されます<br>- 低負荷<br><br>かなり実用的です!アバターに内蔵するのがおすすめ<a href="https://twitter.com/hashtag/NeosVR?src=hash&amp;ref_src=twsrc%5Etfw">#NeosVR</a> <a href="https://t.co/82mIauDyh1">pic.twitter.com/82mIauDyh1</a></p>&mdash; れにうむ (@rhenium_vrc) <a href="https://twitter.com/rhenium_vrc/status/1319581667456028675?ref_src=twsrc%5Etfw">October 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

##最後に
NeosFesta2は最高の出来なのでまだの方はぜひ遊びに来てください。

また、会場にはアンケートが設置されています。
NeosVR内でそのまま投稿できるのでぜひご協力をおねがいします！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547843/fb30514e-4d53-7ac9-d155-c3df316c9511.png)

##ダイナミックスポーンシステムの仕組み（追記）
Twitterで聞かれたので残しておきます。
インベントリのアイテムにはAssetUrlが振られていてそれをペーストすることで読み込んでいました。
AssetUrlはNeosJsから取得しました。
https://twitter.com/rhenium_vrc/status/1338617602252234752?s=20

NeosJs
https://www.npmjs.com/package/@bombitmanbomb/neosjs