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

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

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

সমর্থিত উপকরণগুলির একটি দ্রুত ওভারভিউয়ের জন্য, Khronos সাইটে glTF PBR বৈশিষ্ট্যগুলি পড়ুন৷

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

ActivitySpace এ একটি 3D মডেল রাখুন

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

/মডেল ডিরেক্টরিতে সম্পদ যোগ করার উদাহরণ

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

val gltfModel = GltfModel.create(session, "models/saturn_rings.glb").await()

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

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

if (session.scene.spatialCapabilities
    .hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)
) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

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

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

একটি রচনা ভলিউমে একটি 3D মডেল রাখুন

যদিও আপনাকে GltfModel.create() ব্যবহার করে মেমরিতে glTF লোড করতে হবে, আপনি XR-এর জন্য Jetpack Compose দিয়ে আপনার UI তৈরি করলে আপনি 3D মডেলগুলিকে একটি Volume রাখতে পারেন। আপনার লেআউটে একটি 3D বস্তু স্থাপন করতে একটি ভলিউম ব্যবহার করুন দেখুন।

অ্যানিমেট 3D মডেল

glTF স্পেসিফিকেশনের অংশ হিসাবে, 3D মডেলগুলিতে অ্যানিমেশন এমবেড করা থাকতে পারে। কঙ্কাল (কাঁটা), অনমনীয়, মর্ফ টার্গেট (মিশ্রিত আকার) অ্যানিমেশনগুলি সমস্ত জেটপ্যাক XR SDK-তে সমর্থিত। KHR_animation_pointer glTF এক্সটেনশনের সাহায্যে তৈরি ম্যাটেরিয়াল অ্যানিমেশনগুলিও সমর্থিত।

একটি অ্যানিমেশন চালাতে, startAnimation কল করুন এবং অ্যানিমেশনের নাম উল্লেখ করুন। আপনি ঐচ্ছিকভাবে উল্লেখ করতে পারেন যে অ্যানিমেশনটি অনির্দিষ্টকালের জন্য লুপ করা উচিত কিনা।

gltfEntity.startAnimation(loop = true, animationName = "Walk")

startAnimation দ্বিতীয়বার কল করলে, বর্তমান অ্যানিমেশন বন্ধ হয়ে যাবে এবং নতুন অ্যানিমেশন শুরু হবে।

আপনি getAnimationState() এর মাধ্যমে অ্যানিমেশনের বর্তমান অবস্থা জিজ্ঞাসা করতে পারেন।

startAnimation() কল করার সময় নির্দিষ্ট করা অ্যানিমেশন নামটি বিদ্যমান না থাকলে, কলটি নিঃশব্দে ব্যর্থ হয়, যেকোনো চলমান অ্যানিমেশন বন্ধ হয়ে যায় এবং getAnimationState() STOPPED ফেরত দেয়।

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

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

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

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

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/FlightHelmet/glTF/FlightHelmet.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.setDataAndType(intentUri, "model/gltf-binary")
startActivity(sceneViewerIntent)

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

glTF এক্সটেনশন

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

,

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

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

সমর্থিত উপকরণগুলির একটি দ্রুত ওভারভিউয়ের জন্য, Khronos সাইটে glTF PBR বৈশিষ্ট্যগুলি পড়ুন৷

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

ActivitySpace এ একটি 3D মডেল রাখুন

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

/মডেল ডিরেক্টরিতে সম্পদ যোগ করার উদাহরণ

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

val gltfModel = GltfModel.create(session, "models/saturn_rings.glb").await()

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

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

if (session.scene.spatialCapabilities
    .hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)
) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

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

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

একটি রচনা ভলিউমে একটি 3D মডেল রাখুন

যদিও আপনাকে GltfModel.create() ব্যবহার করে মেমরিতে glTF লোড করতে হবে, আপনি XR-এর জন্য Jetpack Compose দিয়ে আপনার UI তৈরি করলে আপনি 3D মডেলগুলিকে একটি Volume রাখতে পারেন। আপনার লেআউটে একটি 3D বস্তু স্থাপন করতে একটি ভলিউম ব্যবহার করুন দেখুন।

অ্যানিমেট 3D মডেল

glTF স্পেসিফিকেশনের অংশ হিসাবে, 3D মডেলগুলিতে অ্যানিমেশন এমবেড করা থাকতে পারে। কঙ্কাল (কাঁটা), অনমনীয়, মর্ফ টার্গেট (মিশ্রিত আকার) অ্যানিমেশনগুলি সমস্ত জেটপ্যাক XR SDK-তে সমর্থিত। KHR_animation_pointer glTF এক্সটেনশনের সাহায্যে তৈরি ম্যাটেরিয়াল অ্যানিমেশনগুলিও সমর্থিত।

একটি অ্যানিমেশন চালাতে, startAnimation কল করুন এবং অ্যানিমেশনের নাম উল্লেখ করুন। আপনি ঐচ্ছিকভাবে উল্লেখ করতে পারেন যে অ্যানিমেশনটি অনির্দিষ্টকালের জন্য লুপ করা উচিত কিনা।

gltfEntity.startAnimation(loop = true, animationName = "Walk")

startAnimation দ্বিতীয়বার কল করলে, বর্তমান অ্যানিমেশন বন্ধ হয়ে যাবে এবং নতুন অ্যানিমেশন শুরু হবে।

আপনি getAnimationState() এর মাধ্যমে অ্যানিমেশনের বর্তমান অবস্থা জিজ্ঞাসা করতে পারেন।

startAnimation() কল করার সময় নির্দিষ্ট করা অ্যানিমেশন নামটি বিদ্যমান না থাকলে, কলটি নিঃশব্দে ব্যর্থ হয়, যেকোনো চলমান অ্যানিমেশন বন্ধ হয়ে যায় এবং getAnimationState() STOPPED ফেরত দেয়।

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

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

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

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

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/FlightHelmet/glTF/FlightHelmet.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.setDataAndType(intentUri, "model/gltf-binary")
startActivity(sceneViewerIntent)

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

glTF এক্সটেনশন

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

,

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

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

সমর্থিত উপকরণগুলির একটি দ্রুত ওভারভিউয়ের জন্য, Khronos সাইটে glTF PBR বৈশিষ্ট্যগুলি পড়ুন৷

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

ActivitySpace এ একটি 3D মডেল রাখুন

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

/মডেল ডিরেক্টরিতে সম্পদ যোগ করার উদাহরণ

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

val gltfModel = GltfModel.create(session, "models/saturn_rings.glb").await()

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

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

if (session.scene.spatialCapabilities
    .hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)
) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

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

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

একটি রচনা ভলিউমে একটি 3D মডেল রাখুন

যদিও আপনাকে GltfModel.create() ব্যবহার করে মেমরিতে glTF লোড করতে হবে, আপনি XR-এর জন্য Jetpack Compose দিয়ে আপনার UI তৈরি করলে আপনি 3D মডেলগুলিকে একটি Volume রাখতে পারেন। আপনার লেআউটে একটি 3D বস্তু স্থাপন করতে একটি ভলিউম ব্যবহার করুন দেখুন।

অ্যানিমেট 3D মডেল

glTF স্পেসিফিকেশনের অংশ হিসাবে, 3D মডেলগুলিতে অ্যানিমেশন এমবেড করা থাকতে পারে। কঙ্কাল (কাঁটা), অনমনীয়, মর্ফ টার্গেট (মিশ্রিত আকার) অ্যানিমেশনগুলি সমস্ত জেটপ্যাক XR SDK-তে সমর্থিত। KHR_animation_pointer glTF এক্সটেনশনের সাহায্যে তৈরি ম্যাটেরিয়াল অ্যানিমেশনগুলিও সমর্থিত।

একটি অ্যানিমেশন চালাতে, startAnimation কল করুন এবং অ্যানিমেশনের নাম উল্লেখ করুন। আপনি ঐচ্ছিকভাবে উল্লেখ করতে পারেন যে অ্যানিমেশনটি অনির্দিষ্টকালের জন্য লুপ করা উচিত কিনা।

gltfEntity.startAnimation(loop = true, animationName = "Walk")

startAnimation দ্বিতীয়বার কল করলে, বর্তমান অ্যানিমেশন বন্ধ হয়ে যাবে এবং নতুন অ্যানিমেশন শুরু হবে।

আপনি getAnimationState() এর মাধ্যমে অ্যানিমেশনের বর্তমান অবস্থা জিজ্ঞাসা করতে পারেন।

startAnimation() কল করার সময় নির্দিষ্ট করা অ্যানিমেশন নামটি বিদ্যমান না থাকলে, কলটি নিঃশব্দে ব্যর্থ হয়, যেকোনো চলমান অ্যানিমেশন বন্ধ হয়ে যায় এবং getAnimationState() STOPPED ফেরত দেয়।

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

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

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

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

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/FlightHelmet/glTF/FlightHelmet.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.setDataAndType(intentUri, "model/gltf-binary")
startActivity(sceneViewerIntent)

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

glTF এক্সটেনশন

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

,

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

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

সমর্থিত উপকরণগুলির একটি দ্রুত ওভারভিউয়ের জন্য, Khronos সাইটে glTF PBR বৈশিষ্ট্যগুলি পড়ুন৷

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

ActivitySpace এ একটি 3D মডেল রাখুন

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

/মডেল ডিরেক্টরিতে সম্পদ যোগ করার উদাহরণ

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

val gltfModel = GltfModel.create(session, "models/saturn_rings.glb").await()

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

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

if (session.scene.spatialCapabilities
    .hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)
) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

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

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

একটি রচনা ভলিউমে একটি 3D মডেল রাখুন

যদিও আপনাকে GltfModel.create() ব্যবহার করে মেমরিতে glTF লোড করতে হবে, আপনি XR-এর জন্য Jetpack Compose দিয়ে আপনার UI তৈরি করলে আপনি 3D মডেলগুলিকে একটি Volume রাখতে পারেন। আপনার লেআউটে একটি 3D বস্তু স্থাপন করতে একটি ভলিউম ব্যবহার করুন দেখুন।

অ্যানিমেট 3D মডেল

glTF স্পেসিফিকেশনের অংশ হিসাবে, 3D মডেলগুলিতে অ্যানিমেশন এমবেড করা থাকতে পারে। কঙ্কাল (কাঁটা), অনমনীয়, মর্ফ টার্গেট (মিশ্রিত আকার) অ্যানিমেশনগুলি সমস্ত জেটপ্যাক XR SDK-তে সমর্থিত। KHR_animation_pointer glTF এক্সটেনশনের সাহায্যে তৈরি ম্যাটেরিয়াল অ্যানিমেশনগুলিও সমর্থিত।

একটি অ্যানিমেশন চালাতে, startAnimation কল করুন এবং অ্যানিমেশনের নাম উল্লেখ করুন। আপনি ঐচ্ছিকভাবে উল্লেখ করতে পারেন যে অ্যানিমেশনটি অনির্দিষ্টকালের জন্য লুপ করা উচিত কিনা।

gltfEntity.startAnimation(loop = true, animationName = "Walk")

startAnimation দ্বিতীয়বার কল করলে, বর্তমান অ্যানিমেশন বন্ধ হয়ে যাবে এবং নতুন অ্যানিমেশন শুরু হবে।

আপনি getAnimationState() এর মাধ্যমে অ্যানিমেশনের বর্তমান অবস্থা জিজ্ঞাসা করতে পারেন।

startAnimation() কল করার সময় নির্দিষ্ট করা অ্যানিমেশন নামটি বিদ্যমান না থাকলে, কলটি নিঃশব্দে ব্যর্থ হয়, যেকোনো চলমান অ্যানিমেশন বন্ধ হয়ে যায় এবং getAnimationState() STOPPED ফেরত দেয়।

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

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

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

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

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/FlightHelmet/glTF/FlightHelmet.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.setDataAndType(intentUri, "model/gltf-binary")
startActivity(sceneViewerIntent)

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

glTF এক্সটেনশন

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