1. 会場へ持ち込む前に準備する
開発用PCで依存パッケージを取得し、次のコマンドでキットを作成します。この準備段階ではインターネットを使用できます。
npm ci
npm test
npm run offline:pack
出力先は artifacts/vli-bar-offline-<OS>-<CPU>/ です。今回の環境では darwin-arm64、Mac/Apple Silicon用です。キット全体をUSB等で会場PCへコピーしてください。
Node実行環境、サーバー、ビルド済みアプリ、MediaPipeのWASM・身体推定モデル、VRM・VRMA・曲、印刷用マーカーと認識処理を同梱します。会場でNodeやnpmを別インストールする必要はありません。証明書生成にはOSのOpenSSLを使用します(Mac標準環境を想定)。別のOS・CPUでは対応するキットを事前に準備してください。
Android/PICO/Quest/Vision Pro/iPhoneにも事前準備が必要です。OSとChrome/PICO Browser/Meta Quest Browser/Safariを使える状態にし、AndroidのWebXR観客にはARCore対応端末とGoogle Play開発者サービス(AR)を用意します。iPhoneは印刷マーカーによるARを使用します。会場で初回ダウンロードが始まらないよう、使う端末でカメラ・ARを一度確認してください。端末のシステムソフトはキットには含みません。
iPhone用の印刷用マーカーを実際のサイズ・100%で印刷します。黒い外枠の一辺は既定15cm、白い余白を含む画像全体は18.75cmです。印刷後に黒い外枠を実測し、アプリのマーカーサイズに同じ値を設定してください。
2. 会場のLANを作り、PCを起動する
- Wi-FiルーターのWANを外し、会場PC・スマホ・HMDを同じWi-Fi/LANへ接続します。Wi-Fi自体はオフにしません。「インターネットなし」と表示されても接続を維持します。
- ルーターの端末分離/AP isolationを無効にし、PCのファイアウォールで会場LANから8443番ポートへの接続を許可します。
- Macではキット内の
start.commandを実行します。ターミナルからは./start.shでも起動できます。起動したターミナルは開いたままにします。
LAN用IPが1つなら自動選択します。複数候補が出た場合は、キットのフォルダーで次のように実際のLAN用IPを指定します。
./runtime/node scripts/start-offline-lan.mjs --host 192.168.1.10
192.168.1.10 は例です。起動時に表示された会場PCのIPを使います。ポートの既定値は8443です。全端末は https://会場PCのIP:8443/ を直接開きます。公開ドメインやDNS設定は不要です。
3. 各端末が会場用証明書を信頼する
カメラやWebXRを使うため、LAN内でも信頼済みHTTPSが必要です。初回起動時に .lan-certs/ へローカル認証局とサーバー証明書を作成します。生成するだけでは端末に信頼されません。
- キット直下の
venue-ca.crtをUSB等で各端末へコピーします。.lan-certs/ca.crtと同じ公開用証明書です。端末へ配るのはこのCA証明書だけです。 - Androidでは設定の「セキュリティ」「暗号化と認証情報」等から証明書を追加し、認証局(CA)として登録します。名称は機種・OSによって異なります。
- PICOでも、端末・ブラウザが提供する証明書の信頼設定へ登録します。PCだけに登録しても、スマホやHMDの設定は変わりません。
- iPhoneでは
venue-ca.crtを開いて、設定から証明書のプロファイルをインストールします。さらに「設定」→「一般」→「情報」→「証明書信頼設定」で会場用CAの完全な信頼を有効にします。インストールだけではHTTPSに使用できません。画面名はOSによって異なります。アプリは信頼設定を自動変更しません。 - 各ブラウザで
https://会場PCのIP:8443/を開き、証明書エラーがなく、カメラ/ARを開始できることを確認します。iPhoneはSafariで開き、カメラの使用を許可します。
ca.key と server.key は会場PCに保持し、配布しません。IPが変わると同じ認証局でサーバー証明書を作り直します。認証局は保持されるため、IP変更だけなら端末側のCA登録はそのまま使用できます。認証局自体を作り直した場合は再登録が必要です。
PICOのCA信頼設定とWebXRへの反映は実機未確認です。 利用者のCAを信頼する設定が使えなければ、その端末でこの構成が動くとは保証できません。持ち込み前に確認してください。証明書警告を無視した続行や、安全機能を無効にするブラウザフラグは使用しません。Web経由の身体関節取得も任意機能で、PICO Motion Trackers・Enterprise機能・対応OS/ブラウザが必要と案内されています。一般向け端末では頭と取得できる手を使い、身体関節が提供されなければ未取得部分を推定します。
4. 出演者と観客が同じルームへ参加する
QuestはMeta Quest BrowserでパススルーAR、Vision ProはSafariで「VRでステージを開く」を使います。どちらも空間内のボタンをピンチまたはトリガーで選び、配置・再生・置き直し・収録・終了を操作します。Vision Proでは実際の壁を検出せず、VR空間へステージを置きます。手の追跡が許可された場合は、手首を収録・共有します。ピンチ位置を手首の代わりに記録しません。
QuestとVision Proでもブラウザから信頼される会場用証明書が必要です。端末で利用できる証明書設定を事前に確認してください。実機での信頼設定・LAN利用・描画性能は未検証です。
- 全端末で会場PCのページを開き、「LAN ROOM」のルーム名・合言葉を揃えます。「接続先(このページの会場PC)」は自動設定され、入力は不要です。ルーム名は英数字・ハイフン・下線の1〜48文字、合言葉は12〜128文字です。
- 出演者は「出演者として配信」で参加し、「カメラを準備」または「HMDでモーションを収録」を開きます。待機中から姿勢を配信し、必要なら同時に収録できます。
- 観客は「観客として参加」。3D画面で受信を確認し、PICO・Quest・対応Androidは「ARでステージを開く」で壁に配置します。iPhoneはマーカーARを開始し、背面カメラにマーカー全体と白い余白が映るように向けます。
- 「自分の姿勢をルームへ共有する」をオフにすると受信のみになります。終了は「ルームから退出」。切断された時は参加ボタンで入り直します。
1ルームは出演者1人、合計16端末までです。最初の参加でルームができ、最後の退出またはサーバー終了で消えます。合言葉を持つ人は空いている出演枠に入れます。アカウントや出演者専用の管理権限はありません。
5. 全員で舞台の位置を合わせる
各端末で 同じ壁・同じ舞台中心・同じ幅・同じ向き に舞台を配置します。iPhone用マーカー(ARUCO_MIP_36h12・ID 0)は、矢印を上にして舞台の開口部の中心に貼ります。iPhone同士は同じマーカーと実測サイズを使い、舞台幅も全員で揃えます。
WebXRの配置原点は舞台の下端中心です。マーカー中心から 舞台幅 × 2.5 ÷ 2.4 ÷ 2 だけ下がった点を下端中心にします(幅2.4mなら1.25m下)。HMDの3点指定は同じ左下→右下→左上を使い、コントローラーの緑の点を壁の数cm手前へ移動して確定します。Androidのタップ配置や自動候補も、下端の位置を目で合わせます。
VR参加者の位置は仮想ステージを基準に共有します。実際の部屋との自動位置合わせは行わず、現実の観客位置との一致を保証しません。
iPhoneではマーカーを見失うと舞台表示と端末位置の共有が止まり、再検出すると戻ります。マーカーARは壁の自動検出・部屋のSLAM・永続アンカーではありません。カメラ画角は近似値のため、距離・大きさ・観客位置には誤差があります。暗さや傾き、印刷精度でも追跡が揺れます。WebXRとマーカーARの間で自動の空間合わせは行わないので、混在時は目視で調整してください。
iPhoneでモーションを収録・確認する
Safariの通常ページでも3D再生、モーションのアップロード・プレビュー・ダウンロードを利用できます。マーカーARは選択したデモ・保存したモーション・LAN出演者の動きを表示します。
カメラから身体モーションを収録する場合は、ARを終了し、全身が映るように端末を固定して「カメラを準備」→「収録を開始」と進みます。ARと身体収録でカメラを同時使用することはできません。保存したVRMAや計測JSONはSafariのダウンロードから「ファイル」アプリへ保存してください。
何が配信されるか
| 端末 | 配信と表示 |
|---|---|
| 出演者・カメラ | 端末内で推定した頭・手・身体で、観客側のVRMを動かします。部屋の中の絶対移動は取得しません。 |
| 出演者・HMD | 頭と手、対応環境で身体関節を使います。取得できない部位は推定します。 |
| スマホ観客 | AR端末位置を顔の目安に使います。顔だけを表示し、手は共有しません。iPhoneはマーカーが見えている間だけ位置を共有します。 |
| HMD観客 | 頭と、取得できた左右の手を表示します。 |
| PC観客 | 位置を送らず、3D画面で視聴します。 |
カメラ映像・マイク音声・VRMファイルは参加者間で送りません。実写の顔・表情・口の動きの配信ではありません。サーバーはモーション履歴を保存しません。手動収録は端末内へ保存し、VRMAで交換できます。
音声配信・各端末への曲同期はありません。同梱のNEON DOORを会場PCとスピーカー等で再生できます。通信や追跡が止まったモデルは非表示になります。
開場前に確認する
- WANを切断したまま、各端末でページを新しく開く。
- VRMと音源が読み込まれ、カメラ推定やHMD追跡が始まる。
- 出演者1人と複数観客が参加し、動きと退室を確認する。
- 全員で舞台の中心・幅を揃え、見た目のずれを確認する。
キットの整合性は、キット内で次のコマンドを実行して確認できます。
./runtime/node scripts/build-offline-kit.mjs --verify .
待ち受けを始めずにファイルと証明書の準備を確認する場合は、次のコマンドを使います。IPは実際の会場PCのものへ置き換えてください。
./runtime/node scripts/start-offline-lan.mjs --host 192.168.1.10 --check
Android・PICO・Quest・Vision Pro・iPhone実機によるオフラインLAN・AR・証明書操作・性能は未確認です。iPhoneのカメラ権限、印刷マーカーの追跡精度、音声、ファイル操作も未確認です。PCでの通信・素材検証だけでは実機動作を保証できません。