Contrôle de la fréquence d’images d’application WebXR
Quelle est la fréquence d’images par défaut ?
Une session WebXR sur le navigateur fonctionne par défaut à 90 images par seconde sur Meta Quest 2 et à 72 images par seconde sur les casques Meta Quest.
Cela signifie que vos pages Web doivent être affichées à cette fréquence. Si votre page est trop lente et ne peut maintenir le taux de rafraîchissement, le compositeur du système doit créer l’image manquante. Pour l’utilisateur·ice, cela se traduit par des animations saccadées et des barres noires sur le côté du champ de vision. Consultez le
blog TimeWarp pour en savoir plus sur la façon dont le compositeur crée ces images manquantes.
Pourquoi changer la fréquence d’images par défaut ?
Si la page de votre navigateur ne peut pas produire suffisamment de données, le système doit produire les images manquantes, ce qui augmente la charge. En réduisant la fréquence d’images, vous accordez à la page plus de temps pour produire une image. Par conséquent, le système doit inventer moins d’images manquantes, ce qui réduit la charge du système.
Inversement, si vous passez moins de temps que nécessaire sur une image, vous pouvez augmenter la fréquence d’images par seconde. Des taux de fréquence d’images plus élevés se traduisent par des expériences plus réalistes pour l’utilisateur·ice.
Les versions 16.4 et ultérieures du navigateur prennent en charge les
nouvelles API WebXR qui vous permettent d’interroger et de définir la fréquence d’images actuelle.
Pour obtenir la fréquence d’images actuelle :
function onXRAnimationFrame(time, xrFrame) {
...
if ( session.frameRate !== undefined) {
let currentFrameRate = session.frameRate;
...
}
}
Pour obtenir la liste des fréquences d’images prises en charge :
function onXRAnimationFrame(time, xrFrame) {
...
if ( session.supportedFrameRates !== undefined) {
let framerateList = session.supportedFrameRates;
...
}
}
Pour définir une fréquence d’images :
function onXRAnimationFrame(time, xrFrame) {
...
if ( session.supportedFrameRates !== undefined) {
let framerateList = session.supportedFrameRates;
session.updateTargetFrameRate( framerateList[0] ).then(
`() => console.log( "frame rate was applied" ) );`
...
}
}
Le groupe WebXR travaille à la mise en place d’un support supplémentaire afin que vous puissiez mieux contrôler si le système est surchargé ou s’il dispose d’une marge de manœuvre pour une fréquence d’images plus élevée.
D’ici-là, vous pouvez mesurer le temps entre les images. Si cela prend plus de temps que le temps d’image souhaité (c’est-à-dire plus de 11 ms pour une fréquence d’images de 90 Hz), vous pouvez supposer que vous devez définir un taux plus bas. Vous pourriez également détecter quel casque vous utilisez et régler votre application pour cet appareil.