আপনার অ্যাপে স্থানিক পরিবেশ যোগ করুন

Jetpack XR SDK-এ, স্থানিক পরিবেশ হল নিমজ্জিত পরিবেশ যা আপনি ভার্চুয়াল দৃশ্যের পটভূমি কাস্টমাইজ করতে আপনার অ্যাপে যোগ করতে পারেন। স্থানিক পরিবেশ শুধুমাত্র তখনই দৃশ্যমান হয় যখন একটি অ্যাপ পূর্ণ স্থানে থাকে।

স্থানিক পরিবেশের ওভারভিউ

একটি SpatialEnvironment একটি অ্যাপের স্থানিক পরিবেশ পছন্দগুলি পরিচালনা করতে ব্যবহৃত হয়। এটি একটি স্বতন্ত্র স্কাইবক্স চিত্র এবং glTF-নির্দিষ্ট জ্যামিতির সংমিশ্রণ। একটি সময়ে শুধুমাত্র একটি একক স্কাইবক্স চিত্র এবং একটি একক glTF জ্যামিতি ফাইল সেট করা যেতে পারে৷

একটি স্কাইবক্স ভার্চুয়াল দৃশ্যে একজন ব্যবহারকারী তাদের চারপাশে যে চিত্র দেখেন তা প্রতিনিধিত্ব করে, যা আকাশ, পর্বত বা শহরের দৃশ্যের মতো দূরবর্তী পটভূমির পরিবেশের বিভ্রম তৈরি করে। ব্যবহারকারী স্কাইবক্সের সাথে যোগাযোগ করতে বা তার কাছাকাছি যেতে পারে না। Jetpack XR SDK OpenEXR স্ট্যান্ডার্ডে গোলাকার স্কাইবক্স সমর্থন করে। আপনার অ্যাপের জন্য একটি নিমগ্ন ব্যাকগ্রাউন্ড প্রদান করার পাশাপাশি, একটি EXR স্কাইবক্স আপনার অ্যাপ দ্বারা লোড করা 3D মডেলগুলিতে ইমেজ ভিত্তিক আলো (IBL) প্রদান করে। আরও তথ্যের জন্য, 3D মডেলের সাথে কাজ করার জন্য নির্দেশিকা পড়ুন।

স্থানিক পরিবেশ glTF স্ট্যান্ডার্ডে 3D জ্যামিতি বিষয়বস্তুও অন্তর্ভুক্ত করতে পারে। এইভাবে লোড করা পরিবেশের জ্যামিতি স্বয়ংক্রিয়ভাবে বাস্তব-বিশ্বের মেঝের সাথে সারিবদ্ধ হবে। এনভায়রনমেন্ট জ্যামিতি হল ফোরগ্রাউন্ড এবং মিডগ্রাউন্ড উপাদানগুলির মাধ্যমে আপনার পরিবেশে বাস্তবতা যোগ করার একটি দুর্দান্ত উপায় যা প্যারালাক্স প্রভাবের সাথে স্কাইবক্সে মিশে যায়।

স্থানিক পরিবেশের জন্য ডিজাইন নির্দেশিকাতে , আপনি স্থানিক পরিবেশ তৈরি করতে এবং কীভাবে নিরাপদ এবং আনন্দদায়ক স্থানিক পরিবেশ তৈরি করতে ব্যবহার করতে পারেন সেগুলি সম্পর্কে আপনি শিখতে পারেন।

আপনি এই তিনটি কনফিগারেশনের একটিতে আপনার অ্যাপের স্থানিক পরিবেশ সেট করতে পারেন:

  • একটি স্কাইবক্স চিত্র এবং glTF জ্যামিতির সংমিশ্রণ।
  • একটি পাসথ্রু সারফেস, যেখানে পরিবেশটি প্রদর্শিত হয় ডিভাইসের বাহ্যিক মুখী ক্যামেরা থেকে একটি লাইভ ফিড। সম্পূর্ণ অস্বচ্ছতায়, এই পাসথ্রু পৃষ্ঠটি স্কাইবক্স এবং জ্যামিতিকে সম্পূর্ণরূপে আবদ্ধ করে।
  • একটি মিশ্র কনফিগারেশন, যেখানে পাসথ্রু পৃষ্ঠটি সম্পূর্ণ অস্বচ্ছতায় নয় এবং এটি শূন্য অস্বচ্ছতায়ও নয়। এই ক্ষেত্রে, পাসথ্রু পৃষ্ঠটি আধা-স্বচ্ছ হয়ে যায় এবং আলফা স্কাইবক্স এবং এর পিছনে জ্যামিতির সাথে মিশে যায়।

স্থানিক পরিবেশের জন্য স্থানিক ক্ষমতা

  • SpatialCapabilities : বর্তমান সেশনের স্থানিক ক্ষমতার প্রতিনিধিত্ব করে। কিছু স্থানিক ক্ষমতা স্থানিক পরিবেশের সাথে প্রাসঙ্গিক।

  • SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL : ক্রিয়াকলাপটি বর্তমান সময়ে পাসথ্রু সক্ষম বা অক্ষম করতে পারে কিনা তা নির্দেশ করে৷

  • SPATIAL_CAPABILITY_APP_ENVIRONMENT : বর্তমান সময়ে কার্যকলাপটি তার নিজস্ব স্থানিক পরিবেশ সেট করতে পারে কিনা তা নির্দেশ করে৷

স্থানিক পরিবেশ সম্পদ আমদানি এবং লোড করুন

স্থানিক পরিবেশের জন্য glTF এবং EXR সংস্থানগুলি Session ক্লাসে অ্যাসিঙ্ক্রোনাসভাবে লোড করা হয়। এই ফাইলগুলি অবশ্যই সম্পদ ফোল্ডারে সংরক্ষণ করতে হবে।

একটি glTF সম্পদ তৈরি করুন

একটি glTF সংস্থান একটি GltfModel হিসাবে তৈরি করা যেতে পারে, যেখানে glTF একটি স্থানীয় ফাইল থেকে লোড করা হয়। একটি GltfModel একটি স্থানিক অ্যাপ পরিবেশের অংশ হিসাবে ব্যবহার করা যেতে পারে।

// assume that session is a Session that has been previously created
val environmentGeometryFuture = session.createGltfResourceAsync("DayGeometry.glb")

val environmentGeometry = environmentGeometryFuture.await()

একটি EXR ইমেজ রিসোর্স তৈরি করুন

একটি EXR ইমেজ রিসোর্স একটি ExrImage হিসাবে তৈরি করা যেতে পারে, যেখানে EXR একটি স্থানীয় ফাইল থেকে লোড করা হয়। একটি ExrImage স্কাইবক্স আঁকার জন্য একটি স্থানিক অ্যাপ পরিবেশের অংশ হিসেবে ব্যবহার করা যেতে পারে।

// assume that session is a Session that has been previously created
val skyboxExrFuture = session.createExrImageResourceAsync("BlueSkybox.exr")

val skyboxExr = skyboxExrFuture.await()

আপনার অ্যাপের জন্য Spatial EnvironmentPreference সেট করুন

setSpatialEnvironmentPreference একটি অ্যাপের জন্য পছন্দের স্থানিক পরিবেশ সেট করতে ব্যবহৃত হয়। এই পদ্ধতিটি শুধুমাত্র একটি অগ্রাধিকার সেট করে এবং তাৎক্ষণিক পরিবর্তন ঘটায় না যদি না হয় isSpatialEnvironmentPreferenceActive ইতিমধ্যেই সত্য। একবার ডিভাইসটি এমন একটি অবস্থায় প্রবেশ করলে যেখানে XR ব্যাকগ্রাউন্ড পরিবর্তন করা যায় এবং SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT SPATIAL_CAPABILITY_APP_ENVIRONMENT সক্ষমতা পাওয়া যায়, অ্যাপ্লিকেশনটির জন্য পছন্দের স্থানিক পরিবেশ স্বয়ংক্রিয়ভাবে প্রদর্শিত হবে।

অগ্রাধিকারকে শূন্যে সেট করা অ্যাপের জন্য পছন্দের স্থানিক পরিবেশকে অক্ষম করবে, যার অর্থ ডিফল্ট সিস্টেম পরিবেশ পরিবর্তে প্রদর্শিত হবে।

যদি প্রদত্ত SpatialEnvironmentPreference শূন্য না হয়, তবে এর সমস্ত বৈশিষ্ট্য শূন্য থাকে, তাহলে স্থানিক পরিবেশে একটি কালো স্কাইবক্স থাকবে এবং কোন জ্যামিতি থাকবে না।

স্থানিক পরিবেশ পরিস্থিতির পরিবর্তন সম্পর্কে বিজ্ঞপ্তি পেতে, addOnSpatialEnvironmentChangedListener ব্যবহার করুন।

মৌলিক ব্যবহার

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

// Assume that session is a Session that has been previously created

// Create a GLTFResource
val environmentGeometry = session.createGltfResourceAsync("DayGeometry.glb").await()

// Create an ExrImage for the skybox
val skyboxExr = session.createExrImageResourceAsync("BlueSkybox.exr").await()

val spatialEnvironmentPreference = SpatialEnvironmentPreference(skyboxExr, environmentGeometry)

val preferenceResult = session.spatialEnvironment.setSpatialEnvironmentPreference(spatialEnvironmentPreference)

if (preferenceResult ==  SpatialEnvironment.SetSpatialEnvironmentPreferenceChangeApplied()) {
   // The environment was successfully updated and is now visible, and any listeners
   // specified using addOnSpatialEnvironmentChangedListener will be notified.
} else if (preferenceResult == SpatialEnvironment.SetSpatialEnvironmentPreferenceChangePending()) {
    // The environment is in the process of being updated. Once visible, any listeners
   // specified using addOnSpatialEnvironmentChangedListener will be notified.
}

উন্নত ব্যবহার

আরও উন্নত ব্যবহারের ক্ষেত্রে যেখানে আপনার পরিবেশের উপর আরও সূক্ষ্ম নিয়ন্ত্রণের প্রয়োজন, আপনি SpatialCapabilities পরীক্ষাকে অন্তর্ভুক্ত করতে পারেন এবং আপনি কখন স্থানিক পরিবেশ পছন্দ সেট করতে চান তা নির্ধারণ করতে একটি addOnSpatialEnvironmentChangedListener প্রয়োগ করতে পারেন।

আপনার অ্যাপের জন্য স্থানিক পরিবেশের জন্য PassthroughOpacityPreference সেট করুন

একটি অ্যাপের ইমারসিভ ভার্চুয়াল ব্যাকগ্রাউন্ডের একটি উপাদান হল একটি পাসথ্রু পৃষ্ঠ৷ এই ক্ষেত্রে যে ব্যাকগ্রাউন্ডটি প্রদর্শিত হয় তা হল ডিভাইসের বহির্মুখী ক্যামেরা থেকে একটি লাইভ ফিড।

setPassthroughOpacityPreference একটি অ্যাপের জন্য পছন্দের পাসথ্রু অপাসিটি সেট করতে ব্যবহৃত হয়। এই পদ্ধতিটি শুধুমাত্র একটি পছন্দ নির্ধারণ করে এবং SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL সক্ষমতা না থাকলে তাৎক্ষণিক পরিবর্তন ঘটায় না৷ SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL ক্ষমতা উপলব্ধ৷ একবার ডিভাইসটি এমন একটি অবস্থায় প্রবেশ করলে যেখানে পাসথ্রু অস্বচ্ছতা পরিবর্তন করা যেতে পারে, এবং SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL ক্ষমতা উপলব্ধ, অ্যাপ্লিকেশনের জন্য পছন্দের পাসথ্রু অস্বচ্ছতা স্বয়ংক্রিয়ভাবে প্রয়োগ করা হবে।

পাসথ্রু অপাসিটি পছন্দের মানগুলি 0.0f (শূন্য অপাসিটি, যেখানে পাসথ্রু পৃষ্ঠটি দৃশ্যমান নয়) থেকে 1.0f (সম্পূর্ণ অস্বচ্ছতা, যেখানে পাসথ্রু পৃষ্ঠ স্থানিক পরিবেশকে লুকিয়ে রাখে) পর্যন্ত। setPassthroughOpacityPreference প্যারামিটারটি একটি বাতিলযোগ্য ফ্লোট। মানটিকে শূন্যে সেট করা ইঙ্গিত দেয় যে অ্যাপটির কোনও পাসথ্রু অপাসিটি পছন্দ নেই এবং এটি সিস্টেমে পাসথ্রু নিয়ন্ত্রণ ফিরিয়ে দেবে।

মৌলিক ব্যবহার

এই কোড স্নিপেট পাসথ্রু অস্বচ্ছতা পছন্দ সেট করে। এই পছন্দটি মনে রাখা হবে, এবং অ্যাপটির পাসথ্রু অপাসিটি সেট করার ক্ষমতা থাকলে এটি প্রয়োগ করা হবে।

// Assume that session is a Session that has been previously created

val preferenceResult = session.spatialEnvironment.setPassthroughOpacityPreference(1.0f)

if (preferenceResult ==  SpatialEnvironment.SetPassthroughOpacityPreferenceChangeApplied()) {
  // The passthrough opacity request succeeded and should be visible now, and any listeners specified using addOnPassthroughOpacityChangedListener
  // will be notified
} else if (preferenceResult == SpatialEnvironment.SetPassthroughOpacityPreferenceChangePending()) {
  // The passthrough opacity preference was successfully set, but not
  // immediately visible. The passthrough opacity change will be applied
  // when the activity has the
  // SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL capability.
  // Then, any listeners specified using addOnPassthroughOpacityChangedListener
  // will be notified
}

উন্নত ব্যবহার

আরও উন্নত ব্যবহারের ক্ষেত্রে যেখানে আপনার পাসথ্রু অস্বচ্ছতার উপর সূক্ষ্ম নিয়ন্ত্রণের প্রয়োজন, আপনি SpatialCapabilities যাচাইগুলিকে অন্তর্ভুক্ত করতে পারেন এবং আপনি কখন পাসথ্রু অস্বচ্ছতা পছন্দ সেট করতে চান তা নির্ধারণ করতে একটি addOnPassthroughOpacityChangedListener প্রয়োগ করতে পারেন।

সম্পদ অপ্টিমাইজেশান

আপনার ব্যবহারকারীদের SpatialEnvironment সেট করার জন্য সম্পদ তৈরি করার সময়, আপনি নিশ্চিত করতে চাইবেন যে আপনার সম্পদগুলি একটি যুক্তিসঙ্গত ফাইলের আকার বজায় রেখে উচ্চ-মানের রেজোলিউশন অর্জন করে৷ আপনি নিশ্চিত করতে চাইবেন যে আপনার glb mipmaps এবং ktx2 টেক্সচার ব্যবহার করে। আপনি আপনার glb ফাইলগুলিতে পলিকাউন্টের প্রতিও সংবেদনশীল হতে চাইবেন, কারণ একটি উচ্চ পলিকাউন্ট অপ্রয়োজনীয় শক্তি খরচ হতে পারে। বেশিরভাগ SpatialEnvironment দৃষ্টান্তের জন্য ফাইলের আকারের বেশিরভাগই স্কাইবক্সের জন্য ব্যবহৃত চিত্র থেকে আসে। আপনার ছবিগুলি অপ্টিমাইজ করা হয়েছে তা নিশ্চিত করতে, একটি অপ্টিমাইজেশন টুলের মাধ্যমে সম্পদগুলি চালান (উদাহরণস্বরূপ, ktx )।

বর্তমান পাসথ্রু অস্বচ্ছতা নির্ধারণ করুন

val currentPassthroughOpacity =  session.spatialEnvironment.getCurrentPassthroughOpacity()

এছাড়াও দেখুন