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

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 একটি স্থানিক অ্যাপ পরিবেশের অংশ হিসাবে ব্যবহার করা যেতে পারে।

val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))

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

একটি EXR ইমেজ রিসোর্স একটি ExrImage হিসাবে তৈরি করা যেতে পারে, যেখানে EXR একটি স্থানীয় ফাইল থেকে লোড করা হয়। আপনার স্কাইবক্সের জন্য IBL-এর একটি ZIP ফাইল তৈরি করতে cmgen এর সাথে একটি ExrImage ব্যবহার করা যেতে পারে। আরো বিস্তারিত জানার জন্য পরিবেশ সম্পদ অপ্টিমাইজ করার বিষয়ে আমাদের গাইড দেখুন।

val lightingForSkybox = ExrImage.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))

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

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

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

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

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

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

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

val spatialEnvironmentPreference =
    SpatialEnvironment.SpatialEnvironmentPreference(lightingForSkybox, environmentGeometry)
session.scene.spatialEnvironment.preferredSpatialEnvironment = spatialEnvironmentPreference
if (session.scene.spatialEnvironment.isPreferredSpatialEnvironmentActive) {
    // The environment was successfully updated and is now visible, and any listeners
    // specified using addOnSpatialEnvironmentChangedListener will be notified.
} else {
    // The passthrough opacity preference was successfully set, but not
    // immediately visible. The passthrough opacity change will be applied
    // when the activity has the SPATIAL_CAPABILITY_APP_ENVIRONMENT capability.
    // Then, any listeners specified using addOnSpatialEnvironmentChangedListener
    // will be notified.
}

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

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

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

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

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

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

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

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

session.scene.spatialEnvironment.preferredPassthroughOpacity = 1.0f
if (session.scene.spatialEnvironment.currentPassthroughOpacity == 1.0f) {
    // The passthrough opacity request succeeded and should be visible now, and any listeners
    // specified using addOnPassthroughOpacityChangedListener will be notified.
} else {
    // 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 সেট করার জন্য সম্পদ তৈরি করার সময়, একটি যুক্তিসঙ্গত ফাইলের আকার বজায় রেখে আপনার সম্পদগুলি উচ্চ-মানের রেজোলিউশন অর্জন করে তা নিশ্চিত করুন। আরও জানতে, পরিবেশ সম্পদ অপ্টিমাইজ করার বিষয়ে আমাদের নির্দেশিকা দেখুন।

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

val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity

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