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

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

3D মডেলের সাথে কাজ করার সময়, Jetpack XR SDK glTF 2.0 ওপেন স্ট্যান্ডার্ডে কাজ করে। Jetpack XR SDK-এর মাধ্যমে তৈরি করা অ্যাপ Android XR রেন্ডার করার সময়, glTF 2.0 স্ট্যান্ডার্ডে(কাজ করে এমন এক্সটেনশন সহ) উল্লেখ করা ফিজিক্যালি বেসড রেন্ডারিং(PBR) টেকনিকের মাধ্যমে 3D মডেল রেন্ডার করা হবে। 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 ব্যবহার করুন। SpatialGltfModel হল একটি সাবস্পেস কম্পোজেবল যা আপনাকে স্পেশিয়াল লেআউটে glTF ফর্ম্যাটে 3D মডেল যোগ করতে দেয়। এই API অ্যাসেট লোড করা এবং সেগুলির স্ট্যাটাস ম্যানেজ করার প্রসেসকে সহজ করে তোলে।

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

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

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

SpatialGltfModel(state = modelState, modifier = SubspaceModifier)

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট

  • অ্যাসিঙ্ক্রোনাস লোডিং: মডেলটি অ্যাসিঙ্ক্রোনাসভাবে লোড করা হয়। প্রাথমিক কম্পোজিশনের সময়, এর অন্তর্নিহিত সাইজ শূন্য হতে পারে; মডেল রেডি হয়ে গেলে লেআউট আবার পরিমাপ করা হয়।
  • কন্ট্রোলিং স্টেট: লোডিং স্ট্যাটাস কোয়েরি করতে বা অ্যানিমেশন কন্ট্রোল করতে SpatialGltfModelState.status ব্যবহার করুন।
  • সাইজ ও স্কেলিং: ডিফল্ট হিসেবে, লেআউটের সাইজ অ্যাসেটের বাউন্ডিং বক্সের সাথে ম্যাচ করে। আপনি SubspaceModifier.size-এর মাধ্যমে এটি ওভাররাইড করতে পারবেন যাতে মডেলটি নির্দিষ্ট সীমার মধ্যে ফিট করার জন্য সমানভাবে স্কেল করা যায়।

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

SceneCoreEntity ব্যবহার করে 3D মডেল প্লেস করতে, আপনাকে প্রথমে GltfModel.create() ব্যবহার করে glTF মেমরিতে লোড করতে হবে। তারপর আপনি SceneCoreEntity-এ 3D মডেল প্লেস করতে পারবেন যাতে XR লেআউটের জন্য Compose-এর সাথে SceneCore কম্পোনেন্ট ব্রিজ করা যায়। আপনার লেআউটে 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-এর মধ্যে মূল পার্থক্য হল, Scene Viewer শুধুমাত্র glTF ফাইলের দিকে পয়েন্ট করা ফাইল URI প্যারামিটারকে সাপোর্ট করে এবং অন্যান্য সব প্যারামিটারকে উপেক্ষা করা হয়।

Scene Viewer হল একটি আলাদা অ্যাপ যা ইনটেন্ট ব্যবহার করে চালু করা হয় এবং ফুল স্পেস মোডে রান করে। এর ফলে, আপনি এটি চালু করলে, আপনার অ্যাপ আর দেখা যাবে না এবং 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, উভয়ের মাধ্যমেই উপলভ্য।