はじめに
Three.jsでも実装した WebXR(VR)の実装をBabylon.js でもやってみたので、備忘録メモです。
残念ながらWebGPUにMetaQuest2は対応してないようです。
WebGPU Compute into WebXR on Quest | Meta Community Forums - 1360706
Anyone know the expected date for Meta Quest's WebGPU-WebXR layer? i just purchased a MetaQuest 3, to complement my Quest 2, for WebXR development... - 1360706
https://communityforums.atmeta.com/discussions/Questions_Discussions/webgpu-compute-into-webxr-on-quest/1360706ただ、Qiitaをみると実装してる人もいる?
自作ライブラリでWebGPU&WebXR(VR)対応した話 - Qiita
はじめに この記事は WebXR Advent Calendar 2025 24日の記事です。 WebXR、楽しいですよね。A-Frameなどのライブラリを通して、手軽に楽しむことができます。 でも、自分で直接WebXR APIを触ってみたくないですか? この記事は、そん...
https://qiita.com/emadurandal/items/ecdf90da45f0ebe3414eBabylon.js で VR 体験を開発する際、Quest2 や他デバイスからアクセスするためには HTTPS (セキュアコンテキスト) の設定が必須です。
この記事では:
- Vite + mkcert による開発環境での HTTPS
- Babylon.js での WebXR 初期化(VR)
- Quest2 ブラウザからの実行と動作確認
までのステップをまとめて解説。
前回の記事:
[Babylon.js #03] WebGPUで MMD 1,000体を走らせる:大量描画と影の最適化戦略
Babylon.jsとWebGPUを使い、1,000体のMMDモデルを同時描画。InstancedMeshによるパーツ単位の複製、ShadowGeneratorの解像度調整、行列計算の凍結など、ブラウザ上で軍勢を動かすための実践的ノウハウの記録。
https://humanxai.info/posts/babylonjs-03-webgpu-1000-instances-optimization/動画(VR):
Babylon.js × VR|HTTPS設定からQuest2でWebXR没入体験 #babylonjs #webxr #quest2 #vr #https #Vite #JavaScript
Babylon.js を使って WebXR(VR)環境を構築し、Quest2 のブラウザから没入体験できるところまでの流れをまとめました。✔ Vite+mkcert でHTTPS対応✔ Quest2ブラウザから WebXR 起動✔ Babylon.js の createDefaultXRExperienceAsy...
https://youtube.com/shorts/CTQafDFmL-k?feature=shareなぜ HTTPS が必須なのか?
WebXR API(VR/AR をブラウザで扱う API)は セキュリティ制約がある機能 です。
そのため:
✔ HTTPS (Secure Context) ✔ WebXR 対応ブラウザ ✔ 証明書の信頼
を満たさないと VR モードに入れません。
1. Vite で HTTPS を有効化
まず Vite の開発サーバーを HTTPS にします。
import { defineConfig } from "vite";
import mkcert from "vite-plugin-mkcert";
export default defineConfig({
server: {
https: true,
host: true,
},
plugins: [
mkcert(),
],
});
この設定だけで?
はい。
vite-plugin-mkcert がローカル証明書を自動生成し、OS の信頼ストアに登録します。
その結果:
🔒 ブラウザで警告なしの HTTPS
➡ location.protocol === 'https:'
➡ Quest2 ブラウザでも Secure Context
が得られます。
確認ポイント
ブラウザでアクセスしたとき:
✔ 鍵アイコンが表示される ✔ 「接続は保護されています」 ✔ 証明書は有効
となっていれば HTTPS が正しく機能しています。
2. Babylon.js で最低限の VR シーン
次に最小限の VR 対応コードを記述します。
async function createMinimalVR() {
const canvas = document.getElementById("renderCanvas") as HTMLCanvasElement;
if (!canvas) return;
const engine = new Engine(canvas, true);
const scene = new Scene(engine);
new HemisphericLight("light", new Vector3(0, 1, 0), scene);
const ground = MeshBuilder.CreateGround("ground", { width: 10, height: 10 }, scene);
const box = MeshBuilder.CreateBox("box", { size: 1 }, scene);
box.position.y = 0.5;
await scene.createDefaultXRExperienceAsync({
floorMeshes: [ground],
});
engine.runRenderLoop(() => scene.render());
}
createMinimalVR();
✔ 座標・ライト・メッシュ ✔ WebXR 初期化 ✔ レンダリングループ
と最小構成で VR 表示できます。
3. Quest2 で VR 表示
HTTPS 環境下で次の URL にアクセス:
https://<PC の LAN IP>:5173/
Quest2 の標準ブラウザ(Oculus Browser)は WebXR 対応のため、VR アイコンが表示されます。
✔ VR アイコンが表示 ✔ VR モードに入れる ✔ コントローラー操作も可能
注意点
Quest2 のみ動く理由
Quest2 の標準ブラウザでは WebXR API が正式対応しています。
PC 側のブラウザ(例: Chrome + Link)は WebXR の immersive-vr を返さないため、
➡ VR アイコンすら表示されない
ということがあります。 これは仕様です。
よくあるトラブル
WebGPU 固有 API を使っている
WebGPU (WebGPUEngine)は Quest2 では未対応です。
そのため VR では WebGL(Engine) を使う必要があります。
Ground の順番
WebXR の floorMeshes には 必ずメッシュ作成後のオブジェクトを渡すこと 例)ground を先に作成 → その後 XR 初期化
まとめ
| ステップ | 必須条件 |
|---|---|
| HTTPS | yes |
| 証明書信頼 | yes |
| WebXR 対応ブラウザ | yes |
| Babylon WebXR 初期化 | yes |
これらを満たせば Babylon.js で簡単 VR 体験構築 が可能です。
更に実装するなら…
- XR コントローラーの導入
- Teleportation 実装
- モデルのインポート(glTF / glb)
💬 コメント