আপনার অ্যাপে 3D মডেল যোগ করুন

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

থ্রিডি মডেল নিয়ে কাজ করার সময়, জেটপ্যাক এক্সআর এসডিকে (Jetpack XR SDK) জিএলটিএফ ২.০ (glTF 2.0 ) ওপেন স্ট্যান্ডার্ডকে সমর্থন করে। যখন অ্যান্ড্রয়েড এক্সআর (Android XR) জেটপ্যাক এক্সআর এসডিকে দিয়ে তৈরি অ্যাপ রেন্ডার করে, তখন থ্রিডি মডেলগুলো জিএলটিএফ ২.০ স্ট্যান্ডার্ডে (সমর্থিত এক্সটেনশনসহ ) উল্লেখিত ফিজিক্যালি বেসড রেন্ডারিং (PBR) কৌশল ব্যবহার করে রেন্ডার করা হয়। বেশিরভাগ ডিজিটাল কন্টেন্ট ক্রিয়েশন (dcc) টুল, যেমন অটোডেস্ক মায়া (Autodesk Maya), ম্যাক্সন জি-ব্রাশ (Maxon ZBrush) , ব্লেন্ডার (Blender ) এবং স্প্লাইন (Spline ) থ্রিডি মডেলগুলোকে জিএলটিএফ ফরম্যাটে ( .gltf বা .glb ফাইল) এক্সপোর্ট করতে পারে।

যদি ব্যবহারকারী বা আপনার অ্যাপের মাধ্যমে একটি SpatialEnvironment স্কাইবক্স নির্দিষ্ট করা থাকে, তাহলে 3D মডেলগুলো সেই এনভায়রনমেন্ট স্কাইবক্স থেকে প্রাপ্ত আলোর তথ্য দ্বারা আলোকিত হবে। প্রতিফলক উপাদান এবং স্পেকুলার হাইলাইটগুলোও এনভায়রনমেন্ট স্কাইবক্সকে প্রতিফলিত করবে। যদি পাসথ্রু সক্রিয় করা থাকে, তাহলে আলো, প্রতিফলন এবং স্পেকুলার হাইলাইটগুলো একটিমাত্র দিকনির্দেশক আলোযুক্ত উজ্জ্বল ঘরের উপর ভিত্তি করে হবে।

সমর্থিত উপাদানগুলো সম্পর্কে দ্রুত ধারণা পেতে, ক্রোনোস সাইটে থাকা glTF PBR Properties দেখুন।

Jetpack XR SDK দিয়ে তৈরি অ্যাপগুলোর 3D মডেল লোড করার দুটি প্রধান উপায় রয়েছে।

অ্যাক্টিভিটিস্পেসে একটি 3D মডেল রাখুন

আপনার glTF ফাইলটি তৈরি হয়ে গেলে, পরবর্তী ধাপ হলো এটিকে অ্যান্ড্রয়েড স্টুডিও-এর অ্যাসেটস ডিরেক্টরিতে যুক্ত করা। আপনার অ্যাসেট টাইপগুলোকে আরও ভালোভাবে সাজানোর জন্য আমরা একটি models ডিরেক্টরি তৈরি করার পরামর্শ দিই।

/models ডিরেক্টরিতে অ্যাসেট যোগ করার উদাহরণ

glTF মডেলটি লোড করতে, GltfModel.create() কল করুন।

val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))

এই পর্যায়ে, মডেলটি মেমরিতে লোড হয়ে যায়, কিন্তু এখনও রেন্ডার করা হয় না। যদি আপনার অনেকগুলো ৩ডি মডেল লোড করার থাকে অথবা আপনার মডেলটি আকারে বড় হয়, তবে সেগুলোকে আগে থেকেই অ্যাসিঙ্ক্রোনাসভাবে লোড করে রাখা ভালো। এর ফলে, ব্যবহারকারীদের আপনার মডেলগুলো মেমরিতে লোড হওয়ার জন্য অপেক্ষা করতে হয় না।

আমাদের glTF-টিকে ActivitySpace এ যোগ করতে হবে। একটি এনটিটি তৈরি করতে এবং সেটিকে ActivitySpace এ স্থাপন করতে GltfModelEntity.create কল করুন। সর্বোত্তম অনুশীলন হিসেবে, আপনার যাচাই করে নেওয়া উচিত যে অ্যাপটি এমন একটি অবস্থায় আছে যা স্পেশিয়াল ক্যাপাবিলিটি সমর্থন করে

if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

এখন আপনার অ্যাপটি চালালে লোড হওয়া 3D মডেলটি দেখতে পাবেন।

লোড করা 3D মডেলের উদাহরণ

SpatialGltfModel ব্যবহার করে একটি 3D অবজেক্ট যোগ করুন

অ্যান্ড্রয়েড এক্সআর 3D মডেলের জন্য glTF ফরম্যাট সমর্থন করে, যা সাধারণত .glb ফাইল হিসেবে সংরক্ষিত হয়। এই অবজেক্টগুলো আপনার লেআউটে যোগ করতে, SpatialGltfModel কম্পোজেবলটি ব্যবহার করুন। এই API অ্যাসেট লোড করা এবং সেগুলোর স্টেট পরিচালনা করার প্রক্রিয়াকে সহজ করে তোলে।

একটি মডেল প্রদর্শন করতে, প্রথমে rememberSpatialGltfModelState ব্যবহার করে এর উৎস এবং অবস্থা নির্ধারণ করুন। আপনি আপনার অ্যাপের assets ফোল্ডার, একটি URI , বা raw data থেকে মডেল লোড করতে পারেন।

val modelState = rememberSpatialGltfModelState(
    source = SpatialGltfModelSource.fromPath(
        Paths.get("models/model_name.glb")
    )
)

একবার স্টেটটি সংজ্ঞায়িত হয়ে গেলে, সেটিকে একটি সাবস্পেসের মধ্যে রেন্ডার করার জন্য SpatialGltfModel কম্পোজেবলটি ব্যবহার করুন।

SpatialGltfModel(state = modelState, modifier = SubspaceModifier)

একটি 3D মডেলকে Compose SceneCoreEntity-এর মধ্যে রাখুন।

SceneCoreEntity ব্যবহার করে একটি 3D মডেল স্থাপন করতে, আপনাকে প্রথমে GltfModel.create() ব্যবহার করে glTF ফাইলটি মেমরিতে লোড করতে হবে। এরপর আপনি SceneCore কম্পোনেন্টগুলোকে Compose for XR লেআউটের সাথে সংযুক্ত করার জন্য একটি SceneCoreEntity মধ্যে 3D মডেল স্থাপন করতে পারেন। আপনার লেআউটে একটি 3D অবজেক্ট স্থাপন করতে "Use a SceneCoreEntity" অংশটি দেখুন।

সিন ভিউয়ার ব্যবহার করে একটি 3D মডেল লোড করুন

আপনি যদি সাধারণ ইন্টারঅ্যাকশন ক্ষমতা সহ একটি 3D মডেল লোড করার সবচেয়ে সহজ উপায় খুঁজে থাকেন, তাহলে আপনি মোবাইলের মতোই সিন ভিউয়ার ব্যবহার করতে পারেন। অ্যান্ড্রয়েড এক্সআর এবং মোবাইলের সিন ভিউয়ারের মধ্যে একটি প্রধান পার্থক্য হলো, সিন ভিউয়ার শুধুমাত্র glTF ফাইলের দিকে নির্দেশকারী ফাইল ইউআরআই প্যারামিটারটি সমর্থন করে এবং অন্য সব প্যারামিটার উপেক্ষা করা হয়।

সিন ভিউয়ার একটি আলাদা অ্যাপ যা একটি ইন্টেন্ট ব্যবহার করে চালু করা হয় এবং ফুল স্পেস মোডে চলে। ফলে, যখন আপনি এটি চালু করবেন, আপনার অ্যাপটি আর দেখা যাবে না এবং সিন ভিউয়ার ফোকাস পাবে। আপনার পরিবর্তন করা যেকোনো এনভায়রনমেন্ট ব্যবহারকারীর সিস্টেম প্রেফারেন্সে রিসেট হয়ে যাবে।

অ্যান্ড্রয়েড এক্সআর-এর সিন ভিউয়ারে একটি glTF ফাইল দেখার জন্য Intent ব্যবহারের একটি উদাহরণ নিচে দেওয়া হলো:

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/Avocado/glTF/Avocado.gltf"
val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
val intentUri =
    Uri.parse("https://arvr.google.com/scene-viewer/1.2")
        .buildUpon()
        .appendQueryParameter("file", url)
        .build()
sceneViewerIntent.setData(intentUri)
try {
    startActivity(sceneViewerIntent)
} catch (e: ActivityNotFoundException) {
    // There is no activity that could handle the intent.
}

সিন ভিউয়ারের ইন্টারঅ্যাক্টিভিটি অপশনগুলো সম্পর্কে আরও তথ্যের জন্য, আমাদের 3D মডেল ডিজাইন ডকুমেন্টেশন দেখুন।

glTF এক্সটেনশন

Jetpack XR SDK বেশ কিছু gfTF এক্সটেনশন সমর্থন করে, যা 3D মডেলের কার্যক্ষমতা বৃদ্ধি করে। এই ক্ষমতাগুলো GltfModelEntity এবং Scene Viewer উভয়ের মাধ্যমেই পাওয়া যায়।