{ } { }

Jetpack SceneCore

3D कॉन्टेंट की मदद से, Android XR सीन ग्राफ़ बनाएं और उसमें बदलाव करें.
नया अपडेट रिलीज़ किया गया जांचा और परखा हुआ वर्शन रिलीज़ कैंडिडेट बीटा रिलीज़ ऐल्फ़ा रिलीज़
12 फ़रवरी, 2025 - - - 1.0.0-alpha02

डिपेंडेंसी का एलान करना

XR SceneCore पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.

अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:

ग्रूवी

dependencies {
    implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha01"
    // Required for Java
    implementation "com.google.guava:listenableFuture:1.0"
    // Required for Kotlin
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0"

    // Use to write unit tests
    testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha01"
}

Kotlin

dependencies {
    implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha01")
    // Required for Java
    implementation("com.google.guava:listenableFuture:1.0")
    // Required for Kotlin
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0")

    // Use to write unit tests
    testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha01")
}

डिपेंडेंसी के बारे में ज़्यादा जानने के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.

सुझाव/राय दें या शिकायत करें

आपके सुझाव, शिकायत या राय से हमें Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या इस लाइब्रेरी को बेहतर बनाने के लिए आपके पास कोई सुझाव है, तो हमें बताएं. नई लाइब्रेरी बनाने से पहले, कृपया इस लाइब्रेरी में मौजूद मौजूदा समस्याओं पर एक नज़र डालें. किसी मौजूदा समस्या पर अपना वोट जोड़ने के लिए, स्टार बटन पर क्लिक करें.

नई समस्या बनाना

ज़्यादा जानकारी के लिए, समस्या ट्रैकर का दस्तावेज़ देखें.

संस्करण 1.0

वर्शन 1.0.0-alpha02

12 फ़रवरी, 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha02 और androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 रिलीज़ हो गए हैं. वर्शन 1.0.0-alpha02 में ये कमिट शामिल हैं.

1.0.0-alpha02 से पहले बनाए गए ऐप्लिकेशन पर असर डालने वाला अहम बदलाव

  • फ़ैक्ट्री मेथड को Session क्लास से हटाकर, हर टाइप के लिए एक साथ काम करने वाले मेथड में ले जाया गया है:
    • Session.createActivityPanelEntity(Dimensions, String, Activity, Pose) को मिटा दिया गया है और ActivityPanelEntity.create(Session, Dimensions, String, Pose) से बदल दिया गया है
    • Session.createAnchorEntity(Anchor) को मिटा दिया गया है और AnchorEntity.create(Session, Anchor) से बदल दिया गया है
    • Session.createAnchorEntity(Dimensions, Int, Int, Duration) को मिटा दिया गया है और AnchorEntity.create(Session, Dimensions, Int, Int, Duration) से बदल दिया गया है
    • Session.createEntity(String, Pose) को मिटा दिया गया है और ContentlessEntity.create(Session, String, Pose) से बदल दिया गया है
    • Session.createExrImageResource(String) को मिटा दिया गया है और ExrImage.create(Session, String) से बदल दिया गया है
    • Session.createGltfEntity(GltfModel, Pose) को मिटा दिया गया है और GltfModelEntity.create(Session, GltfModel, Pose) से बदल दिया गया है
    • Session.createGltfModelResource(String) को मिटा दिया गया है और GltfModel.create(Session, String) से बदल दिया गया है
    • Session.createInteractableComponent(Executor, InputEventListener) को मिटा दिया गया है और InteractableComponent.create(Session, Executor, InputEventListener) से बदल दिया गया है
    • Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean) को मिटा दिया गया है और MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean) से बदल दिया गया है
    • Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose) को मिटा दिया गया है और PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose) से बदल दिया गया है
    • Session.createResizableComponent(Dimensions, Dimensions) को मिटा दिया गया है और ResizableComponent.create(Session, Dimensions, Dimensions) से बदल दिया गया है
    • Session.createStereoSurfaceEntity(Int, Dimensions, Pose) को मिटा दिया गया है और StereoSurface.create(Session, Int, Dimensions, Pose) से बदल दिया गया है
  • बंद किए गए ये तरीके हटा दिए गए हैं:
    • Session.canEmbedActivityPanel(Activity) को मिटा दिया गया है. इसके बजाय, getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY) का इस्तेमाल करें.
    • Session.hasSpatialCapability(Int) को मिटा दिया गया है. getSpatialCapabilities() को getSpatialCapabilities().hasCapability() से बदल दिया गया है, क्योंकि getSpatialCapabilities() एक SpatialCapabilities ऑब्जेक्ट दिखाता है. getSpatialCapabilities().hasCapability() का इस्तेमाल, स्पेस की सुविधाओं की मौजूदगी की जांच करने के लिए, अलग-अलग कैटगरी में किया जाता है.
    • Session.requestFullSpaceMode() को मिटा दिया गया है और SpatialEnvironment.requestFullSpaceMode() से बदल दिया गया है
    • Session.requestHomeSpaceMode() को मिटा दिया गया है और SpatialEnvironment.requestHomeSpaceMode() से बदल दिया गया है
  • Session.setFullSpaceMode(Bundle) और Session.setFullSpaceModeWithEnvironmentInherited(Bundle) को एक्सटेंशन फ़ंक्शन में ले जाया गया है. डेवलपर फ़ाइलों को ऐक्सेस करने के लिए, नए इंपोर्ट जोड़ने होंगे:
    • import androidx.xr.scenecore.setFullSpaceMode
    • import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
  • Session.setPreferredAspectRatio(Activity, Float) को एक्सटेंशन फ़ंक्शन में ले जाया गया है. डेवलपर फ़ाइलों को ऐक्सेस करने के लिए, उन्हें नया इंपोर्ट जोड़ना होगा:
    • import androidx.xr.scenecore.setPreferredAspectRatio
  • Session.getEntitiesOfType(Class<out T>) और Session.getEntityForRtEntity(RtEntity) को एक्सटेंशन फ़ंक्शन में ले जाया गया है. डेवलपर फ़ाइलों को ऐक्सेस करने के लिए, नए इंपोर्ट जोड़ने होंगे:
    • import androidx.xr.scenecore.getEntitiesOfType
    • import androidx.xr.scenecore.getEntityForRtEntity
  • Session.unpersistAnchor(Anchor) को मिटा दिया गया है
  • Session.createPersistedAnchorEntity(UUID) को मिटा दिया गया है

ऐसी समस्याएं जिनकी जानकारी पहले से है

  • ऐसा हो सकता है कि PanelEntity.setCornerRadius() और ActivityPanelEntity.setCornerRadius() तब तक लागू न हों, जब तक पैनल को अगली बार किसी दूसरी जगह पर नहीं ले जाया जाता. पैनल को उसकी मौजूदा जगह पर ले जाकर, इस समस्या को कम किया जा सकता है
  • जब ActivitySpace पर BoundsChanged को कॉल किया जाता है, तो हो सकता है कि कुछ ActivityPose सही तरीके से अपडेट न हुए हों. यह ActivitySpace को OnSpaceUpdated कॉल के बाद अपडेट हो जाएगा

ब्रेकिंग और व्यवहार में बदलाव

  • अगर पैनल की चौड़ाई या ऊंचाई 32dp से कम है, तो PanelEntity और ActivityPanelEntity के कोने की त्रिज्या डिफ़ॉल्ट रूप से 32dp या उससे कम होगी

नए एपीआई और सुविधाएं

  • StereoSurface.CanvasShape की सुविधा जोड़ी गई है. इसकी मदद से, इमर्सिव मीडिया को रेंडर करने के लिए Spherical और Hemispherical कैनवस बनाए जा सकते हैं.
  • StereoSurfaceEntity.create() अब CanvasShape पैरामीटर स्वीकार करता है. (फ़िलहाल, इस पैरामीटर को अनदेखा किया जाता है, लेकिन आने वाले वर्शन में इसका इस्तेमाल किया जाएगा)
  • StereoSurfaceEntity.create() अब Dimensions पैरामीटर नहीं लेता. ऐप्लिकेशन को CanvasShape सेट करके, कैनवस का साइज़ कंट्रोल करना चाहिए
  • StereoSurfaceEntity में CanvasShape सदस्य है, जिसे डाइनैमिक तौर पर सेट किया जा सकता है.
  • StereoSurfaceEntity.dimensions अब रीड-ओनली प्रॉपर्टी है. डाइमेंशन बदलने के लिए, ऐप्लिकेशन को CanvasShape सेट करना चाहिए.
  • StereoSurfaceEntity की मदद से, अब निर्माण के बाद StereoMode को फिर से सेट किया जा सकता है.

दूसरे बदलाव

  • कंपाइल के समय के लिए, minSDK को 24 पर सेट किया गया है. सभी Jetpack XR API के लिए, रनटाइम के दौरान एपीआई 34 की ज़रूरत होती है.
  • SceneCore की सेशन फ़ैक्ट्री (Session.create), अब SCENE_UNDERSTANDING की अनुमति पाने के लिए इंटेंट लॉन्च नहीं करती. इसके बजाय, क्लाइंट ऐप्लिकेशन को ऐंकर बनाने की कोशिश करने से पहले, उपयोगकर्ता से साफ़ तौर पर अनुमतियों का अनुरोध करना होगा. अगर उपयोगकर्ता ने अनुमति नहीं दी है, तो ऐंकर नहीं बनाया जा सकेगा.

गड़बड़ियां ठीक की गईं

  • getActivitySpacePose() को ठीक कर दिया गया है, ताकि ActivitySpace स्केल का हिसाब लगाया जा सके. इसके लिए, अनुवाद की वैल्यू को स्केल किए गए मीटर में दिखाया जाएगा, न कि बिना स्केल वाले मीटर में. जब सोर्स या डेस्टिनेशन में ActivitySpace शामिल होता है, तो transformPoseTo अब निर्देशांक में हुए बदलावों का हिसाब लगाने के लिए सही इकाइयों का भी इस्तेमाल करता है.
  • जब भी setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)) का इस्तेमाल करके स्काईबॉक्स के लिए कोई शून्य वैल्यू पास की जाएगी, तब स्काईबॉक्स को पूरी तरह से काले रंग में सेट कर दिया जाएगा. सिस्टम के डिफ़ॉल्ट स्काईबॉक्स और ज्यामिति पर वापस जाने के लिए, setSpatialEnvironmentPreference(null). का इस्तेमाल करें

वर्शन 1.0.0-alpha01

12 दिसंबर, 2024

androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 रिलीज़ हो गया है.

शुरुआती रिलीज़ की सुविधाएं Jetpack SceneCore की शुरुआती डेवलपर रिलीज़. यह एक 3D सीन ग्राफ़ लाइब्रेरी है, जिसका इस्तेमाल इमर्सिव सीन और एनवायरमेंट बनाने और उनमें बदलाव करने के लिए किया जाता है. इस लाइब्रेरी की मदद से, 3D मॉडल और कॉन्टेंट पैनल को एक-दूसरे के हिसाब से और वर्चुअल या रीयल-वर्ल्ड एनवायरमेंट के हिसाब से व्यवस्थित किया जा सकता है.

  • SpatialEnvironment: अपने एक्सआर सीन के बैकग्राउंड के तौर पर, स्काईबॉक्स इमेज और/या 3D मॉडल की ज्यामिति का इस्तेमाल करके, पूरी तरह से इमर्सिव अनुभव बनाएं. इसके अलावा, पासथ्रू की सुविधा चालू करें, ताकि आपका वर्चुअल सीन, उपयोगकर्ता के आस-पास के असल वातावरण के साथ इंटिग्रेट हो सके.
  • PanelEntity: अपने 3D सीन में 2D कॉन्टेंट जोड़ें. इसके लिए, स्टैंडर्ड Android लेआउट और गतिविधियों को स्पेसलाइज़ किए गए पैनल में जोड़ें. ये पैनल, रीयल-वर्ल्ड के प्लैटफ़ॉर्म पर फ़्लोट या ऐंकर किए जा सकते हैं.
  • GltfModelEntity: अपने सीन में 3D मॉडल डालें, उन्हें ऐनिमेट करें, और उनके साथ इंटरैक्ट करें. SceneCore, मौजूदा मॉडल के साथ आसानी से इंटिग्रेट करने के लिए, glTF फ़ाइल फ़ॉर्मैट के साथ काम करता है.
  • स्पेशल ऑडियो: अपने 3D सीन में ऐंबियंट और पॉइंट ऑडियो सोर्स जोड़ें, ताकि आपको पूरी तरह से इमर्सिव और स्पेसलाइज़ किया गया साउंड मिले.
  • StereoSurfaceEntity: SceneCore, Android डिवाइस की स्क्रीन पर रेंडर किए गए कॉन्टेंट को बाईं/दाईं आंख के हिसाब से रूट करने की सुविधा देता है. इसका इस्तेमाल, स्टीरियोस्कोपिक कॉन्टेंट को साइड-बाय-साइड या टॉप-बॉटम फ़ॉर्मैट में रेंडर करने के लिए किया जा सकता है. जैसे, स्टीरियो फ़ोटो, 3D वीडियो या डाइनैमिक तौर पर रेंडर किए गए अन्य यूज़र इंटरफ़ेस (यूआई). ऐप्लिकेशन को वीडियो डिकोड करने के लिए, MediaPlayer या ExoPlayer का इस्तेमाल करना चाहिए.
  • कॉम्पोनेंट सिस्टम: SceneCore, आपके XR कॉन्टेंट में सुविधाएं जोड़ने के लिए, एक बेहतर और सुविधाजनक कॉम्पोनेंट सिस्टम उपलब्ध कराता है. इसमें उपयोगकर्ताओं के लिए, मॉडल और पैनल को एक जगह से दूसरी जगह ले जाने, उनका साइज़ बदलने, और उनसे इंटरैक्ट करने की सुविधाएं भी शामिल हैं.
  • ऐंकर: पासथ्रू की सुविधा चालू होने पर, पैनल और मॉडल को असल प्लैटफ़ॉर्म से अटैच किया जा सकता है. इससे, उपयोगकर्ताओं को असल दुनिया के माहौल में वर्चुअल कॉन्टेंट को आसानी से इंटिग्रेट करने में मदद मिलती है.
  • उपयोगकर्ता की पोज़िशन: वर्चुअल सीन में उपयोगकर्ता की जगह की जानकारी ऐक्सेस करके, अपने कॉन्टेंट को उपयोगकर्ता की पोज़िशन के हिसाब से दिखाएं.
  • SpatialCapabilities: पूरी तरह से अडैप्टिव ऐप्लिकेशन बनाएं, जो उपलब्ध होने पर स्पेसलाइज़ की गई सुविधाओं का फ़ायदा ले सकें. जैसे, यूज़र इंटरफ़ेस (यूआई) कॉन्टेंट की 3D पोज़िशनिंग. इतना ही नहीं, ऐप्लिकेशन के चलने के दौरान, आपका ऐप्लिकेशन सुविधाओं में होने वाले बदलावों को मॉनिटर कर सकता है. इससे, उपयोगकर्ता अपने Android XR डिवाइस का इस्तेमाल कैसे कर रहा है, इसके आधार पर अनुभव में बदलाव किया जा सकता है.

ऐसी समस्याएं जिनकी जानकारी पहले से है

  • फ़िलहाल, Jetpack SceneCore का इस्तेमाल करने के लिए, कम से कम 30 वर्शन का SDK टूल ज़रूरी है. इस समस्या को हल करने के लिए, यहां दी गई मेनिफ़ेस्ट एंट्री <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> जोड़ें. इससे, ऐप्लिकेशन को 23 के मिनिमम SDK के साथ बनाया और चलाया जा सकेगा.
  • सेशन अमान्य हो सकता है. ऐसा कई स्थितियों में होता है, जब गतिविधि अपने-आप फिर से शुरू हो जाती है. जैसे, मुख्य पैनल का साइज़ बदलना, बाहरी डिवाइसों को कनेक्ट करना, और लाइट और डार्क मोड के बीच स्विच करना. अगर आपको सेशन अमान्य होने से जुड़ी समस्याएं आ रही हैं, तो इन समस्याओं को हल करने के लिए, अपने मुख्य पैनल का साइज़ न बदलें. इसके अलावा, डाइनैमिक पैनल इकाई का इस्तेमाल करें, कॉन्फ़िगरेशन में किए गए खास बदलावों के लिए गतिविधि को फिर से शुरू करने की सुविधा बंद करें या लाइट/डार्क मोड की थीम में किए गए बदलावों को बंद करें.
  • GltfEntity पर, ऐसे कॉम्पोनेंट इस्तेमाल नहीं किए जा सकते जिन्हें एक जगह से दूसरी जगह ले जाया जा सकता है और जिनका साइज़ बदला जा सकता है.
  • GltfEntity पर Entity.getSize() काम नहीं करता.
  • Jetpack XR ऐप्लिकेशन को AndroidManifest में android.permission.SCENE_UNDERSTANDING की अनुमति का अनुरोध करना होगा.
  • सेशन बनाने की सुविधा सिर्फ़ Android XR डिवाइस पर काम करती है. फ़िलहाल, अगर कोई सेशन बनाया जाता है और उसे Android XR डिवाइस के अलावा किसी दूसरे डिवाइस पर इस्तेमाल करने की कोशिश की जाती है, तो आपको RuntimeException दिखेगा.
  • `SpatialEnvironment.setSpatialEnvironmentPreference()` की मदद से स्काईबॉक्स को शून्य पर सेट करने पर, दस्तावेज़ में बताए गए तरीके से स्काईबॉक्स काला नहीं दिखता. ऐसा करने पर, सिस्टम का डिफ़ॉल्ट स्काईबॉक्स दिख सकता है या मौजूदा स्काईबॉक्स में कोई बदलाव नहीं होगा.
  • SceneCore क्लाइंट को अपने ऐप्लिकेशन की डिपेंडेंसी के लिए, अपने Gradle कॉन्फ़िगरेशन में implementation(“com.google.guava:listenablefuture-1.0”) जोड़ना चाहिए. आने वाले समय में रिलीज़ होने वाले वर्शन में, scenecore इस लाइब्रेरी को api डिपेंडेंसी के तौर पर शामिल करेगा. इससे क्लाइंट को साफ़ तौर पर इसकी जानकारी देने की ज़रूरत नहीं होगी.
  • SceneCore, com.google.guava:guava-31.1-android और com.google.protobuf:protobuf-javalite को ट्रांज़िशन डिपेंडेंसी के तौर पर गलत तरीके से शामिल करता है. अगर इससे आपके बिल्ड में डुप्लीकेट क्लास की गड़बड़ियां होती हैं, तो इन दो डिपेंडेंसी को सुरक्षित तरीके से हटाया जा सकता है.
  • अगर आपका ऐप्लिकेशन SceneCore का इस्तेमाल करता है और ProGuard चालू करता है, तो सेशन बनाने पर वह क्रैश हो जाएगा. इस समस्या को हल करने के लिए, ProGuard को बंद करें. ProGuard को चालू करने के तरीके के बारे में ज़्यादा जानने के लिए, यह गाइड देखें.