えむにわリソース

ITのスキマ的なあれこれを書きます。

VRMのMeta情報を高速に取得する話 -第3回VRM勉強会-

ご無沙汰しています。

第3回VRM勉強会で話してきました。
今回はその内容を踏まえて VRM.QuickMetaLoader の使い方を解説します。

当時の発表スライドは以下です。
内容はスナック感覚で読み散らかせる程度の物なので、ご笑覧ください。

speakerdeck.com

第3回VRM勉強会の様子

vrm.connpass.com

当日の様子(中野人史さんのまとめ) togetter.com

VRM.QuickMetaLoader のモチベーション

非同期、Task、重ねて

今年の初頭に Nakaji さんがローディングに関して悩んでたことをふと思い出しました

最終的に非同期処理でだいぶ改善したみたいです。

Nakajiさんのモーションキャストのソースは公開されているのですが、

github.com

ソースを参照すると、読み込み段階から非同期処理を行い、速度の改善を図っています。

https://github.com/nkjzm/VMotion/blob/master/Assets/VMotion/Scripts/VRMMetaImporter.cs

ゴリラ、誕生

勉強会の前の週に mao さんのツイートでバイナリ ヨム ゴリラ のミーム爆誕しました。

ゴリラがかっこよすぎたので僕なりの解釈でゴリラしてみました。

ゴリラの戰い

そんなこんなで思い立って誕生したのが VRM.QuickMetaLoaderです。

github.com

VRM.QuickMetaLoader の使い方

  1. Releaseページ から unitypackage を入手します。

  2. UniVRM と一緒に Unityプロジェクトに投げ込みます。

  3. 以下のコードでかんたんに非同期で読み出すことができます。

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 以降でないと動かないでしょう。

f:id:m2wasabi:20190830001857g:plain

もっと早くできないか

まだ最速ではないので、できます。 次期バージョンで改善を約束します…