Android XR-এর জন্য OpenXR ব্যবহার শুরু করা

প্রযোজ্য XR ডিভাইস
এই নির্দেশিকা আপনাকে এই ধরনের XR ডিভাইসের জন্য অভিজ্ঞতা তৈরি করতে সাহায্য করে।
XR হেডসেট
তারযুক্ত XR গ্লাস

কাজ করা যায় এমন OpenXR এক্সটেনশন বা কাজ করা যায় এমন ইঞ্জিনের সাহায্যে তৈরি করা শুরু করার আগে, আপনার অ্যাপ XR ডেভেলপমেন্টের জন্য কনফিগার করা হয়েছে কিনা তা নিশ্চিত করতে, নিম্নলিখিত বিভাগে ম্যানিফেস্ট কনফিগারেশন ও অনুমতির প্রয়োজনীয়তা পর্যালোচনা করুন।

আপনার অ্যাপের মেনিফেস্ট ফাইল কনফিগার করা

অন্যান্য Android অ্যাপ প্রোজেক্টের মতো, আপনার Android XR অ্যাপে নির্দিষ্ট ম্যানিফেস্ট সেটিংস সহ একটি AndroidManifest.xml ফাইল থাকতে হবে। ম্যানিফেস্ট ফাইল Android বিল্ড টুল, Android অপারেটিং সিস্টেম ও Google Play-এর কাছে আপনার অ্যাপ সম্পর্কে প্রয়োজনীয় তথ্য বর্ণনা করে। আরও তথ্যের জন্য অ্যাপ ম্যানিফেস্ট ওভারভিউ গাইড দেখুন।

XR ডিফারেন্সিয়েটেড অ্যাপের জন্য, আপনার ম্যানিফেস্ট ফাইলে নিম্নলিখিত এলিমেন্ট ও অ্যাট্রিবিউট থাকতে হবে:

PROPERTY_XR_ACTIVITY_START_MODE প্রপার্টি

android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" প্রপার্টি সিস্টেমকে জানায় যে অ্যাক্টিভিটি শুরু হওয়ার সময় সেটি কোনও নির্দিষ্ট মোডে চালু করা উচিত।

এই প্রপার্টির নিম্নলিখিত ভ্যালু আছে:

  • XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED (শুধুমাত্র OpenXR)

XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED

OpenXR-এর মাধ্যমে তৈরি করা অ্যাপ ফুল স্পেসে লঞ্চ হয় এবং অবশ্যই XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED স্টার্ট মোড ব্যবহার করতে হবে। আনম্যানেজড ফুল স্পেস Android XR-কে সিগন্যাল দেয় যে অ্যাপটি OpenXR ব্যবহার করে।


<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
               <category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" />
           </intent-filter>
       </activity>
   </application>
</manifest>

android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" প্রপার্টি থেকে বোঝা যায় যে অ্যাপ্লিকেশনটি নির্দিষ্ট ধরনের বাউন্ডারি সহ লঞ্চ করতে হবে। আপনার অ্যাপকে XR_BOUNDARY_TYPE_LARGE উল্লেখ করতে হবে, যদি এটি এমনভাবে ডিজাইন করা হয় যাতে ব্যবহারকারীরা তাদের ফিজিক্যাল স্পেসে ঘুরে বেড়াতে পারেন। XR_BOUNDARY_TYPE_NO_RECOMMENDATION নির্দিষ্ট করে দিলে, নিরাপত্তা সীমানার ধরন সম্পর্কে কোনও সাজেশন পাওয়া যায় না, তাই সিস্টেম আগে থেকেই ব্যবহার করা হচ্ছে এমন ধরন ব্যবহার করে।

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
           android:value="XR_BOUNDARY_TYPE_LARGE" />
   </application>
</manifest>

স্পেশিয়াল কন্টেনার প্রপার্টি

আপনার অ্যাপ যদি সম্পূর্ণ ইমারসিভ ভিউ ছাড়াও বাউন্ডেড 3D ভলিউম বা 2D প্যানেলে কন্টেন্ট দেখানোর জন্য XR_EXT_spatial_container এক্সটেনশন (Spatial API লেভেল ৪-এ চালু করা হয়েছে) ব্যবহার করে, তাহলে রানটাইমে লঞ্চ সংক্রান্ত ইঙ্গিত প্রদান করার জন্য আপনি <activity> বা <application> লেভেলে নিম্নলিখিত ম্যানিফেস্ট প্রপার্টি ঘোষণা করতে পারেন:

  • org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES: অ্যাক্টিভিটির মাধ্যমে ব্যবহার করা বাউন্ড মোড নির্দিষ্ট করে, | দ্বারা আলাদা করা হয়।

    সঠিক ভ্যালু হল:

    • "2d_panel"
    • "bounded"
    • "immersive"
  • org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE: লঞ্চ করার সময় অ্যাক্টিভিটির প্রাথমিক বাউন্ড মোড নির্দিষ্ট করে।

    সঠিক ভ্যালু হল:

    • XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_BOUNDED
    • XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_IMMERSIVE
    • XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_UNDEFINED
<manifest ... >

   <application ... >
       <activity
           android:name="com.example.myapp.MainActivity" ... >
           <property
               android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES"
               android:value="bounded|immersive" />
           <property
               android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE"
               android:value="XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_BOUNDED" />
       </activity>
   </application>
</manifest>

<uses-native-library> OpenXR

OpenXR অ্যাপ্লিকেশনকে অবশ্যই নেটিভ OpenXR লাইব্রেরির ব্যবহার ঘোষণা করতে হবে যাতে এর রানটাইম সফলভাবে লোড করা যায়। এই ঘোষণা ছাড়া, রানটাইম লোড হয় না।

<manifest ... >

    <application ... >

    <uses-native-library android:name="libopenxr.google.so" android:required="false" />

       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
    </application>
</manifest>

XR অ্যাপের জন্য PackageManager ফিচার

আপনি যখন Google Play Store-এর মাধ্যমে অ্যাপ ডিস্ট্রিবিউট করেন, তখন অ্যাপ ম্যানিফেস্টে প্রয়োজনীয় হার্ডওয়্যার বা সফ্টওয়্যার ফিচার উল্লেখ করতে পারেন। uses-feature এলিমেন্ট, Play Store-কে ব্যবহারকারীদের দেখানো অ্যাপ যথাযথভাবে ফিল্টার করার অনুমতি দেয়।

নিম্নলিখিত ফিচারগুলি XR-ডিফারেন্সিয়েটেড অ্যাপের জন্য নির্দিষ্ট।

android.software.xr.api.openxr

Android XR প্ল্যাটফর্মকে টার্গেট করে এবং OpenXR বা Unity-এর মাধ্যমে তৈরি করা অ্যাপের ক্ষেত্রে অ্যাপ ম্যানিফেস্টে এই ফিচার অন্তর্ভুক্ত করতে হবে এবং android:required অ্যাট্রিবিউট true-এ সেট করতে হবে।

যেসব অ্যাপ Android XR Extensions Package for Unity ভার্সন 1.0.0 বা তার পরবর্তী ভার্সন অথবা Unity OpenXR: Android XR Package ভার্সন 0.5.0-exp.1 বা তার পরবর্তী ভার্সন ব্যবহার করে, সেগুলিকে অ্যাপ ম্যানিফেস্টে ম্যানুয়ালি এই এলিমেন্ট যোগ করতে হয় না। এই দুটি প্যাকেজ আপনার জন্য অ্যাপ ম্যানিফেস্টে এই এলিমেন্ট ইনজেক্ট করবে।

ডিভাইস এই ফিচারের জন্য একটি ভার্সন নির্দিষ্ট করতে পারে, যা ডিভাইসের মাধ্যমে কাজ করে এমন OpenXR-এর সর্বোচ্চ ভার্সন নির্দেশ করে। উপরের ১৬ বিট মেজর নম্বর এবং নিচের ১৬ বিট মাইনর নম্বর বোঝায়। যেমন, OpenXR ভার্সন ১.১ উল্লেখ করতে, ভ্যালু "0x00010001" হিসেবে সেট করা হবে।

অ্যাপের জন্য OpenXR-এর যে ন্যূনতম ভার্সন প্রয়োজন তা উল্লেখ করতে অ্যাপ ফিচার ভার্সন ব্যবহার করতে পারে। যেমন, আপনার অ্যাপের জন্য OpenXR ভার্সন 1.1-এর সহায়তা প্রয়োজন হলে, নিম্নলিখিত ফিচার ঘোষণা করুন:

<uses-feature android:name="android.software.xr.api.openxr"
    android:version="0x00010001"
    android:required="true" />

android.software.xr.api.spatial

OpenXR অ্যাপ যেগুলির জন্য নির্দিষ্ট Android XR Spatial API ভার্সনে চালু করা এক্সটেনশন প্রয়োজন, সেগুলি android.software.xr.api.spatial ফিচার ঘোষণা করতে পারে, যেখানে android:version-এর মান ন্যূনতম প্রয়োজনীয় Spatial API লেভেলে (যেমন "1", "2", "3" বা "4") সেট করা থাকে। প্রতিটি এক্সটেনশনের জন্য প্রয়োজনীয় Spatial API ভার্সন চেক করতে কাজ করে এমন OpenXR এক্সটেনশন ব্যবহার করে তৈরি করুন দেখুন।

<!-- Indicates that the app requires Android XR Spatial API Level 4 or higher. -->
<uses-feature android:name="android.software.xr.api.spatial"
    android:version="4"
    android:required="true" />

android.hardware.xr.input.controller

এই ফিচার থেকে বোঝা যায় যে অ্যাপটি সঠিকভাবে কাজ করার জন্য হাই প্রিসিশন, 6DoF (ডিগ্রিজ অফ ফ্রিডম) মোশন কন্ট্রোলার থেকে ইনপুট প্রয়োজন। আপনার অ্যাপ কন্ট্রোলার সাপোর্ট করলে এবং সেটি ছাড়া কাজ করতে না পারলে, ভ্যালু true-এ সেট করুন। আপনার অ্যাপ কন্ট্রোলার সাপোর্ট করলেও যদি সেটি ছাড়া কাজ করতে পারে, তাহলে এটি false-এ সেট করুন।

<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />

android.hardware.xr.input.hand_tracking

এই ফ্ল্যাগ থেকে বোঝা যায় যে অ্যাপটি সঠিকভাবে কাজ করার জন্য হাই ফিডেলিটি হ্যান্ড ট্র্যাকিং প্রয়োজন, যার মধ্যে ব্যবহারকারীর হাতের জয়েন্টের পজিশন, ওরিয়েন্টেশন ও ভেলোসিটি অন্তর্ভুক্ত। আপনার অ্যাপ হ্যান্ড ট্র্যাকিং সাপোর্ট করলে এবং এটি ছাড়া কাজ করতে না পারলে, ভ্যালু true-এ সেট করুন। আপনার অ্যাপ হ্যান্ড ট্র্যাকিং সাপোর্ট করলে, কিন্তু এটি ছাড়া কাজ করতে পারলে, এটি false-এ সেট করুন।

<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />

android.hardware.xr.input.eye_tracking

এই ফ্ল্যাগ থেকে বোঝা যায় যে ইনপুটের জন্য অ্যাপের হাই-ফিডেলিটি আই ট্র্যাকিং প্রয়োজন যাতে এটি সঠিকভাবে কাজ করতে পারে। আপনার অ্যাপ ইনপুটের জন্য আই ট্র্যাকিং সাপোর্ট করলে এবং এটি ছাড়া কাজ করতে না পারলে, ভ্যালু true-এ সেট করুন। আপনার অ্যাপ ইনপুটের জন্য আই ট্র্যাকিং ফিচার সাপোর্ট করলে, কিন্তু এটি ছাড়া কাজ করতে পারলে, এটি false-এ সেট করুন।

<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

android.hardware.xr.input.face_tracking

এই ফ্ল্যাগ থেকে বোঝা যায় যে অ্যাপটি সঠিকভাবে কাজ করার জন্য ফেস ট্র্যাকিং হার্ডওয়্যার প্রয়োজন। আপনার অ্যাপ ফেস ট্র্যাকিং সাপোর্ট করলে এবং এটি ছাড়া কাজ করতে না পারলে, ভ্যালু true হিসেবে সেট করুন। আপনার অ্যাপ ফেস ট্র্যাকিং সাপোর্ট করলেও, এটি ছাড়া কাজ করতে পারলে, এটি false-এ সেট করুন।

<!-- Sets android:required to true, indicating that your app can't function on devices without face tracking. -->
<uses-feature android:name="android.hardware.xr.input.face_tracking" android:required="true" />

android.hardware.location.gps

এই ফ্ল্যাগ থেকে বোঝা যায় যে অ্যাপটি ডিভাইসে সুনির্দিষ্ট জিপিএস লোকেশন ব্যবহার করে, যেমন জিওস্পেশিয়াল OpenXR এক্সটেনশন ব্যবহার করার সময় (XR_ANDROID_geospatial এবং XR_ANDROID_geospatial_anchor)। আপনার অ্যাপ জিপিএস হার্ডওয়্যার ছাড়া কাজ করতে না পারলে, android:required-কে true হিসেবে সেট করুন অথবা এটি ছাড়া কাজ করতে পারলে false হিসেবে সেট করুন।

<uses-feature android:name="android.hardware.location.gps" android:required="false" />

OpenXR-এর জন্য অনুমতি সম্পর্কে বোঝা

অনেক OpenXR এক্সটেনশন গোপনীয়তা-সংবেদনশীল সেন্সর ডেটা ও ক্ষমতা অ্যাক্সেস করে। এইসব এক্সটেনশন ব্যবহার করতে, আপনার অ্যাপকে অবশ্যই AndroidManifest.xml ফাইলে প্রয়োজনীয় <uses-permission> এলিমেন্ট ঘোষণা করতে হবে এবং সংশ্লিষ্ট OpenXR ফাংশন কল করার আগে রানটাইমে বিপজ্জনক অনুমতি দেওয়ার জন্য অনুরোধ করতে হবে।

<manifest ... >
    <!-- Example dangerous permissions required by specific OpenXR extensions -->
    <uses-permission android:name="android.permission.SCENE_UNDERSTANDING_COARSE" />
    <uses-permission android:name="android.permission.HAND_TRACKING" />
    ...
</manifest>

Android XR-এ কাজ করে এমন OpenXR এক্সটেনশনের জন্য প্রয়োজনীয় বিপজ্জনক Android অনুমতির তালিকা নিচের সারণীতে দেওয়া হল। সব SDK জুড়ে XR সংক্রান্ত অনুমতির ব্যাপারে সম্পূর্ণ বিবরণ পেতে, XR-এর জন্য অনুমতি বোঝা দেখুন।

অনুমতি

কেপেবিলিটি

OpenXR এক্সটেনশন

android.permission.EYE_TRACKING_COARSE

কম-নির্ভুল চোখের পোজ, স্ট্যাটাস এবং ওরিয়েন্টেশন (যেমন অবতারের জন্য)।

android.permission.EYE_TRACKING_FINE

বেছে নেওয়া, ইনপুট, ইন্টার‍্যাকশন এবং আই-ট্র্যাক করা ফোভেটেড রেন্ডারিংয়ের জন্য হাই-প্রিসিশন আই গেজ।

android.permission.FACE_TRACKING

মুখের ব্লেন্ড শেপ ট্র্যাক করা এবং মুখের অভিব্যক্তি রেন্ডার করা।

android.permission.RECORD_AUDIO

অডিও-চালিত ফেস ট্র্যাকিং ডেটা সোর্সের জন্য অডিও ইনপুট।

android.permission.HAND_TRACKING

হ্যান্ড জয়েন্ট পোজ, গতিবেগ, লক্ষ্য অবস্থা এবং হ্যান্ড মেশ উপস্থাপনা ট্র্যাক করা।

android.permission.BODY_TRACKING

শরীরের জয়েন্টের পোজ ও কঙ্কালের অনুপাত ট্র্যাক করা।

android.permission.SCENE_UNDERSTANDING_COARSE

প্লেন ট্র্যাকিং, অবজেক্ট ট্র্যাকিং, ছবি/মার্কার/QR কোড ট্র্যাকিং, অ্যাঙ্কর, পারসিসটেন্স, ট্র্যাক করা যায় এমন আইটেমের বিরুদ্ধে রে-কাস্টিং, লাইট এস্টিমেশন ও পাসথ্রু মেশ।

android.permission.SCENE_UNDERSTANDING_FINE

ডেপথ টেক্সচার, সিন মেশিং, কিউবম্যাপ লাইট এস্টিমেশন, ডেপথ রে-কাস্টিং এবং স্পেশিয়াল অ্যানোটেশন।

android.permission.ACCESS_FINE_LOCATION

জিওস্পেশিয়াল ট্র্যাকিং ও অ্যাঙ্করের জন্য পৃথিবীর সাপেক্ষে সুনির্দিষ্ট লোকেশন ও ওরিয়েন্টেশন।

পরবর্তী ধাপ

এখন আপনি অ্যাপের ম্যানিফেস্ট কনফিগার করা এবং গুরুত্বপূর্ণ তথ্য পর্যালোচনা করা শেষ করেছেন, OpenXR-এর মাধ্যমে আপনি কীভাবে তৈরি করতে পারেন তা এক্সপ্লোর করুন: