Jetpack XR SDK-তে, স্পেশিয়াল এনভায়রনমেন্ট হল ইমারসিভ পরিবেশ যা আপনি ভার্চুয়াল দৃশ্যের ব্যাকগ্রাউন্ড কাস্টমাইজ করার জন্য আপনার অ্যাপে যোগ করতে পারবেন। কোনও অ্যাপ ফুল স্পেসে থাকলে তবেই স্পেশাল এনভায়রনমেন্ট দেখা যায়।
স্পেশিয়াল এনভায়রনমেন্টের ওভারভিউ
SpatialEnvironment অ্যাপের স্পেশিয়াল এনভায়রনমেন্ট
পছন্দ ম্যানেজ করে। এটি একটি স্বতন্ত্র স্কাইবক্স ইমেজ এবং glTF-নির্দিষ্ট
জ্যামিতির একটি কম্পোজিট। একবারে শুধুমাত্র একটি স্কাইবক্স ছবি এবং একটি glTF জিওমেট্রি ফাইল সেট করা
যেতে পারে।
ভার্চুয়াল দৃশ্যে ব্যবহারকারী তার চারপাশে যে ছবি দেখতে পান, স্কাইবক্স সেটিই দেখায়, এর ফলে আকাশ, পাহাড় বা সিটিস্কেপের মতো দূরের ব্যাকগ্রাউন্ড পরিবেশের বিভ্রম তৈরি হয়। ব্যবহারকারী স্কাইবক্সের সাথে ইন্টার্যাক্ট করতে বা সেটির কাছাকাছি যেতে পারবেন না। Jetpack XR SDK, OpenEXR স্ট্যান্ডার্ডে স্ফেরিক্যাল স্কাইবক্স সাপোর্ট করে। আপনার অ্যাপের জন্য একটি ইমারসিভ ব্যাকগ্রাউন্ড প্রদান করার পাশাপাশি, একটি EXR স্কাইবক্স আপনার অ্যাপের মাধ্যমে লোড করা 3D মডেলগুলিতে ইমেজ ভিত্তিক আলো (IBL) প্রদান করে। আরও তথ্যের জন্য, 3D মডেলের সাথে কাজ করার জন্য গাইড দেখুন।
এছাড়াও, স্পেশিয়াল এনভায়রনমেন্টে glTF স্ট্যান্ডার্ডে 3D জিওমেট্রি কন্টেন্ট অন্তর্ভুক্ত থাকতে পারে। এইভাবে লোড করা এনভায়রনমেন্ট জিওমেট্রি বাস্তব জগতের ফ্লোরের সাথে অটোমেটিক অ্যালাইন হয়ে যাবে। এনভায়রনমেন্ট জিওমেট্রি হল আপনার পরিবেশে বাস্তবসম্মত অনুভূতি যোগ করার একটি দুর্দান্ত উপায়। এটি ফোরগ্রাউন্ড এবং মিডগ্রাউন্ড এলিমেন্টের মাধ্যমে করা হয় যা প্যারালাক্স এফেক্টের সাথে স্কাইবক্সে মিশে যায়।
স্পেশিয়াল এনভায়রনমেন্টের জন্য ডিজাইন সংক্রান্ত নির্দেশিকা থেকে আপনি স্পেশিয়াল এনভায়রনমেন্ট তৈরি করার জন্য বিভিন্ন ধরনের অ্যাসেট এবং কীভাবে নিরাপদ ও উপভোগ্য স্পেশিয়াল এনভায়রনমেন্ট তৈরি করা যায় সেই সম্পর্কে জানতে পারবেন।
আপনি এই তিনটি কনফিগারেশনের মধ্যে যেকোনও একটিতে আপনার অ্যাপের স্পেশিয়াল এনভায়রনমেন্ট সেট করতে পারেন:
- স্কাইবক্স ইমেজ ও glTF জ্যামিতির কম্বিনেশন।
- একটি পাসথ্রু সারফেস, যেখানে প্রদর্শিত পরিবেশ হল ডিভাইসের বাইরের দিকে মুখ করা ক্যামেরা থেকে একটি লাইভ ফিড। সম্পূর্ণ অস্বচ্ছতার ক্ষেত্রে, এই পাসথ্রু সারফেস স্কাইবক্স ও জ্যামিতিকে সম্পূর্ণভাবে আড়াল করে।
- একটি মিশ্র কনফিগারেশন, যেখানে পাসথ্রু সারফেস সম্পূর্ণ অস্বচ্ছ নয়, আবার শূন্য অস্বচ্ছতাও নয়। এই ক্ষেত্রে, পাসথ্রু সারফেসটি আধা-স্বচ্ছ হয়ে যায় এবং এর পিছনে থাকা স্কাইবক্স এবং জ্যামিতির সাথে আলফা ব্লেন্ড হয়।
স্পেশিয়াল এনভায়রনমেন্টের জন্য স্পেশিয়াল ক্ষমতা
SpatialCapability: বর্তমান সেশনের স্পেশিয়াল ক্ষমতা প্রতিনিধিত্ব করে। কিছু স্পেশাল ক্ষমতা স্পেশাল পরিবেশের সাথে প্রাসঙ্গিক।SpatialCapability.PASSTHROUGH_CONTROL: বর্তমান সময়ে অ্যাক্টিভিটি পাসথ্রু চালু বা বন্ধ করতে পারবে কিনা তা নির্দেশ করে।SpatialCapability.APP_ENVIRONMENT: অ্যাক্টিভিটি বর্তমান সময়ে নিজের স্পেশিয়াল এনভায়রনমেন্ট সেট করতে পারবে কিনা তা দেখায়।
স্পেশিয়াল এনভায়রনমেন্ট রিসোর্স ইমপোর্ট ও লোড করা
Session ক্লাস ব্যবহার করে স্পেশিয়াল এনভায়রনমেন্টের জন্য glTF এবং EXR রিসোর্স অ্যাসিঙ্ক্রোনাসভাবে লোড করা হয়।
glTF রিসোর্স তৈরি করুন
একটি glTF রিসোর্স GltfModel হিসেবে তৈরি করা যেতে পারে, যেখানে glTF একটি লোকাল ফাইল থেকে লোড করা হয়। GltfModel-কে স্পেশিয়াল অ্যাপ এনভায়রনমেন্টের অংশ হিসেবে ব্যবহার করা যেতে
পারে।
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
ইমেজ-ভিত্তিক লাইটিং রিসোর্স তৈরি করুন
ইমেজ-ভিত্তিক লাইটিং রিসোর্স
ImageBasedLightingAsset হিসেবে তৈরি করা যেতে পারে, যেখানে লাইটিং স্থানীয় ফাইল থেকে লোড করা হয়।
আপনার স্কাইবক্সের জন্য IBL-এর জিপ ফাইল তৈরি করতে,
cmgen-এর সাথে ImageBasedLightingAsset ব্যবহার করা যেতে পারে। আরও তথ্যের জন্য এনভায়রনমেন্ট অ্যাসেট অপ্টিমাইজ করা সংক্রান্ত আমাদের নির্দেশিকা
দেখুন।
val lightingForSkybox = ImageBasedLightingAsset.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
আপনার অ্যাপের জন্য SpatialEnvironmentPreference সেট করুন
preferredSpatialEnvironment প্রপার্টি কোনও অ্যাপের জন্য পছন্দসই স্পেশিয়াল
এনভায়রনমেন্ট নিয়ন্ত্রণ করে। এই প্রপার্টি কোনও পছন্দ সেট করার জন্য ব্যবহার করা হলে,
isPreferredSpatialEnvironmentActive আগে থেকেই true না থাকলে,
এটি অবিলম্বে কোনও পরিবর্তন করে না। ডিভাইসটি এমন একটি অবস্থায় প্রবেশ করলে যেখানে XR ব্যাকগ্রাউন্ড পরিবর্তন করা যেতে পারে এবং SpatialCapability.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. }
উন্নত ব্যবহার
আরও উন্নত ব্যবহারের ক্ষেত্রে যেখানে আপনার পরিবেশের উপর আরও সূক্ষ্ম নিয়ন্ত্রণ প্রয়োজন,
আপনি SpatialCapability চেক অন্তর্ভুক্ত করতে পারেন এবং
addOnSpatialEnvironmentChangedListener প্রয়োগ করতে পারেন যাতে আপনি কখন স্পেশিয়াল এনভায়রনমেন্টের পছন্দ সেট করতে চান তা নির্ধারণ করতে পারেন।
আপনার অ্যাপের জন্য স্পেশিয়াল এনভায়রনমেন্টের PassthroughOpacityPreference সেট করুন
অ্যাপের ইমারসিভ ভার্চুয়াল ব্যাকগ্রাউন্ডের অন্যতম কম্পোনেন্ট হল পাসথ্রু সারফেস। এই ক্ষেত্রে, ডিভাইসের বাইরের দিকে মুখ করা ক্যামেরা থেকে লাইভ ফিড ব্যাকগ্রাউন্ড হিসেবে দেখানো হয়।
setPassthroughOpacityPreference কোনও অ্যাপের জন্য পছন্দের পাসথ্রু
অস্বচ্ছতা সেট করতে ব্যবহার করা হয়। এই পদ্ধতিটি শুধুমাত্র একটি পছন্দ সেট করে এবং
SpatialCapability.PASSTHROUGH_CONTROL ক্ষমতা
উপলভ্য না হলে অবিলম্বে কোনও পরিবর্তন
করে না। ডিভাইসটি এমন একটি অবস্থায় প্রবেশ করলে যেখানে পাসথ্রু অস্বচ্ছতা পরিবর্তন করা যেতে পারে, এবং SpatialCapability.PASSTHROUGH_CONTROL
ক্ষমতা উপলভ্য, অ্যাপ্লিকেশনের জন্য পছন্দের পাসথ্রু অস্বচ্ছতা
অটোমেটিক প্রয়োগ করা হবে।
পাসথ্রু অস্বচ্ছতা সংক্রান্ত পছন্দের রেঞ্জের মান 0.0f (শূন্য অস্বচ্ছতা,
যেখানে পাসথ্রু সারফেস দেখা যায় না) থেকে 1.0f (সম্পূর্ণ অস্বচ্ছতা, যেখানে
পাসথ্রু সারফেস স্পেশিয়াল এনভায়রনমেন্টকে লুকিয়ে রাখে) পর্যন্ত হয়। setPassthroughOpacityPreference প্যারামিটারটি একটি নালেবেল ফ্লোট। value-কে 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. }
উন্নত ব্যবহার
আরও উন্নত ব্যবহারের ক্ষেত্রে যেখানে পাসথ্রু অস্বচ্ছতার উপর আপনার আরও সূক্ষ্ম নিয়ন্ত্রণের প্রয়োজন, সেখানে আপনি SpatialCapability চেক অন্তর্ভুক্ত করতে পারেন এবং addOnPassthroughOpacityChangedListener ব্যবহার করে একজন শ্রোতা যোগ করতে পারেন যাতে আপনি কখন পাসথ্রু অস্বচ্ছতা পছন্দ সেট করতে চান তা নির্ধারণ করতে পারেন।
অ্যাসেট অপ্টিমাইজেশন
আপনার ব্যবহারকারীর SpatialEnvironment সেট করার জন্য অ্যাসেট তৈরি করার সময়, নিশ্চিত করুন যে
আপনার অ্যাসেট যেন ফাইলের সাইজ যুক্তিসঙ্গত রেখেও হাই-কোয়ালিটি রেজোলিউশন
অর্জন করে। আরও জানতে, এনভায়রনমেন্ট অ্যাসেট অপ্টিমাইজ করার ব্যাপারে আমাদের নির্দেশিকা দেখুন।
বর্তমান পাসথ্রু অস্বচ্ছতা নির্ধারণ করুন
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity