PlayCanvas Engine v2.19.7 が 2026年6月12日に公開されました。今回のリリースは大きな新機能追加というより、WebGPU / WebXR デモを実機で動かすときに効いてくる安定化更新として見るのがよさそうです。
リリースノートでは、Imagination PowerVR GPU、具体例として Pixel 10 系で WebGPU を一時的に無効化する対応、thumbstick axes を持たない gamepad で XrNavigation の rig が NaN で壊れる問題の修正、scene depth decode の選択修正、DOF effect の解像度非依存化が挙がっています。(GitHub)
PlayCanvasでWebXRデモ、WebGPUデモ、HTML-in-Canvas UIデモを公開する場合、これは小さく見えてかなり重要です。WebXRではコードだけでなく、どのブラウザ、どの端末、どのGPU、どの入力デバイスで動いたのかが再現性に直結します。
v2.19.7で見るべき変更点
今回の更新で、WebXR開発者が見ておきたいポイントは3つあります。
1つ目は、特定GPUでWebGPUを一時的に無効化する対応です。リリースノートでは、Imagination PowerVR GPU、具体例として Pixel 10 が挙げられています。これは、WebGPU対応ブラウザであっても、実際の端末・GPU・ドライバの組み合わせによってはWebGPU経路を使わない判断が必要になることを示しています。(GitHub)
2つ目は、XrNavigation の修正です。thumbstick axes を持たない gamepad で XR navigation rig が NaN に壊れる問題が修正されています。XRでは、コントローラー、ハンドトラッキング、ゲームパッド、OS側の仮想入力などが環境によって変わります。入力が「いつも左右スティックを持つ」と決め打ちされた実装は、実機で壊れやすくなります。(GitHub)
3つ目は、scene depth decode の選択修正です。WebXRのAR表現では、現実空間との前後関係、オクルージョン、深度情報の扱いが重要になります。Quest Browser 146.0でも WebXR Depth Projection のサポートが追加されており、PlayCanvas側のscene depthまわりの安定化は、今後のMixed Realityデモで効いてくる可能性があります。(Meta for Developers)
なぜWebXR開発者に関係するのか
PlayCanvas Engineは、WebGL2、WebGPU、WebXRを扱えるWeb向け3Dエンジンです。公式READMEでも、PlayCanvasはWebGL2とWebGPU上に構築されたオープンソースエンジンで、XRはWebXRによる没入型AR/VR体験をサポートする機能として説明されています。(GitHub)
そのため、PlayCanvasでWebXRデモを作るときは、単に「WebXRが使えるか」だけでは足りません。実際には、次のような層が重なります。
- 端末
- GPU / ドライバ
- OS / ブラウザ
- WebXR / WebGPU / Permissions Policy
- PlayCanvas Engine
- アプリ側の入力・移動・深度・UI実装
v2.19.7の更新は、このうち「GPU」「XR入力」「scene depth」の層に関係します。つまり、仕様の新機能ではありませんが、デモを公開したときに読者が実機で動かせるかどうかに関係する更新です。
v2.19系はWebGPU / WebXRの流れが強い
今回のv2.19.7だけを見ると修正リリースに見えますが、v2.19系全体を見ると、WebGPU / WebXRまわりの動きがかなり多く入っています。
PlayCanvas Engine v2.19.0では、XrBridge、WebGPU immersive XR presentation、WebGPU XR device loss、WebGPU AR camera color、WebGPU XR depth bridge、WebGPU multiview frame pass など、WebGPUとWebXRをつなぐための更新が多数入っています。(GitHub)
さらにv2.19.2では、HTML-in-Canvas texturesをWebGPUの copyElementImageToTexture 経由で扱う対応と、新しいHTML-in-Canvas texture upload APIへの更新が入っています。(GitHub)
つまりv2.19.7は、単独の小さな修正というより、v2.19系で進んできた WebGPU + WebXR + HTML UI texture の流れを、実機で壊れにくくするための更新として見ると理解しやすいです。
WebGPUは「対応している」だけでは足りない
WebGPU対応の話では、つい navigator.gpu があるかどうかだけを見がちです。しかし、PlayCanvas v2.19.7で特定GPU向けにWebGPUを一時的に無効化していることから分かるように、実際のデモ公開ではもう少し慎重に見る必要があります。
WebGPU対応ブラウザであっても、端末やGPU、ドライバ、ブラウザバージョンによってWebGPU経路が無効化される場合があります。実装側では、WebGPU前提で初期化するのではなく、WebGPUが使えなかった場合のWebGL経路を用意しておくのが現実的です。
async function detectWebGPU() {
if (!("gpu" in navigator)) {
return false;
}
try {
const adapter = await navigator.gpu.requestAdapter();
return !!adapter;
} catch (error) {
console.warn("WebGPU detection failed:", error);
return false;
}
}
const canUseWebGPU = await detectWebGPU();
console.log("WebGPU available:", canUseWebGPU);ただし、PlayCanvas側が内部的に特定GPUを回避する場合もあるため、アプリ側では「WebGPU APIがある」ことと「このデモがWebGPU経路で安定して動く」ことを分けて考える必要があります。
XR入力は「axesがある前提」にしない
v2.19.7の XrNavigation 修正は、WebXR入力の説明にも使いやすい例です。
WebXRでは、コントローラーやgamepad情報が常に同じ形で来るとは限りません。thumbstick axesを持たない入力デバイスもあります。今回の修正はPlayCanvas内部のものですが、アプリ側でも「axesがある前提」で処理を書かないほうが安全です。
function readThumbstick(inputSource) {
const gamepad = inputSource.gamepad;
if (!gamepad || !Array.isArray(gamepad.axes)) {
return { x: 0, y: 0, available: false };
}
const x = Number.isFinite(gamepad.axes[2]) ? gamepad.axes[2] : 0;
const y = Number.isFinite(gamepad.axes[3]) ? gamepad.axes[3] : 0;
return { x, y, available: true };
}PlayCanvasの移動システムやXRメニューを使う場合でも、コントローラーあり、ハンドトラッキング、入力なし、モバイルARのように複数条件で確認しておくと、問題を切り分けやすくなります。
scene depthを使うデモは特に実機検証が必要
scene depthやWebXR Depth Projectionは、Mixed Reality系デモで重要になります。仮想オブジェクトが現実の机や壁の後ろに隠れる、現実空間の奥行きに合わせて合成する、といった表現に関係するためです。
Meta Quest Browser 146.0では、Experimental WebGPU in WebXRに加えて、in-browser WebXR depth projection supportが追加されています。(Meta for Developers)
ただし、深度系の機能は、端末、ブラウザ、セッションモード、権限、AR/MR環境によって挙動が変わりやすい領域です。PlayCanvas v2.19.7でscene depth decodeの選択修正が入っていることからも、深度を使うデモでは「動いた/動かない」だけではなく、前後関係が正しく出るか、左右目で破綻しないか、WebGPU / WebGLで差が出ないかまで確認したほうがよいです。(GitHub)
まとめ
PlayCanvas Engine v2.19.7は、見た目に分かりやすい新機能リリースではありません。しかし、PlayCanvasでWebXR / WebGPUデモを扱うなら重要です。
特に、WebGPUが特定GPUで無効化される可能性、XR入力デバイスの差分、scene depthの扱いは、デモ公開時の再現性に直結します。
WebGPU in WebXRやHTML-in-Canvas textureのような実験的な機能を扱う場合は、WebGPUが使えるかどうかだけでなく、エンジン側の回避処理、入力デバイスの差分、depthまわりの挙動まで含めて確認する必要があります。

