अगर Godot में आपका कोई मौजूदा एक्सआर प्रोजेक्ट है, तो आपको नया और अलग प्रोजेक्ट शुरू किए बिना, उसमें Android XR की सुविधा जोड़ी जा सकती है. कुछ चरण सभी प्रोजेक्ट के लिए ज़रूरी होते हैं, जबकि अन्य चरण ज़रूरी नहीं होते. यह इस बात पर निर्भर करता है कि आपका प्रोजेक्ट, एक्सआर की किन सुविधाओं का इस्तेमाल करता है. हमने चरणों के साथ-साथ, Android XR की सुविधा जोड़ने वाले Godot के कई ओपन-सोर्स एक्सआर प्रोजेक्ट के लिंक भी शामिल किए हैं. साथ ही, हमने काम के पुल अनुरोध भी शामिल किए हैं, जिनसे पता चलता है कि कुछ सुविधाओं को चालू करने के लिए, किन बदलावों की ज़रूरत होती है.
सभी प्रोजेक्ट के लिए ज़रूरी चरण
यहां दिए गए विषयों में बताए गए चरणों को पूरा करें. भले ही, आपका प्रोजेक्ट एक्सआर की किसी भी तरह की सुविधाओं के साथ काम करता हो. इसके बाद, ज़रूरी नहीं वाले चरणों की सूची में बताई गई सुविधाओं की समीक्षा करें, ताकि यह पता चल सके कि आपके प्रोजेक्ट के लिए, अतिरिक्त काम करने की ज़रूरत है या नहीं.
Godot और Godot OpenXR Vendors प्लगिन को अपडेट करना
अपने प्रोजेक्ट को ज़रूरी नए वर्शन पर अपडेट करने और Android XR के लिए अपने प्रोजेक्ट की सेटिंग कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं:
- अपने Godot वर्शन को 4.6.2 या इसके बाद वाले वर्शन पर अपडेट करें. अगर आपको अपने प्रोजेक्ट के लिए ज़्यादा मदद चाहिए, तो नए वर्शन पर माइग्रेट करने से जुड़ा दस्तावेज़ देखें.
Asset Store, Asset Library या GitHub पर मौजूद डेटाबेस से, Godot OpenXR Vendors प्लगिन का 5.1 या इसके बाद वाला वर्शन डाउनलोड करें.
Android XR के लिए अपने प्रोजेक्ट की सेटिंग कॉन्फ़िगर करें:
- Android XR के लिए एक्सपोर्ट प्रीसेट जोड़ें.
- Gradle Build का इस्तेमाल करें को चालू करें.
- एक्सआर की सुविधाएं सेक्शन में, एक्सआर मोड के लिए OpenXR को चुनें. इसके बाद, AndroidXR प्लगिन चालू करें को चुनें.
हाथ ट्रैक करने की सुविधा जोड़ना
Android XR हेडसेट और एक्सआर ग्लास पर, हाथ ट्रैक करने की सुविधा, इनपुट का मुख्य तरीका है. हालांकि, इनमें कंट्रोलर भी उपलब्ध हो सकते हैं. अगर मुमकिन हो, तो आपको अपने Godot प्रोजेक्ट में हाथ ट्रैक करने की सुविधा जोड़नी चाहिए.
हाथ ट्रैक करने की सुविधा जोड़ना: प्रोजेक्ट की सेटिंग कॉन्फ़िगर करना
सबसे पहले, हाथ ट्रैक करने की सुविधा और इससे जुड़े OpenXR एक्सटेंशन को चालू करने के लिए, अपने प्रोजेक्ट की सेटिंग सेट अप करने के लिए यह तरीका अपनाएं.
- अपने प्रोजेक्ट की सेटिंग खोलें और सामान्य > एक्सआर > OpenXR पर जाएं.
एक्सटेंशन सेक्शन में, हाथ ट्रैक करने की सुविधा और हाथ के इंटरैक्शन की प्रोफ़ाइल को चुनें.
एक्सटेंशन सेक्शन में, Meta सबसेक्शन ढूंढें. इसके बाद, हाथ ट्रैक करने के लिए मेश और हाथ ट्रैक करने के लिए निशाना को चुनें.
हाथ ट्रैक करने की सुविधा जोड़ना: कंट्रोलर नोड जोड़ना और कॉन्फ़िगर करना
हाथ ट्रैक करने की सुविधा के लिए, मौजूदा XRController3D नोड में डाइनैमिक तरीके से बदलाव करने के बजाय, हाथ के मॉडल को ट्रैक करने और दिखाने के लिए कंट्रोलर नोड जोड़ें. साथ ही, Hand Tracking Aim एक्सटेंशन से मिलने वाले इनपुट को मैनेज करने के लिए भी कंट्रोलर नोड जोड़ें:
अपने
XROrigin3Dनोड में, तीन औरXRController3Dनोड जोड़ें.- एक नोड का नाम "HandTrackingLeft" रखें और ट्रैकर प्रॉपर्टी को
/user/hand_tracker/leftपर सेट करें. - दूसरे नोड का नाम "HandTrackingRight" रखें और ट्रैकर प्रॉपर्टी को
/user/hand_tracker/rightपर सेट करें. - आखिरी नोड का नाम "HandTrackingAimLeft" रखें और ट्रैकर प्रॉपर्टी को
/user/fbhandaim/leftपर सेट करें.
अगर आपके प्रोजेक्ट के ओरिजनल
XRController3Dनोड के नाम "XRController3D_left" और "XRController3D_right" थे, तो आपका सीन कुछ ऐसा दिखेगा:
- एक नोड का नाम "HandTrackingLeft" रखें और ट्रैकर प्रॉपर्टी को
HandTrackingLeft और HandTrackingRight पर मौजूद signal
tracking_changedको, उन अलग-अलग फ़ंक्शन से कनेक्ट करें जो संबंधित कंट्रोलर ट्रैकर (XRController3D_left और XRController3D_right पिछले उदाहरण में) की विज़िबिलिटी को अपडेट करते हैं.उदाहरण के लिए, HandTrackingLeft पर मौजूद सिग्नल से कनेक्ट किया गया फ़ंक्शन ऐसा दिख सकता है:
func _on_hand_tracking_left_hand_tracking_changed(tracking): $XROrigin3D/XRController3D_left.visible = not trackingहाथ ट्रैक करने वाले कंट्रोलर नोड पर, ट्रैक किए जाने पर दिखाएं प्रॉपर्टी को चालू करें.
अब आपका प्रोजेक्ट, कंट्रोलर मॉडल और हाथ ट्रैक करने वाले मॉडल के बीच विज़ुअल तरीके से बदलाव कर सकता है. यह इस बात पर निर्भर करता है कि उपयोगकर्ता, हाथ ट्रैक करने की सुविधा का इस्तेमाल कर रहा है या कंट्रोलर का.
हाथ ट्रैक करने वाले कंट्रोलर नोड में, कुछ
OpenXRFbHandTrackingMeshनोड को चाइल्ड के तौर पर जोड़ें.इन
OpenXRFbHandTrackingMeshनोड में,XRHandModifier3Dनोड को चाइल्ड के तौर पर जोड़ें. साथ ही, यह पक्का करें कि हाथ ट्रैक करने की सुविधा प्रॉपर्टी सही तरीके से सेट हो, ताकि मॉडल पर रीयल टाइम में हाथ ट्रैक करने का डेटा लागू किया जा सके.
हाथ ट्रैक करने की सुविधा जोड़ना: OpenXR ऐक्शन मैप पर, हाथ के इंटरैक्शन की प्रोफ़ाइल सेट अप करना
इसके बाद, हाथ के इंटरैक्शन की प्रोफ़ाइल, OpenXR ऐक्शन मैप पर सेट अप करें:
- एडिटर में सबसे नीचे मौजूद, OpenXR ऐक्शन मैप मेन्यू खोलें.
- सिंपल कंट्रोलर प्रोफ़ाइल मिटाएं, ताकि Galaxy XR कंट्रोलर के साथ काम करने से जुड़ी समस्याएं न हों.
- प्रोफ़ाइल जोड़ें पर क्लिक करें. इसके बाद, हाथ के इंटरैक्शन को चुनें. फिर, ठीक है पर क्लिक करें.
इस प्रोफ़ाइल को, अपनी पसंद के मुताबिक एक या एक से ज़्यादा ऐक्शन सेट पर मैप करें.
हाथ ट्रैक करने की सुविधा जोड़ना: Android XR के लिए मेन्यू जेस्चर सेट अप करना
आखिर में, Android XR के लिए मेन्यू जेस्चर लागू किया जा सकता है. इससे, प्लेयर का बायां हाथ, मेन्यू जेस्चर करने के लिए सही पोज़िशन में होने पर एक आइकॉन दिखता है. साथ ही, उपयोगकर्ता के जेस्चर करने पर मेन्यू दिखता या छिपता है. इसके लिए, पहले जोड़ा गया HandTrackingAimLeft नोड इस्तेमाल करें .
बाएं हाथ को ट्रैक करने वाले नोड में, बिलबोर्ड वाला क्वाड जोड़ें. इसमें, आपके चुने गए आइकॉन को दिखाया जाता है. इसके लिए, पहले जोड़े गए कंट्रोलर नोड में मौजूद MenuIcon नोड देखें.
HandTrackingAimLeft पर मौजूद
button_pressedऔरbutton_releasedसिग्नल को, इस तरह के फ़ंक्शन से कनेक्ट करें:@onready var menu_icon: MeshInstance3D = $XROrigin3D/HandTrackingLeft/MenuIcon func _on_hand_tracking_aim_left_button_pressed(p_name): if p_name == "menu_pressed": toggle_menu() elif p_name == "menu_gesture": if OS.has_feature("androidxr"): menu_icon.visible = true func _on_hand_tracking_aim_left_button_released(p_name): if p_name == "menu_gesture": menu_icon.visible = false
कुछ सुविधाओं के लिए ज़रूरी नहीं वाले चरण
अपने प्रोजेक्ट के लिए ज़रूरी चरण पूरे करने के बाद, यह तय करें कि आपको कुछ सुविधाओं के लिए अतिरिक्त काम करने की ज़रूरत है या नहीं. यह आपके ऐप्लिकेशन की ज़रूरतों और क्षमताओं पर निर्भर करता है. ज़रूरी नहीं वाली इन सुविधाओं के बारे में ज़्यादा जानने के लिए, यहां दिए गए सेक्शन देखें.
पिंच को बटन दबाने की तरह रजिस्टर करना
Android XR में, पिंच का इस्तेमाल कई बुनियादी सिस्टम ऐक्शन के लिए किया जाता है. जैसे, आइटम चुनना, स्क्रोल करना, विंडो को घुमाना या उसका साइज़ बदलना, और 2D और 3D स्पेस में यूज़र इंटरफ़ेस (यूआई) एलिमेंट या ऑब्जेक्ट को घुमाना. इन पैटर्न के मुताबिक काम करने और उपयोगकर्ता को एक जैसा अनुभव देने के लिए, हाथ ट्रैक करने की सुविधा का इस्तेमाल करते समय, आपके ऐप्लिकेशन को पिंच को कंट्रोलर पर बटन दबाने की तरह रजिस्टर करना चाहिए.
const PRESSED_THRESHOLD := 0.8
const RELEASED_THRESHOLD := 0.6
@onready var left_controller: XRController3D = $XROrigin/XRController3D_left
func _on_xr_controller_3d_left_input_float_changed(p_name: String, value: float):
if p_name == "pinch":
var xr_tracker = XRServer.get_tracker(left_controller.tracker)
if _left_hand_pinching:
if value < RELEASED_THRESHOLD:
_left_hand_pinching = false
xr_tracker.set_input("pinch_pressed", false)
else:
if value > PRESSED_THRESHOLD:
_left_hand_pinching = true
xr_tracker.set_input("pinch_pressed", true)
कोड के बारे में अहम बातें
- यह जांचता है कि
floatवैल्यू, तय की गई थ्रेशोल्ड से ज़्यादा है या कमXRController3Dinput_float_changedसिग्नल में. pinch_pressedनाम का वर्चुअल ऐक्शन बनाता है.
हाथ ट्रैक करने की सुविधा के साथ, एक्सआर टूल के फ़ंक्शन का इस्तेमाल करना
Godot के कई एक्सआर प्रोजेक्ट, Godot XR Tools का इस्तेमाल करते हैं. इनमें, इस पेज पर लिंक किए गए कुछ
ओपन-सोर्स प्रोजेक्ट भी शामिल हैं. एक्सआर टूल के कुछ फ़ंक्शन काम करें, इसके लिए आपको कुछ अतिरिक्त कोड की ज़रूरत होगी. जैसे, मेन्यू इंटरैक्शन के लिए FunctionPointer. इससे, उपयोगकर्ता के हाथ ट्रैक करने की सुविधा पर स्विच करने पर, यह उस ऐक्शन को बदल देगा जिसे वह ढूंढ रहा है.
const TRIGGER_POINTER_ACTION = "trigger_click"
const PINCH_POINTER_ACTION = "pinch_pressed"
@onready var func_point_left: XRToolsFunctionPointer = %FunctionPointerLeft
func _on_hand_tracking_left_tracking_changed(tracking: bool) -> void:
if tracking:
func_point_left.active_button_action = PINCH_POINTER_ACTION
else:
func_point_left.active_button_action = TRIGGER_POINTER_ACTION
कोड के बारे में अहम बातें
- यह कोड,
pinch_pressedवर्चुअल ऐक्शन पर निर्भर करता है. इसे बटन दबाने की तरह पिंच को रजिस्टर करने के लिए बनाया जा सकता है.
आर्टिफ़िशियल लोकोमोशन के साथ, हाथ ट्रैक करने की सुविधा का इस्तेमाल करना
अगर आपका प्रोजेक्ट, आर्टिफ़िशियल लोकोमोशन का इस्तेमाल करता है, तब भी हाथ ट्रैक करने की सुविधा का इस्तेमाल किया जा सकता है. उदाहरण के लिए, ऐसा मूवमेंट सिस्टम बनाया जा सकता है जिससे प्लेयर, जेस्चर की मदद से पाथ बनाकर घूम सकें. इसके अलावा, प्लेयर को हाथ ऊपर-नीचे करके तेज़ी से चलने की सुविधा दी जा सकती है. साथ ही, कूदने, चढ़ने, और ग्लाइड करने के लिए अतिरिक्त जेस्चर की सुविधा दी जा सकती है.
The Museum of All Things में, कंट्रोलर पर मौजूद थंबस्टिक का इस्तेमाल करके आर्टिफ़िशियल लोकोमोशन की सुविधा दी गई है. हाथ ट्रैक करने की सुविधा से लोकोमोशन को लागू करने के लिए, "वर्चुअल थंबस्टिक" जोड़े गए हैं. प्लेयर, हवा में पिंच करके इन्हें ट्रिगर करता है. साथ ही, जिस दिशा में थंबस्टिक को घुमाना होता है, उस दिशा में अपना हाथ घुमाता है.
इस सुविधा को लागू करने वाले पुल अनुरोध से मिली कुछ अहम जानकारी यहां दी गई है: सहायता
- पिंच का पता लगने पर,
XRVirtualThumbstickसीन इंस्टैंशिएट हो जाता है. - जब तक पिंच को दबाकर रखा जाता है, तब तक पिंच की ओरिजनल जगह से रिलेटिव दूरी और दिशा को
Vector2में बदल दिया जाता है. साथ ही, इसे वर्चुअल तरीके से, सामान्य थंबस्टिक इनपुट पर मैप कर दिया जाता है. - प्लेयर को इस इनपुट का विज़ुअल फ़ीडबैक भी दिया जाता है. इसके लिए, बिलबोर्ड वाले दो क्वाड मेश का इस्तेमाल किया जाता है. इससे थंबस्टिक की पोज़िशन दिखती है.
मौजूदा थंबस्टिक-ड्राइव वाले लोकोमोशन कोड को, कम से कम बदलावों के साथ काम करने के लिए, इसी तरह का तरीका आज़माया जा सकता है. हालांकि, हो सकता है कि आपके प्रोजेक्ट के लिए, हाथ ट्रैक करने की सुविधा के लिए कस्टम लोकोमोशन सलूशन की ज़रूरत पड़े.
पासथ्रू की सुविधा जोड़ना
अपने ऐप्लिकेशन में पासथ्रू की सुविधा जोड़ी जा सकती है, ताकि आपके उपयोगकर्ता, अपने आस-पास की असल दुनिया को देख सकें.
अपने ऐप्लिकेशन के लिए, कोड में ये बदलाव करें:
- OpenXR
XRInterfaceकेenvironment_blend_modeकोXR_ENV_BLEND_MODE_ALPHA_BLENDपर सेट करें. WorldEnvironmentनोड केbackground_modeकोBG_COLORपर सेट करें.WorldEnvironmentनोड केbackground_colorको, पूरी तरह से पारदर्शी किसी भी रंग पर सेट करें.Viewport transparent_bgप्रॉपर्टी कोtrueपर सेट करें.
लाइट एस्टिमेशन एक्सटेंशन का इस्तेमाल करना
पासथ्रू की सुविधा चालू करते समय, Android XR Light Estimation OpenXR एक्सटेंशन का इस्तेमाल करने पर विचार करें. यह एक्सटेंशन, WorldEnvironment और DirectionalLight3D की प्रॉपर्टी में बदलाव करता है, ताकि उपयोगकर्ता के असल दुनिया के एनवायरमेंट की लाइटिंग को बेहतर तरीके से एम्युलेट किया जा सके. इससे, वर्चुअल ऑब्जेक्ट, असल दुनिया की लाइटिंग की स्थितियों के साथ बेहतर तरीके से ब्लेंड हो जाते हैं. इस एक्सटेंशन को अपने प्रोजेक्ट की सेटिंग में चालू किया जा सकता है.
- अपने प्रोजेक्ट की सेटिंग खोलें और सामान्य > एक्सआर > OpenXR पर जाएं.
Androidxr सेक्शन में, लाइट एस्टिमेशन को चुनें.
अपने सीन ट्री में,
OpenXRAndroidLightEstimationनोड जोड़ें और इसे अपने सीन केWorldEnvironmentऔरDirectionalLight3Dसे कनेक्ट करें.
उदाहरण: पासथ्रू और लाइट एस्टिमेशन की सुविधा चालू या बंद करना
यहां दिया गया कोड, पासथ्रू और लाइट एस्टिमेशन की सुविधा को चालू या बंद करता है:
@onready var world_environment = $WorldEnvironment
@onready var directional_light = $DirectionalLight3D
@onready var directional_light_orig_transform: Transform3D = directional_light.transform
func set_passthrough_enabled(p_enabled: bool) -> void:
var xr_interface = XRServer.find_interface("OpenXR")
if xr_interface == null:
return
var supported_blend_modes = xr_interface.get_supported_environment_blend_modes()
if not supported_blend_modes.has(XRInterface.XR_ENV_BLEND_MODE_ALPHA_BLEND):
return
# Passthrough
if p_enabled:
xr_interface.set_play_area_mode(XRInterface.XR_PLAY_AREA_STAGE)
xr_interface.environment_blend_mode = XRInterface.XR_ENV_BLEND_MODE_ALPHA_BLEND
world_environment.environment.background_mode = Environment.BG_COLOR
world_environment.environment.background_color = Color(0.0, 0.0, 0.0, 0.0)
get_viewport().transparent_bg = true
else:
xr_interface.set_play_area_mode(XRInterface.XR_PLAY_AREA_ROOMSCALE)
xr_interface.environment_blend_mode = XRInterface.XR_ENV_BLEND_MODE_OPAQUE
world_environment.environment.background_mode = Environment.BG_SKY
get_viewport().transparent_bg = false
# Light Estimation
if OS.has_feature("androidxr"):
var light_estimation = Engine.get_singleton("OpenXRAndroidLightEstimationExtension")
if p_enabled and light_estimation.is_light_estimation_supported():
light_estimation.start_light_estimation()
elif light_estimation.is_light_estimation_started():
light_estimation.stop_light_estimation()
directional_light.transform = directional_light_orig_transform
कोड के बारे में अहम बातें
- लाइट एस्टिमेशन की सुविधा बंद करते समय,
DirectionalLight3Dकी ओरिजनल दिशा को मैन्युअल तरीके से वापस लाना ज़रूरी है. - पासथ्रू और लाइट एस्टिमेशन की सुविधा का इस्तेमाल करने वाले प्रोजेक्ट का पूरा उदाहरण देखने के लिए, GitLab पर Expedition to Blobotopia देखें.