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"))
আলোর সোর্স হিসেবে কোনও ছবি ব্যবহার করা
ছবি-ভিত্তিক আলো রিসোর্সকে
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 নাল না হলেও, এর সব
প্রপার্টি নাল হলে, স্পেশিয়াল এনভায়রনমেন্টে একটি কালো স্কাইবক্স
ও কোনও জ্যামিতি থাকবে না।
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 (সম্পূর্ণ অপাসিটি, যেখানে
পাসথ্রু সারফেস স্পেশিয়াল এনভায়রনমেন্ট লুকিয়ে রাখে) পর্যন্ত হয়। The
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