আপনার অ্যাপে একটি 3D মডেল যুক্ত করার পরে, আপনি এটিকে কাস্টমাইজ করে এর ভিজ্যুয়াল এবং ইন্টারেক্টিভ অভিজ্ঞতা উন্নত করতে পারেন। উদাহরণস্বরূপ, আপনি এমবেডেড glTF অ্যানিমেশন প্লে এবং নিয়ন্ত্রণ করতে পারেন, কাস্টম মেটেরিয়াল প্রোপার্টি (যেমন বেস কালার বা মেটালিক রাফনেস) নির্ধারণ করতে পারেন এবং আপনার 3D মডেলে কাস্টম টেক্সচার প্রয়োগ করতে পারেন। এই ক্ষমতাগুলো আপনাকে রানটাইমে গতিশীলভাবে একটি অবজেক্টের চেহারা এবং আচরণ পরিবর্তন করার সুযোগ দেয়।
3D মডেলগুলিকে অ্যানিমেট করুন
glTF স্পেসিফিকেশনের অংশ হিসেবে, 3D মডেলে এমবেডেড অ্যানিমেশন থাকতে পারে। Jetpack XR SDK-তে স্কেলেটাল (রিগড), রিজিড এবং মর্ফ টার্গেট (ব্লেন্ড শেপ) অ্যানিমেশন সবই সমর্থিত। KHR_animation_pointer glTF এক্সটেনশন দিয়ে তৈরি ম্যাটেরিয়াল অ্যানিমেশনও সমর্থিত।
একটি অ্যানিমেশন চালাতে, animations তালিকা থেকে নির্দিষ্ট ট্র্যাকের নামটি উল্লেখ করুন। প্লে করা শুরু করতে GltfAnimation.start() কল করুন। আপনি ঐচ্ছিকভাবে GltfAnimationStartOptions ব্যবহার করে গতি, সিক টাইম এবং অ্যানিমেশনটি লুপ হবে কি না তা নির্দিষ্ট করতে পারেন।
val animation = gltfEntity.animations.find { it.name == "Walk" } animation?.start(GltfAnimationStartOptions(shouldLoop = true))
আপনি অ্যানিমেশন pause() , resume() , এবং stop() করতে পারেন, সেইসাথে অ্যানিমেশন ট্র্যাকের একটি নির্দিষ্ট সময়ে যেতে seekTo() ব্যবহার করতে পারেন। অ্যানিমেশনের বর্তমান অবস্থা জানতে GltfAnimation.AnimationState ব্যবহার করুন।
আপনার 3D মডেলের উপাদানের বৈশিষ্ট্যগুলি কাস্টমাইজ করুন
Jetpack XR-এর ম্যাটেরিয়াল সিস্টেমটি glTF™ 2.0 স্পেসিফিকেশনের উপর ভিত্তি করে তৈরি, এবং 3D মডেলগুলো ফিজিক্যালি-বেসড রেন্ডারিং (PBR) ব্যবহার করে রেন্ডার করা হয়। ব্যবহারকারীর ইনপুট বা অ্যাপের বর্তমান অবস্থার উপর ভিত্তি করে কোনো অবজেক্টের চেহারা গতিশীলভাবে পরিবর্তন করার জন্য আপনি রানটাইমে ম্যাটেরিয়াল অ্যাট্রিবিউটগুলো সমন্বয় করতে পারেন।
একটি Material কোনো বস্তুর পৃষ্ঠতলের জন্য একগুচ্ছ দৃশ্যমান বৈশিষ্ট্য নির্ধারণ করে এবং দৃশ্যের আলোর সাথে সেই পৃষ্ঠতলটি কীভাবে মিথস্ক্রিয়া করবে তা স্থির করে।
Jetpack XR-এ, এই ম্যাটেরিয়ালগুলো তৈরি ও পরিবর্তন করার জন্য KhronosPbrMaterial এবং KhronosUnlitMaterial ক্লাসগুলো ব্যবহার করা হয়। নাম থেকেই বোঝা যায়, KhronosUnlitMaterials আলোহীন এবং দৃশ্যের আলো দ্বারা প্রভাবিত হয় না। KhronosPbrMaterial আপনাকে আরও বিস্তৃত পরিসরের বৈশিষ্ট্য কাস্টমাইজ করার সুযোগ দেয়, যেমন—শীনের রঙ, কোনো বস্তু কতটা ধাতব বা অমসৃণ হবে এবং সেটি আলো নির্গত করবে কি না।
Android XR-এর প্রতিটি সমর্থিত প্রপার্টি এবং কাস্টমাইজযোগ্য প্যারামিটার সম্পর্কে আরও তথ্যের জন্য, আমাদের রেফারেন্স ডকুমেন্টেশন দেখুন। এই প্রপার্টিগুলো আরও ভালোভাবে বোঝার জন্য, ক্রোনোস গ্লসারি দেখুন।

আপনার 3D মডেলের ম্যাটেরিয়াল প্রোপার্টি কাস্টমাইজ করতে, প্রথমে আপনাকে KhronosPbrMaterial ব্যবহার করে নতুন ম্যাটেরিয়ালটি তৈরি করতে হবে। আপনি যে ভিজ্যুয়াল অ্যাপিয়ারেন্সটি অর্জন করতে চাইছেন, তার জন্য আপনাকে উপযুক্ত AlphaMode সেট করতে হবে:
val pbrMaterial = KhronosPbrMaterial.create( session = xrSession, alphaMode = AlphaMode.OPAQUE )
এরপর, আপনি যে প্রোপার্টিগুলো পরিবর্তন করতে চান, সেগুলো নির্ধারণ করুন। এই উদাহরণে, আমরা বেস কালার পরিবর্তন করার জন্য setBaseColorFactor ব্যবহার করেছি। এই মেথডটির জন্য একটি Vector4 প্রয়োজন, যেখানে x , y , z , এবং w কম্পোনেন্টগুলো যথাক্রমে RGBA (লাল, সবুজ, নীল, এবং আলফা) ভ্যালুগুলোর সাথে সঙ্গতিপূর্ণ:
pbrMaterial.setBaseColorFactor( Vector4( x = 0.5f, y = 0.0f, z = 0.5f, w = 1.0f ) )
আপনার 3D মডেলের জন্য কাস্টম টেক্সচার তৈরি করুন
Texture হলো একটি ইমেজ অ্যাসেট যা আপনি একটি 3D মডেলের পৃষ্ঠে রঙ, বিবরণ বা অন্যান্য পৃষ্ঠের তথ্য যোগ করার জন্য প্রয়োগ করতে পারেন। Jetpack XR টেক্সচার API আপনাকে আপনার অ্যাপের /assets/ ফোল্ডার থেকে PNG ফাইলের মতো ইমেজ ডেটা অ্যাসিঙ্ক্রোনাসভাবে লোড করতে দেয়।
একটি টেক্সচার লোড করার সময়, আপনি একটি TextureSampler নির্দিষ্ট করতে পারেন, যা টেক্সচারটি কীভাবে রেন্ডার করা হবে তা নিয়ন্ত্রণ করে। স্যাম্পলারটি ফিল্টারিং বৈশিষ্ট্য (টেক্সচারটি তার আসল আকারের চেয়ে ছোট বা বড় দেখানোর জন্য) এবং র্যাপিং মোড (স্ট্যান্ডার্ড [0, 1] পরিসরের বাইরের স্থানাঙ্কগুলি পরিচালনা করার জন্য) নির্ধারণ করে। একটি Texture অবজেক্ট নিজে কেবল ডেটা; একটি 3D মডেলে ভিজ্যুয়াল প্রভাব ফেলার জন্য এটিকে অবশ্যই একটি Material এর সাথে যুক্ত করতে হবে।

একটি কাস্টম টেক্সচার তৈরি করতে, প্রথমে আপনাকে ইমেজ ফাইলটি আপনার /assets/ ফোল্ডারে সেভ করতে হবে। উত্তম অনুশীলন হিসেবে, আপনি ওই ফোল্ডারে একটি textures সাবডিরেক্টরিও তৈরি করতে পারেন।
উপযুক্ত ডিরেক্টরিতে ফাইলটি সেভ করার পর, Texture API) ব্যবহার করে টেক্সচারটি তৈরি করুন। প্রয়োজন হলে, এখানেই আপনি একটি ঐচ্ছিক TextureSampler প্রয়োগ করতে পারবেন।
val texture = Texture.create( session = xrSession, path = Path("textures/texture_file.png") )
এরপর, টেক্সচারের ধরন নির্ধারণ করুন এবং এর সংশ্লিষ্ট প্যারামিটারগুলো সেট করুন। এই উদাহরণে, আমরা একটি অক্লুশন টেক্সচার প্রয়োগ করছি এবং এর স্ট্রেংথ সেট করছি:
pbrMaterial.setOcclusionTexture( texture = texture, strength = 1.0f )
আপনার 3D অবজেক্টগুলিতে ম্যাটেরিয়াল এবং টেক্সচার প্রয়োগ করুন।
নতুন ম্যাটেরিয়াল বা টেক্সচার প্রয়োগ করতে, আপনার glTF নোডের একটি নির্দিষ্ট নোডের জন্য বিদ্যমান ম্যাটেরিয়ালটিকে ওভাররাইড করুন। এটি করার জন্য GltfModelNode এ setMaterialOverride কল করুন:
gltfModelNode.setMaterialOverride( material = pbrMaterial )
নতুন তৈরি করা ম্যাটেরিয়ালগুলো অপসারণ করতে, আপনার GltfModelNode এর পূর্বে ওভাররাইড করা নোডটিতে clearMaterialOverride কল করুন। এটি আপনার 3D মডেলকে তার ডিফল্ট অবস্থায় ফিরিয়ে দেবে:
gltfModelNode.clearMaterialOverride()
glTF এবং glTF লোগো হলো ক্রোনোস গ্রুপ ইনকর্পোরেটেডের ট্রেডমার্ক।