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

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

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 : এটি নির্দেশ করে যে অ্যাক্টিভিটিটি বর্তমান সময়ে তার নিজস্ব স্থানিক পরিবেশ নির্ধারণ করতে পারে কি না।

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

Session ক্লাস ব্যবহার করে স্থানিক পরিবেশের জন্য glTF এবং EXR রিসোর্সসমূহ অ্যাসিঙ্ক্রোনাসভাবে লোড করা হয়।

একটি glTF রিসোর্স তৈরি করুন

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

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

একটি চিত্র-ভিত্তিক আলোকসজ্জা সংস্থান তৈরি করুন

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

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

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

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

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

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

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 ক্যাপাবিলিটিটি উপলব্ধ থাকে, তখন অ্যাপ্লিকেশনটির জন্য পছন্দের পাসথ্রু অপাসিটি স্বয়ংক্রিয়ভাবে প্রয়োগ করা হবে।

পাসথ্রু অপাসিটি প্রেফারেন্সের মান 0.0f (শূন্য অপাসিটি, যেখানে পাসথ্রু সারফেসটি দৃশ্যমান নয়) থেকে 1.0f (সম্পূর্ণ অপাসিটি, যেখানে পাসথ্রু সারফেসটি স্পেশিয়াল এনভায়রনমেন্টকে আড়াল করে) পর্যন্ত হয়ে থাকে। setPassthroughOpacityPreference প্যারামিটারটি একটি নালযোগ্য ফ্লোট। এর মান null সেট করলে বোঝায় যে অ্যাপটির কোনো পাসথ্রু অপাসিটি প্রেফারেন্স নেই এবং এটি পাসথ্রু নিয়ন্ত্রণ সিস্টেমের কাছে ফিরিয়ে দেবে।

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

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

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

আরও দেখুন