HeadlinesBriefing favicon HeadlinesBriefing.com

Bevy অ্যানিমেশন গাইড: প্লেয়ার এবং গ্রাফ

Hacker News •
×

তাই আপনি এইমাত্র একটি ফ্রি অ্যাসেট ওয়েবসাইট থেকে একটি অ্যানিমেটেড 3D চরিত্রের .glb ফাইল ডাউনলোড করেছেন। আপনার একটি বেসিক Bevy অ্যাপ্লিকেশন চলছে। এখন আপনি আপনার Bevy অ্যাপে আপনার চরিত্রটি স্পন করতে চান। যথেষ্ট সহজ, সম্ভবত এর জন্য একটি ফাংশন আছে। আপনি Bevy-এর ওয়েবসাইটে বেসিক Animated Mesh উদাহরণটি দেখুন... এবং এটি দ্রুত স্পষ্ট হয়ে যায় যে জিনিসগুলি আপনার আশা মতো সহজ নয়। অনেক সেটআপ করার আছে, অ্যানিমেশন-সম্পর্কিত টাইপ যার সঠিক উদ্দেশ্য স্পষ্ট নয়... আপনি উদাহরণগুলিকে আপনার প্রয়োজনের সাথে মোটামুটি দ্রুত খাপ খাইয়ে নিতে সক্ষম হতে পারেন, কিন্তু উদাহরণগুলির উপর ভিত্তি করে Bevy-তে অ্যানিমেশন কীভাবে কাজ করে তার একটি প্রকৃত মানসিক মডেল গঠন করতে কিছু গুরুতর চিন্তাভাবনা লাগবে।

এই পোস্টটি যা আমি কয়েক সপ্তাহ আগে Bevy-তে অ্যানিমেশন বোঝার চেষ্টা করার সময় চেয়েছিলাম। আমি ধাপে ধাপে, Bevy-তে মৌলিক অ্যানিমেশন মোকাবেলা করার জন্য যথেষ্ট মানসিক মডেল তৈরি করা শুরু করি। তারপর আমি আপনাকে অফিসিয়াল উদাহরণের মাধ্যমে নিয়ে যাই, ব্যাখ্যা করি যে এটি সেই মানসিক মডেলের সাথে কীভাবে সম্পর্কিত, এবং এমন পদ্ধতিগুলির মুখোমুখি হওয়ার সময় আপনার হাতও ধরে রাখি যা আপনি এখনও সম্মুখীন নাও হতে পারেন। যদি আপনি Bevy-এর ECS-এর মৌলিক বিষয়গুলির সাথে স্বাচ্ছন্দ্য বোধ করেন, আপনি এই পোস্টের লক্ষ্য দর্শক।

প্রথম অন্তর্দৃষ্টি: আসুন এক সেকেন্ডের জন্য Bevy এবং ECS ভুলে যাই, এবং (খুব বিমূর্তভাবে) চিন্তা করি একটি অ্যানিমেটেড 3D মডেলকে সরাতে কী লাগে। আপনার দুটি উপাদান দরকার: একটি স্পন করা 3D মডেল (বা এটির কিছু ধরণের রেফারেন্স), একটি অ্যানিমেশন যা চালানো হবে (বা এটির কিছু ধরণের রেফারেন্স)। তাই প্রথমে, আপনি যে উপায়ে একটি অ্যানিমেশন চালানোর আশা করতে পারেন তা এরকম কিছু: my_model.play_animation(my_animation); এখানে আমাদের মানসিক মডেল এখন পর্যন্ত: এখন এটি আসলে একটি প্রকৃত Bevy ফাংশন যেভাবে কাজ করে তার কিছুটা কাছাকাছি, যথা AnimationPlayer টাইপ থেকে play পদ্ধতি... বা অন্তত এটি হবে, যদি এর self প্রকৃতপক্ষে একটি 3D মডেলকে নির্দেশ করে, এবং এর animation আর্গুমেন্ট প্রকৃতপক্ষে একটি অ্যানিমেশনকে নির্দেশ করে। এখন, তবে, এটি স্পষ্ট নয় যে তারা তা করে। তবে আসুন আরও বিস্তারিতভাবে দেখি যে আমাদের দুটি উপাদান Bevy-তে কীভাবে উপস্থাপিত হয়, এবং সম্ভবত আমরা আমাদের অন্তর্দৃষ্টিকে play ফাংশন যেভাবে কাজ করে তার সাথে মিলিয়ে দিতে পারি।

AnimationPlayer: একটি 3D মডেলের অ্যানিমেশন নিয়ন্ত্রণ করার একটি উপায়। ধরা যাক আপনি একটি .glb ফাইল থেকে একটি 3D মডেল স্পন করেন। আদর্শভাবে, আপনি স্পন করা সত্তার আইডি ব্যবহার করে এটিকে নির্দেশ করতে চান, তবে 3D মডেলগুলি সাধারণত একটি একক সত্তা হিসাবে স্পন হয় না, বরং সত্তার একটি শ্রেণিবিন্যাস হিসাবে: আপনার মডেলটি অ্যানিমেট করতে, আপনাকে অন্য কোনও উপায়ে এটিকে নির্দেশ করতে হবে। Bevy-তে ঠিক এটি করার জন্য একটি প্রক্রিয়া রয়েছে — অ্যানিমেশনের জন্য একটি 3D মডেলকে নির্দেশ করা — AnimationPlayer টাইপের আকারে। AnimationPlayer একটি কম্পোনেন্ট যা স্বয়ংক্রিয়ভাবে একটি সত্তায় ঢোকানো হয়... একটি অ্যানিমেটেবল 3D মডেলের সাথে সম্পর্কিত সত্তা শ্রেণিবিন্যাসের কোথাও, যখন সেই মডেলটি স্পন হয়। একবার আপনি একটি AnimationPlayer পেয়ে গেলে, আপনি এটিকে একটি অ্যানিমেশন চালাতে/বিরাম দিতে বলতে পারেন, বর্তমানে চলমান একটি অ্যাক্সেস করতে পারেন... তবে এটি ধরে নেয় যে আপনার প্রথমে অ্যানিমেশন আছে! আসুন এখন সেগুলিতে ফোকাস করি।

AnimationGraph: অ্যানিমেশন সংরক্ষণ এবং একত্রিত করার একটি উপায়। Bevy-তে অ্যানিমেশন উপস্থাপনের উপায়টি কিছুটা জটিল, কারণ আপনি সাধারণত যা পরিচালনা করবেন তা একক অ্যানিমেশন নয়, বরং একটি ডেটা কাঠামোর উদাহরণ যা একসাথে বেশ কয়েকটি অ্যানিমেশন সংরক্ষণ করতে এবং একে অপরের সাথে একত্রিত করতে সক্ষম। সেই কাঠামোটি হল AnimationGraph। আমি এখানে AnimationGraphs কীভাবে ব্যবহার করা হয় তার বিবরণে যাব না; একবার আপনি সহজ অ্যানিমেশনগুলির সাথে স্বাচ্ছন্দ্য বোধ করলে, আপনি AnimationGraph উদাহরণের সাথে সাধারণ অ্যানিমেশন গ্রাফ সম্পর্কে আরও শিখতে পারেন। আপাতত আমরা এমন ক্ষেত্রে ফোকাস করব যেখানে আমাদের গ্রাফে কেবল একটি অ্যানিমেশন রয়েছে যা আমরা আগ্রহী। সেই ক্ষেত্রে, আপনার অ্যানিমেশন সনাক্তকারী ডেটা হবে: (একটি রেফারেন্স) একটি AnimationGraph, একটি শনাক্তকারী যেখানে আপনার অ্যানিমেশনটি গ্রাফের ভিতরে আসলে বসে — এটি NodeIndex টাইপের জন্য।

এটি একসাথে রাখা: ঠিক আছে, ধরা যাক আপনার কাছে একটি AnimationPlayer, পাশাপাশি একটি AnimationGraph এবং একটি NodeIndex আছে। আপনার অ্যানিমেশন চালাতে সেগুলি কীভাবে সংযুক্ত করবেন তা এখানে: এর একটি রেফারেন্স সন্নিবেশ করুন ....