Jetpack XR SDK-তে, স্থানিক পরিবেশ হল নিমজ্জিত পরিবেশ যা আপনি আপনার অ্যাপে ভার্চুয়াল দৃশ্যের পটভূমি কাস্টমাইজ করার জন্য যোগ করতে পারেন। স্থানিক পরিবেশ কেবল তখনই দৃশ্যমান হয় যখন একটি অ্যাপ পূর্ণ স্থানে থাকে।
স্থানিক পরিবেশের সংক্ষিপ্তসার
একটি অ্যাপের স্থানিক পরিবেশের পছন্দগুলি পরিচালনা করার জন্য একটি SpatialEnvironment ব্যবহার করা হয়। এটি একটি স্বতন্ত্র স্কাইবক্স চিত্র এবং glTF-নির্দিষ্ট জ্যামিতির সংমিশ্রণ। একবারে কেবল একটি একক স্কাইবক্স চিত্র এবং একটি একক glTF জ্যামিতি ফাইল সেট করা যেতে পারে।
A skybox represents the image a user sees around them in the virtual scene, creating the illusion of a distant background environment, like a sky, mountains, or cityscape. The user cannot interact with or get closer to the skybox. The Jetpack XR SDK supports spherical skyboxes in the OpenEXR standard. In addition to providing an immersive background for your app, an EXR skybox also provides image based lighting (IBL) to 3D models loaded by your app. For more information, refer to the guide for working with 3D models .
স্থানিক পরিবেশে 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 সেট করুন
The preferredSpatialEnvironment property controls the preferred spatial environment for an app. When this property is used to set a preference, it does not cause an immediate change unless isPreferredSpatialEnvironmentActive is already true . Once the device enters a state where the XR background can be changed and the SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT capability is available, the preferred spatial environment for the application will be automatically displayed.
পছন্দকে 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 is used to set the preferred passthrough opacity for an app. This method only sets a preference and does not cause an immediate change unless the SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL capability is available. Once the device enters a state where the passthrough opacity can be changed, and the SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL capability is available, the preferred passthrough opacity for the application will be automatically applied.
The values for passthrough opacity preference range from 0.0f (zero opacity, where the passthrough surface is not visible) to 1.0f (full opacity, where the passthrough surface hides the spatial environment). The setPassthroughOpacityPreference parameter is a nullable float. Setting the value to null indicates that the app has no passthrough opacity preference, and will return passthrough control to the system.
মৌলিক ব্যবহার
এই কোড স্নিপেটটি পাসথ্রু অস্বচ্ছতা পছন্দ সেট করে। এই পছন্দটি মনে রাখা হবে এবং অ্যাপটিতে পাসথ্রু অস্বচ্ছতা সেট করার ক্ষমতা থাকলে এটি প্রয়োগ করা হবে।
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