[WEB App] VRM Crowd Benchmark — @webxr-jp/avatar-optimizer によるVRMアバター多体表示ベンチマーク

[WEB App] VRM Crowd Benchmark — @webxr-jp/avatar-optimizer によるVRMアバター多体表示ベンチマーク

VRM Crowd Benchmark

WebXR-JP の HALBY さん(@halby24)が開発した @webxr-jp/avatar-optimizer を使い、ブラウザ上で多数のVRMアバターを同時表示しながらDraw Calls・FPS・ポリゴン数をリアルタイムで計測・比較できるベンチマークツール。

テクスチャアトラス化・メッシュ結合・カスタムシェーダー(MToonAtlasMaterial)による最適化の効果を、ON/OFFの切替とパラメータ調整で即座に確認できる。Meta Quest 3 の WebXR にも対応。

スクリーンショット(PC)

30種 × 52体表示(最適化ON)— FPS 44 / Draw Calls 496 / Triangles 2.2M

VRM Crowd Benchmark — 30種52体表示(最適化ON)

同条件(最適化OFF)— FPS 26 / Draw Calls 1420 / Triangles 3.4M

VRM Crowd Benchmark — 30種52体表示(最適化OFF)

動画(PC)

VRM Crowd Benchmark — PC動作デモ

スクリーンショット(VR)

Meta Quest 3 — 最適化ON / 4体表示(Draw Calls 38)

VRM Crowd Benchmark — Quest 3 最適化ON

Meta Quest 3 — 最適化OFF / 4体表示(Draw Calls 124)

VRM Crowd Benchmark — Quest 3 最適化OFF

動画(VR)

VRM Crowd Benchmark — Quest 3 動作デモ

CREDIT

動作検証で使用したモデルは、自作したもの以外に、衣装データを含め以下のクリエイターの方のモデルを使用させてもらっています。

Author: minipper 様

Author: おしり服屋さん 様

Author: SATORI 様

Author: 桜田とまこ 様

Author: マユラ 様

使い方

1. モデルの読み込み

list.json に登録されたVRMモデルがページ読み込み時に自動で準備される。手持ちのVRMを使いたい場合は、画面にドラッグ&ドロップするか「D&D / 選択」ボタンから複数ファイルを選択。

2. 表示数の調整

スライダーまたは数値入力ボックスで表示するアバター数を指定。モデルはオンデマンドで読み込み・最適化され、指定数に満たない場合はラウンドロビンでクローンが配置される。

3. 最適化パラメータの変更

  • 最適化 ON/OFF — 左下のボタンで切替。キャッシュクリア後にリロードされる
  • Poly(ポリゴン残存率) — 10%〜100%(デフォルト50%)。meshoptimizerによるポリゴン削減
  • Atlas(テクスチャ解像度) — 512 / 1024 / 2048 / 4096。アトラス統合後の解像度
  • 「適用(再最適化)」ボタンでパラメータを反映(ページリロード不要)

4. アニメーションの再生

「Anim」バーの各ボタンでアニメーションを切替。

  • T-Pose — 静止(アニメーション停止)
  • Walk — 歩行アニメーション + 自律移動(ランダムに歩き回る)
  • Idle — 待機アニメーション
  • Random — 各アバターにランダムなアニメーションを割り当て(再生位置もずらす)

5. ベンチマーク値の確認

右上のStats パネルでリアルタイム表示。

  • FPS — フレームレート
  • Draw Calls — 1フレームあたりの描画呼び出し回数(最適化の効果が最も顕著に出る指標)
  • Triangles — 総ポリゴン数
  • Models — ロード済みモデルの種類数
  • Displayed — 現在表示中のアバター数
  • Optimized — 最適化の適用状態

6. VRモードで確認する(Meta Quest 2/3)

Questのブラウザで開き、表示数やアニメーションを設定したあと左下の「Enter VR」ボタンで没入。VR内では右スティック上下で表示数増減、Yボタンでアニメーション切替が可能。

⚠️ Quest VR モードの制限事項

VRモードはステレオレンダリング(左右2眼分)のためDraw Callsが実質2倍になります。Quest 3 では 5体を超えるとブラウザがクラッシュ する場合があります(Poly 20% / Atlas 512 の最軽量設定でも同様)。VRでのベンチマーク時は4体以下での使用を推奨します。

また、VR内のHTMLMesh UIはStats表示専用です。スライダー等のインタラクション操作はコントローラーのボタン/スティックで行ってください。

検証結果サマリー

PC(RTX 4070Ti + DDR4 64GB)

条件FPSDraw CallsTriangles
52体 / 最適化ON444962.2M
52体 / 最適化OFF2614203.4M

最適化により Draw Calls 65%削減、FPS 約70%向上

Meta Quest 3(WebXR)

条件FPSDraw CallsTriangles
4体 / 最適化ON6638105K
4体 / 最適化OFF52124206K
6体以上クラッシュ

技術スタック

  • @webxr-jp/avatar-optimizer — VRMモデルの最適化(テクスチャアトラス、メッシュ結合、MToonAtlasMaterial)
  • Three.js — 3Dレンダリング、WebXR、SkeletonUtils、HTMLMesh
  • @pixiv/three-vrm — VRM読み込み・ヒューマノイドボーン制御
  • @pixiv/three-vrm-animation — VRMAアニメーション読み込み
  • Astro — ページビルド・スクリプトバンドル

技術記事

更新履歴

  • [v1.1] (2026-09-06):

    • 画面外に出るプルプルバグを修正。
    • 「表示数」のスライダー値がテキストボックスに反映されなかったバグを修正。
  • [v1.0] (2026-09-06): 初回公開。

    • @webxr-jp/avatar-optimizer (v0.3.0) によるVRM最適化パイプライン構築
    • list.json による自動モデル読み込み / ドラッグ&ドロップ対応
    • スライダー + 数値入力によるオンデマンド表示数制御
    • 最適化パラメータ(Poly / Atlas)の動的変更UI
    • VRMAアニメーション再生(T-Pose / Walk / Idle / Random)
    • Walk時の自律歩行(ランダム目標地点への移動・旋回)
    • WebXR対応(HTMLMesh Stats表示 / コントローラー操作)
    • リアルタイムベンチマーク表示(FPS / Draw Calls / Triangles)
    • Credits自動生成(list.jsonの作者情報から重複排除・リンク付き)