VRMのMeta情報を高速に取得する話 -第3回VRM勉強会-
ご無沙汰しています。
第3回VRM勉強会で話してきました。
今回はその内容を踏まえて VRM.QuickMetaLoader の使い方を解説します。
当時の発表スライドは以下です。
内容はスナック感覚で読み散らかせる程度の物なので、ご笑覧ください。
第3回VRM勉強会の様子
当日の様子(中野人史さんのまとめ) togetter.com
VRM.QuickMetaLoader のモチベーション
非同期、Task、重ねて
今年の初頭に Nakaji さんがローディングに関して悩んでたことをふと思い出しました
#モーションキャスト 基本のループです。それにしてもVRM読み込みが遅い…。 pic.twitter.com/IRJ73Ip2gs
— Nakaji Kohki / リリカちゃん (@nkjzm) January 4, 2019
最終的に非同期処理でだいぶ改善したみたいです。
画像アリでも許容できる速さですね。画像だけ非同期で読み込むのもちょっと面倒なので、コレでいい感もあります! #モーションキャスト pic.twitter.com/Tyb40hguZY
— Nakaji Kohki / リリカちゃん (@nkjzm) January 5, 2019
Nakajiさんのモーションキャストのソースは公開されているのですが、
ソースを参照すると、読み込み段階から非同期処理を行い、速度の改善を図っています。
https://github.com/nkjzm/VMotion/blob/master/Assets/VMotion/Scripts/VRMMetaImporter.cs
ゴリラ、誕生
勉強会の前の週に mao さんのツイートでバイナリ ヨム ゴリラ のミームが爆誕しました。
ウホウホ オレ イゼン ニンゲン シテタ
— mao (@TEST_H_) August 18, 2019
イマ ジャングルデ メモリ バイナリ ヨム ゴリラ
ゴリラがかっこよすぎたので僕なりの解釈でゴリラしてみました。
ゴリラの戰い
そんなこんなで思い立って誕生したのが VRM.QuickMetaLoaderです。
VRM.QuickMetaLoader の使い方
Releaseページ から unitypackage を入手します。
UniVRM と一緒に Unityプロジェクトに投げ込みます。
以下のコードでかんたんに非同期で読み出すことができます。
var bytes = await Task.Run(() => File.ReadAllBytes(file)); var metaLoader = new VRM.QuickMetaLoader.MetaLoader(bytes); VRMMetaObject meta = await metaLoader.ReadAsync(true);
async / await を使っているので、Unity の Scripting Rntime Version
は .Net 4.x Equivalent
以降でないと動かないでしょう。
もっと早くできないか
まだ最速ではないので、できます。 次期バージョンで改善を約束します…