वेबएक्सआर हिट टेस्ट रिझल्ट्स आणि रे कास्टिंग प्रोसेसिंगचा सखोल अभ्यास, जो वेबवर इंटरॅक्टिव्ह आणि अंतर्ज्ञानी ऑगमेंटेड आणि व्हर्च्युअल रिॲलिटी अनुभव तयार करण्यासाठी महत्त्वाचा आहे.
वेबएक्सआर हिट टेस्ट रिझल्ट: इमर्सिव्ह अनुभवांसाठी रे कास्टिंग रिझल्ट प्रोसेसिंग
वेबएक्सआर डिव्हाइस एपीआय (WebXR Device API) ब्राउझरमध्ये थेट इमर्सिव्ह ऑगमेंटेड रिॲलिटी (AR) आणि व्हर्च्युअल रिॲलिटी (VR) अनुभव तयार करण्यासाठी रोमांचक संधी उपलब्ध करून देते. इंटरॅक्टिव्ह वेबएक्सआर ॲप्लिकेशन्स तयार करण्याच्या मूलभूत पैलूंपैकी एक म्हणजे हिट टेस्ट रिझल्ट्स समजून घेणे आणि त्यांचा प्रभावीपणे वापर करणे. हा ब्लॉग पोस्ट रे कास्टिंगद्वारे मिळवलेल्या हिट टेस्ट रिझल्ट्सवर प्रक्रिया करण्यासाठी एक सर्वसमावेशक मार्गदर्शक प्रदान करतो, ज्यामुळे तुम्ही तुमच्या वेबएक्सआर सीनमध्ये अंतर्ज्ञानी आणि आकर्षक वापरकर्ता संवाद (user interactions) तयार करू शकता.
रे कास्टिंग म्हणजे काय आणि वेबएक्सआरमध्ये ते का महत्त्वाचे आहे?
रे कास्टिंग हे एक तंत्र आहे जे एका विशिष्ट बिंदूपासून आणि दिशेने निघणारी किरण (ray), 3D सीनमधील वस्तूंना छेदते की नाही हे निर्धारित करण्यासाठी वापरले जाते. वेबएक्सआरमध्ये, रे कास्टिंगचा वापर सामान्यतः वापरकर्त्याच्या नजरेचे किंवा व्हर्च्युअल वस्तूच्या मार्गाचे अनुकरण करण्यासाठी केला जातो. जेव्हा किरण वास्तविक जगाच्या पृष्ठभागाशी (AR मध्ये) किंवा व्हर्च्युअल वस्तूशी (VR मध्ये) छेदते, तेव्हा एक हिट टेस्ट रिझल्ट तयार होतो.
हिट टेस्ट रिझल्ट्स अनेक कारणांसाठी महत्त्वाचे आहेत:
- व्हर्च्युअल वस्तूंची जागा निश्चित करणे: एआरमध्ये, हिट टेस्ट तुम्हाला वास्तविक जगातील पृष्ठभागांवर, जसे की टेबल, मजले किंवा भिंतींवर व्हर्च्युअल वस्तू अचूकपणे ठेवण्याची परवानगी देतात.
- वापरकर्ता संवाद: वापरकर्ता कोठे पाहत आहे किंवा निर्देश करीत आहे याचा मागोवा घेऊन, हिट टेस्ट व्हर्च्युअल वस्तूंशी संवाद साधण्यास सक्षम करतात, जसे की त्यांना निवडणे, हाताळणे किंवा सक्रिय करणे.
- नेव्हिगेशन: व्हीआर वातावरणात, हिट टेस्टचा वापर नेव्हिगेशन सिस्टम लागू करण्यासाठी केला जाऊ शकतो, ज्यामुळे वापरकर्त्यांना विशिष्ट ठिकाणी निर्देश करून सीनमध्ये टेलिपोर्ट किंवा फिरता येते.
- टक्कर ओळख (Collision Detection): हिट टेस्टचा वापर मूलभूत टक्कर ओळखण्यासाठी केला जाऊ शकतो, ज्यामुळे एखादी व्हर्च्युअल वस्तू दुसऱ्या वस्तूशी किंवा वास्तविक जगाशी कधी टक्कर घेते हे निर्धारित करता येते.
वेबएक्सआर हिट टेस्ट एपीआय समजून घेणे
वेबएक्सआर हिट टेस्ट एपीआय रे कास्टिंग करण्यासाठी आणि हिट टेस्ट रिझल्ट्स मिळविण्यासाठी आवश्यक साधने प्रदान करते. येथे मुख्य संकल्पना आणि फंक्शन्सचे विघटन आहे:
XRRay
एक XRRay 3D स्पेसमध्ये एका किरणाचे प्रतिनिधित्व करते. ते एका मूळ बिंदू (origin point) आणि एका दिशा वेक्टरद्वारे (direction vector) परिभाषित केले जाते. तुम्ही XRFrame.getPose() पद्धत वापरून एक XRRay तयार करू शकता, जे एका ट्रॅक केलेल्या इनपुट स्रोताचे (उदा. वापरकर्त्याचे डोके, हँड कंट्रोलर) पोज परत करते. पोजमधून, तुम्ही किरणाचे मूळ आणि दिशा मिळवू शकता.
XRHitTestSource
एक XRHitTestSource हिट टेस्ट रिझल्ट्सच्या स्रोताचे प्रतिनिधित्व करते. तुम्ही XRSession.requestHitTestSource() किंवा XRSession.requestHitTestSourceForTransientInput() पद्धत वापरून हिट टेस्ट स्रोत तयार करता. पहिली पद्धत सामान्यतः एका स्थिर स्रोतावर आधारित सतत हिट टेस्टिंगसाठी वापरली जाते, जसे की वापरकर्त्याच्या डोक्याची स्थिती, तर दुसरी पद्धत क्षणिक इनपुट इव्हेंट्ससाठी आहे, जसे की बटण दाबणे किंवा हावभाव.
XRHitTestResult
एक XRHitTestResult किरण आणि पृष्ठभाग यांच्यातील एका छेदनबिंदूचे प्रतिनिधित्व करते. यात छेदनबिंदूची माहिती असते, जसे की किरणाच्या मूळपासून हिट पॉइंटपर्यंतचे अंतर आणि सीनच्या संदर्भ जागेत (reference space) हिट पॉइंटचे पोज.
XRHitTestResult.getPose()
ही पद्धत हिट पॉइंटचे XRPose परत करते. पोजमध्ये हिट पॉइंटची स्थिती आणि दिशा असते, ज्याचा वापर व्हर्च्युअल वस्तू ठेवण्यासाठी किंवा इतर रूपांतरणे (transformations) करण्यासाठी केला जाऊ शकतो.
हिट टेस्ट रिझल्ट्सवर प्रक्रिया करणे: एक चरण-दर-चरण मार्गदर्शक
चला, वेबएक्सआर ॲप्लिकेशनमध्ये हिट टेस्ट रिझल्ट्स मिळवण्याच्या आणि त्यावर प्रक्रिया करण्याच्या प्रक्रियेतून जाऊया. हे उदाहरण असे गृहीत धरते की तुम्ही three.js किंवा Babylon.js सारखी रेंडरिंग लायब्ररी वापरत आहात.
1. हिट टेस्ट स्रोताची विनंती करणे
प्रथम, तुम्हाला XRSession मधून हिट टेस्ट स्रोताची विनंती करणे आवश्यक आहे. हे सामान्यतः सेशन सुरू झाल्यानंतर केले जाते. तुम्हाला ज्या कोऑर्डिनेट सिस्टममध्ये हिट टेस्ट रिझल्ट्स परत हवे आहेत ते निर्दिष्ट करावे लागेल. उदाहरणार्थ:
let xrHitTestSource = null;
async function createHitTestSource(xrSession) {
try {
xrHitTestSource = await xrSession.requestHitTestSource({
space: xrSession.viewerSpace // Or xrSession.local
});
} catch (error) {
console.error("Failed to create hit test source: ", error);
}
}
// Call this function after the XR session has started
// createHitTestSource(xrSession);
स्पष्टीकरण:
xrSession.requestHitTestSource(): हे फंक्शन एक्सआर सेशनमधून हिट टेस्ट स्रोताची विनंती करते.{ space: xrSession.viewerSpace }: हे कोऑर्डिनेट सिस्टम निर्दिष्ट करते ज्यामध्ये हिट टेस्ट रिझल्ट्स परत केले जातील.viewerSpaceहे दर्शकाच्या स्थितीच्या सापेक्ष आहे, तरlocalहे एक्सआर मूळच्या सापेक्ष आहे. तुम्ही मजल्याच्या सापेक्ष ट्रॅकिंगसाठीlocalFloorदेखील वापरू शकता.- त्रुटी हाताळणी (Error handling):
try...catchब्लॉक हे सुनिश्चित करतो की हिट टेस्ट स्रोत तयार करताना येणाऱ्या त्रुटी पकडल्या जातात आणि लॉग केल्या जातात.
2. ॲनिमेशन लूपमध्ये हिट टेस्ट करणे
तुमच्या ॲनिमेशन लूपमध्ये (प्रत्येक फ्रेम रेंडर करणारे फंक्शन), तुम्हाला XRFrame.getHitTestResults() पद्धत वापरून हिट टेस्ट करणे आवश्यक आहे. ही पद्धत XRHitTestResult ऑब्जेक्ट्सची एक ॲरे परत करते, जी सीनमध्ये आढळलेल्या सर्व छेदनबिंदूंचे प्रतिनिधित्व करते.
function onXRFrame(time, frame) {
const session = frame.session;
session.requestAnimationFrame(onXRFrame);
const pose = frame.getViewerPose(xrSession.referenceSpace);
if (pose) {
if (xrHitTestSource) {
const hitTestResults = frame.getHitTestResults(xrHitTestSource);
if (hitTestResults.length > 0) {
processHitTestResults(hitTestResults);
}
}
}
renderer.render(scene, camera);
}
स्पष्टीकरण:
frame.getViewerPose(xrSession.referenceSpace): दर्शकाचे (हेडसेट) पोज मिळवते. दर्शक कोठे आहे आणि कोठे पाहत आहे हे जाणून घेण्यासाठी हे आवश्यक आहे.frame.getHitTestResults(xrHitTestSource): पूर्वी तयार केलेल्या हिट टेस्ट स्रोताचा वापर करून हिट टेस्ट करते.hitTestResults.length > 0: कोणतेही छेदनबिंदू सापडले आहेत की नाही हे तपासते.
3. हिट टेस्ट रिझल्ट्सवर प्रक्रिया करणे
processHitTestResults() फंक्शनमध्ये तुम्ही हिट टेस्टच्या रिझल्ट्सवर प्रक्रिया कराल. यात सामान्यतः हिट पॉइंटच्या पोजवर आधारित व्हर्च्युअल वस्तूची स्थिती आणि दिशा अद्यतनित करणे समाविष्ट असते.
function processHitTestResults(hitTestResults) {
const hit = hitTestResults[0]; // Get the first hit result
const hitPose = hit.getPose(xrSession.referenceSpace);
if (hitPose) {
// Update the position and orientation of a virtual object
virtualObject.position.set(hitPose.transform.position.x, hitPose.transform.position.y, hitPose.transform.position.z);
virtualObject.quaternion.set(hitPose.transform.orientation.x, hitPose.transform.orientation.y, hitPose.transform.orientation.z, hitPose.transform.orientation.w);
// Show visual feedback (e.g., a circle) at the hit point
hitMarker.position.set(hitPose.transform.position.x, hitPose.transform.position.y, hitPose.transform.position.z);
hitMarker.quaternion.set(hitPose.transform.orientation.x, hitPose.transform.orientation.y, hitPose.transform.orientation.z, hitPose.transform.orientation.w);
hitMarker.visible = true;
} else {
hitMarker.visible = false;
}
}
स्पष्टीकरण:
hitTestResults[0]: पहिला हिट टेस्ट रिझल्ट मिळवते. जर एकापेक्षा जास्त छेदनबिंदू शक्य असतील, तर तुम्हाला संपूर्ण ॲरेमधून जाऊन तुमच्या ॲप्लिकेशनच्या तर्कानुसार सर्वात योग्य रिझल्ट निवडावा लागेल.hit.getPose(xrSession.referenceSpace): निर्दिष्ट संदर्भ जागेत हिट पॉइंटचे पोज मिळवते.virtualObject.position.set(...)आणिvirtualObject.quaternion.set(...): व्हर्च्युअल वस्तूची (उदा. three.jsMesh) स्थिती आणि रोटेशन (क्वाटरनियन) हिट पॉइंटच्या पोजशी जुळवण्यासाठी अद्यतनित करते.- व्हिज्युअल फीडबॅक: उदाहरणामध्ये हिट पॉइंटवर व्हिज्युअल फीडबॅक दर्शविण्यासाठी कोड देखील समाविष्ट आहे, जसे की एक वर्तुळ किंवा एक साधा मार्कर, ज्यामुळे वापरकर्त्याला ते सीनमध्ये कोठे संवाद साधत आहेत हे समजण्यास मदत होते.
प्रगत हिट टेस्टिंग तंत्र
वरील मूलभूत उदाहरणापलीकडे, अशी अनेक प्रगत तंत्रे आहेत जी तुम्ही तुमच्या हिट टेस्टिंग अंमलबजावणीला वाढविण्यासाठी वापरू शकता:
क्षणिक इनपुटसह हिट टेस्टिंग
क्षणिक इनपुटद्वारे सुरू होणाऱ्या संवादांसाठी, जसे की बटण दाबणे किंवा हाताचे हावभाव, तुम्ही XRSession.requestHitTestSourceForTransientInput() पद्धत वापरू शकता. ही पद्धत एक हिट टेस्ट स्रोत तयार करते जो एकाच इनपुट इव्हेंटसाठी विशिष्ट असतो. हे सतत हिट टेस्टिंगवर आधारित अनपेक्षित संवाद टाळण्यासाठी उपयुक्त आहे.
async function handleSelect(event) {
try {
const frame = event.frame;
const inputSource = event.inputSource;
const hitTestResults = await frame.getHitTestResultsForTransientInput(inputSource, {
profile: 'generic-touchscreen', // Or the appropriate input profile
space: xrSession.viewerSpace
});
if (hitTestResults.length > 0) {
processHitTestResults(hitTestResults);
}
} catch (error) {
console.error("Error during transient hit test: ", error);
}
}
// Attach this function to your input select event listener
// xrSession.addEventListener('select', handleSelect);
हिट टेस्ट रिझल्ट्स फिल्टर करणे
काही प्रकरणांमध्ये, तुम्हाला विशिष्ट निकषांवर आधारित हिट टेस्ट रिझल्ट्स फिल्टर करायचे असतील, जसे की किरणाच्या मूळपासूनचे अंतर किंवा छेदलेल्या पृष्ठभागाचा प्रकार. तुम्ही XRHitTestResult ॲरे मिळवल्यानंतर ते स्वतः फिल्टर करून हे साध्य करू शकता.
function processHitTestResults(hitTestResults) {
const filteredResults = hitTestResults.filter(result => {
const hitPose = result.getPose(xrSession.referenceSpace);
if (!hitPose) return false; // Skip if no pose
const distance = Math.sqrt(
Math.pow(hitPose.transform.position.x - camera.position.x, 2) +
Math.pow(hitPose.transform.position.y - camera.position.y, 2) +
Math.pow(hitPose.transform.position.z - camera.position.z, 2)
);
return distance < 2; // Only consider hits within 2 meters
});
if (filteredResults.length > 0) {
const hit = filteredResults[0];
const hitPose = hit.getPose(xrSession.referenceSpace);
if (hitPose) {
// Update object position based on the filtered result
virtualObject.position.set(hitPose.transform.position.x, hitPose.transform.position.y, hitPose.transform.position.z);
virtualObject.quaternion.set(hitPose.transform.orientation.x, hitPose.transform.orientation.y, hitPose.transform.orientation.z, hitPose.transform.orientation.w);
}
}
}
वेगवेगळ्या संदर्भ जागा वापरणे
संदर्भ जागेची निवड (viewerSpace, local, localFloor, किंवा इतर कस्टम जागा) हिट टेस्ट रिझल्ट्सचा अर्थ कसा लावला जातो यावर लक्षणीय परिणाम करते. खालील गोष्टींचा विचार करा:
- viewerSpace: दर्शकाच्या स्थितीच्या सापेक्ष रिझल्ट्स प्रदान करते. हे वापरकर्त्याच्या नजरेशी थेट जोडलेले संवाद तयार करण्यासाठी उपयुक्त आहे.
- local: एक्सआर मूळच्या (एक्सआर सेशनचा प्रारंभ बिंदू) सापेक्ष रिझल्ट्स प्रदान करते. हे अशा अनुभवांसाठी योग्य आहे जिथे वस्तू भौतिक वातावरणात स्थिर राहतात.
- localFloor:
localसारखेच, परंतु Y-अक्ष मजल्याशी संरेखित आहे. हे मजल्यावर वस्तू ठेवण्याची प्रक्रिया सोपी करते.
तुमच्या ॲप्लिकेशनच्या आवश्यकतांशी सर्वोत्तम जुळणारी संदर्भ जागा निवडा. वेगवेगळ्या संदर्भ जागांच्या वर्तणूक आणि मर्यादा समजून घेण्यासाठी त्यांच्यासोबत प्रयोग करा.
हिट टेस्टिंगसाठी ऑप्टिमायझेशन स्ट्रॅटेजी
हिट टेस्टिंग ही एक गणनात्मकदृष्ट्या गहन प्रक्रिया असू शकते, विशेषतः गुंतागुंतीच्या सीनमध्ये. येथे काही ऑप्टिमायझेशन स्ट्रॅटेजी आहेत ज्यांचा विचार करावा:
- हिट टेस्टची वारंवारता मर्यादित करा: प्रत्येक फ्रेममध्ये करण्याऐवजी, फक्त आवश्यक असेल तेव्हाच हिट टेस्ट करा. उदाहरणार्थ, जेव्हा वापरकर्ता सीनशी सक्रियपणे संवाद साधत असेल तेव्हाच तुम्ही हिट टेस्ट करू शकता.
- बाउंडिंग व्हॉल्यूम हायरार्की (BVH) वापरा: जर तुम्ही मोठ्या संख्येने वस्तूंच्या विरोधात हिट टेस्ट करत असाल, तर छेदनबिंदूंच्या गणनेला गती देण्यासाठी BVH वापरण्याचा विचार करा. three.js आणि Babylon.js सारख्या लायब्ररीमध्ये अंगभूत BVH अंमलबजावणी उपलब्ध आहे.
- स्थानिक विभाजन (Spatial Partitioning): सीनला लहान प्रदेशांमध्ये विभाजित करा आणि फक्त त्या प्रदेशांमध्येच हिट टेस्ट करा ज्यात छेदनबिंदू असण्याची शक्यता आहे. यामुळे तपासल्या जाणाऱ्या वस्तूंची संख्या लक्षणीयरीत्या कमी होऊ शकते.
- पॉलिगॉनची संख्या कमी करा: तुमच्या मॉडेल्सची भूमिती सोपी करा जेणेकरून तपासल्या जाणाऱ्या पॉलिगॉनची संख्या कमी होईल. यामुळे कार्यक्षमता सुधारू शकते, विशेषतः मोबाइल डिव्हाइसेसवर.
- वेबवर्कर (WebWorker): हिट टेस्ट प्रक्रिया मुख्य थ्रेडला लॉक करत नाही याची खात्री करण्यासाठी गणना वेब वर्करकडे ऑफलोड करा.
क्रॉस-प्लॅटफॉर्म विचार
वेबएक्सआरचे उद्दिष्ट क्रॉस-प्लॅटफॉर्म असणे आहे, परंतु वेगवेगळ्या डिव्हाइसेस आणि ब्राउझरमध्ये वर्तणुकीत सूक्ष्म फरक असू शकतात. खालील गोष्टी लक्षात ठेवा:
- डिव्हाइस क्षमता: सर्व डिव्हाइसेस सर्व वेबएक्सआर वैशिष्ट्यांना समर्थन देत नाहीत. कोणती वैशिष्ट्ये उपलब्ध आहेत हे निर्धारित करण्यासाठी वैशिष्ट्य शोध (feature detection) वापरा आणि त्यानुसार तुमचे ॲप्लिकेशन जुळवून घ्या.
- इनपुट प्रोफाइल: वेगवेगळे डिव्हाइसेस वेगवेगळे इनपुट प्रोफाइल वापरू शकतात (उदा. जेनेरिक-टचस्क्रीन, हँड-ट्रॅकिंग, गेमपॅड). तुमचे ॲप्लिकेशन एकाधिक इनपुट प्रोफाइलना समर्थन देते आणि योग्य फॉलबॅक यंत्रणा प्रदान करते याची खात्री करा.
- कार्यक्षमता: वेगवेगळ्या डिव्हाइसेसवर कार्यक्षमता लक्षणीयरीत्या बदलू शकते. तुम्ही समर्थन देण्याची योजना असलेल्या सर्वात कमी-एंड डिव्हाइसेससाठी तुमचे ॲप्लिकेशन ऑप्टिमाइझ करा.
- ब्राउझर सुसंगतता: तुमचे ॲप Chrome, Firefox आणि Edge सारख्या प्रमुख ब्राउझरवर तपासले आहे आणि कार्य करते याची खात्री करा.
हिट टेस्टिंग वापरणाऱ्या वेबएक्सआर ॲप्लिकेशन्सची जागतिक उदाहरणे
येथे काही वेबएक्सआर ॲप्लिकेशन्सची उदाहरणे आहेत जी आकर्षक आणि अंतर्ज्ञानी वापरकर्ता अनुभव तयार करण्यासाठी हिट टेस्टिंगचा प्रभावीपणे वापर करतात:
- IKEA Place (स्वीडन): वापरकर्त्यांना AR वापरून त्यांच्या घरात IKEA फर्निचर व्हर्च्युअली ठेवण्याची परवानगी देते. फर्निचरला मजल्यावर आणि इतर पृष्ठभागांवर अचूकपणे ठेवण्यासाठी हिट टेस्टिंगचा वापर केला जातो.
- Sketchfab AR (फ्रान्स): वापरकर्त्यांना Sketchfab मधील 3D मॉडेल्स AR मध्ये पाहण्यास सक्षम करते. मॉडेल्सना वास्तविक जगात ठेवण्यासाठी हिट टेस्टिंगचा वापर केला जातो.
- ऑगमेंटेड इमेजेस (विविध): अनेक AR ॲप्लिकेशन्स व्हर्च्युअल सामग्रीला वास्तविक जगातील विशिष्ट प्रतिमा किंवा मार्करशी जोडण्यासाठी हिट टेस्टिंगसह इमेज ट्रॅकिंग वापरतात.
- वेबएक्सआर गेम्स (जागतिक): वेबएक्सआर वापरून असंख्य गेम्स विकसित केले जात आहेत, त्यापैकी बरेच गेम्स वस्तूंची जागा निश्चित करणे, संवाद आणि नेव्हिगेशनसाठी हिट टेस्टिंगवर अवलंबून आहेत.
- व्हर्च्युअल टुर्स (जागतिक): ठिकाणे, संग्रहालये किंवा मालमत्तेचे इमर्सिव्ह टुर्स अनेकदा वापरकर्ता नेव्हिगेशन आणि व्हर्च्युअल वातावरणातील इंटरॅक्टिव्ह घटकांसाठी हिट टेस्टिंगचा वापर करतात.
निष्कर्ष
वेबवर आकर्षक आणि अंतर्ज्ञानी AR आणि VR अनुभव तयार करण्यासाठी वेबएक्सआर हिट टेस्ट रिझल्ट्स आणि रे कास्टिंग प्रोसेसिंगमध्ये प्रभुत्व मिळवणे आवश्यक आहे. या ब्लॉग पोस्टमध्ये वर्णन केलेल्या मूलभूत संकल्पना समजून घेऊन आणि तंत्रे लागू करून, तुम्ही इमर्सिव्ह ॲप्लिकेशन्स तयार करू शकता जे व्हर्च्युअल आणि वास्तविक जगाला अखंडपणे मिसळतात, किंवा नैसर्गिक आणि अंतर्ज्ञानी वापरकर्ता संवादांसह आकर्षक व्हर्च्युअल वातावरण तयार करू शकता. कार्यक्षमतेसाठी तुमची हिट टेस्टिंग अंमलबजावणी ऑप्टिमाइझ करण्याचे लक्षात ठेवा आणि सर्व वापरकर्त्यांसाठी एक सुरळीत अनुभव सुनिश्चित करण्यासाठी क्रॉस-प्लॅटफॉर्म सुसंगततेचा विचार करा. जसजसा वेबएक्सआर इकोसिस्टम विकसित होत राहील, तसतसे हिट टेस्टिंग एपीआयमध्ये आणखी प्रगती आणि सुधारणांची अपेक्षा करा, ज्यामुळे इमर्सिव्ह वेब डेव्हलपमेंटसाठी आणखी सर्जनशील शक्यता उघडतील. सर्वात अद्ययावत माहितीसाठी नेहमी नवीनतम वेबएक्सआर स्पेसिफिकेशन्स आणि ब्राउझर डॉक्युमेंटेशनचा सल्ला घ्या.