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

প্রযোজ্য XR ডিভাইস
এইসব XR ডিভাইসের জন্য অভিজ্ঞতা তৈরি করতে এই নির্দেশিকা আপনাকে সাহায্য করে।
XR হেডসেট
ওয়্যারড XR গ্লাস

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

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

সাপোর্ট করা মেটেরিয়ালের দ্রুত ওভারভিউ পেতে, Khronos সাইটে glTF PBR প্রপার্টি দেখুন। এইসব প্রপার্টি ও অন্যান্য প্রপার্টির সাহায্যে কীভাবে আপনার 3D মডেল কাস্টমাইজ করবেন তা জানতে, আপনার অ্যাপে 3D মডেল কাস্টমাইজ করুন লিঙ্কে যান

আপনার অ্যাসেট ফোল্ডারে একটি glTF ফাইল যোগ করুন

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

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

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

Android XR-এ 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)

Compose SceneCoreEntity ব্যবহার করে 3D মডেল প্লেস করা

SceneCoreEntity ব্যবহার করে 3D মডেল প্লেস করতে, আপনাকে প্রথমে GltfModel.create() ব্যবহার করে glTF মেমরিতে লোড করতে হবে। তারপরে, আপনি SceneCore কম্পোনেন্টকে Compose for XR লেআউটের সাথে কানেক্ট করতে, SceneCoreEntity-এ একটি 3D মডেল প্লেস করতে পারবেন। আপনার লেআউটে 3D অবজেক্ট প্লেস করতে SceneCoreEntity ব্যবহার করুন লিঙ্কে দেখুন।

Jetpack Scenecore ব্যবহার করে 3D মডেল প্লেস করা

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

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

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

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

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

এখন আপনার অ্যাপ চালালে লোড করা 3D মডেল দেখতে পাবেন।

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

Scene Viewer ব্যবহার করে 3D মডেল লোড করা

আপনি যদি সাধারণ ইন্টার‍্যাকশন ক্ষমতা সহ 3D মডেল লোড করার সবচেয়ে সহজ উপায় খুঁজছেন, তাহলে আপনি মোবাইলে যেভাবে Scene Viewer ব্যবহার করেন সেভাবেই ব্যবহার করতে পারেন। Android XR ও মোবাইলে Scene Viewer-এর মধ্যে মূল পার্থক্য হল, Scene Viewer শুধুমাত্র glTF ফাইলের দিকে নির্দেশ করে এমন ফাইল URI প্যারামিটারকে সাপোর্ট করে এবং অন্যান্য সব প্যারামিটার উপেক্ষা করা হয়।

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

Android XR-এ Scene Viewer-এ 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.
}

Scene Viewer-এর ইন্ট্যার‍্যাক্টিভিটি বিকল্প সম্পর্কে আরও জানতে, আমাদের 3D মডেল ডিজাইন ডকুমেন্টেশন দেখুন।

glTF এক্সটেনশন

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