こんばんは。きさらぎです。
この記事はNeos VR (その3) Advent Calendar 2022の2日目の枠にさかのぼり投稿する記事です。
1日目はnonoNoxさんのquestコンでピースしたかった話の予定です。
背景
ある日、NeosJapanのDiscordサーバーに次のような質問がありました。
インベントリ整理していると、適当に保存したワールドもアイテムも大体17MBと少しという容量のものが多いのですが、何か固定で変なデータでも入っているのでしょうか?
kazuさんは「シェーダのデータも表示としては出てくるので多分それです」と答えていましたが、私は気になったので少し調べてみることにしました。
検証の手順
コード
- まずReSharperを開きます。
- 左ペインのタブをExplorerにします。
- 左上のプルダウンをAssembliesにします。
- プルダウンの下の段の一番左に値札のようなボタンがあるのでそれをクリックします。
- [以下EULAに抵触する危険性があるので省略]
ワールド
- ExportNeosToJsonを入れます
- NeosVRに入ります
- 新しいワールドを作ります。このときSpaceWorldを選択します
- 新しいワールドに入ります
- 何もせずセーブします。このとき保存する場所はお好みで構いません
- インベントリにワールドオーブが追加されます
- 追加されたオーブを一度クリックしてスポーンさせます
- オーブをグラブしたままダッシュメニューを開きます
- File Browserを開きます
- 右上の緑色になった
[+]
を押します - ダッシュメニューを閉じます
-
Export as
と書かれたダイアログが出てきます -
JSON
を選択します -
Export
を押します - ダイアログが閉じます
- ターミナルを開きます
- 以下のコマンドを打ちます。ここで、
$EXPORT_JSON
は適切なファイルパスで置き換えてください。また、PowerShellをお使いの場合は書き換えるのが面倒だったので適宜読み替えてください。
#!/bin/sh
jq < $EXPORT_JSON | \
grep '@neosdb:///' | \
sed -E -e 's! *"Data": !!g' \
-e 's!@neosdb:///!https://assets.neos.com/assets/!g' \
-e 's/.webp//' | \
jq -r | \
xargs --replace -- curl -sSL --head {} | \
grep content-length | \
awk '{ print $2 }' | \
jq -s add
おそらく、あなたは以下の出力を得ることでしょう。
18460784
検証の結果
結局あれこれ調べた結果、空のワールドが18MBとして表示されるのは「予めNeosVRに組み込まれたフォントについて、利用者のストレージ使用量として計上されているように見える実装になっているからである」ということがわかりました。なのでそれを気合で潰します。
そして出来上がったのがDoNotIncludeDefaultResourceForSizeです。これを使うと上記の方法で作成したワールドの容量表示は約100KBとなり、より正確な消費量が計上されることが期待できます。
終わりに
さすがにそうはならないと思うので、NeosVRのイシュートラッカーであるNeosPublicにチケットを発行しました。
直るといいなあ…(遠い目)
お読みいただきありがとうございました。
3日目の記事
- その1: neosでゲームを作るときに困ったことと解決策 - Swesheloさん
- その2: アイテムのサムネイルに好きな画像を設定する方法 - Fukuroさん
- その3: NeosVRで作ったもの・関わったものまとめ(2022年) - akiRAMさん