رفتن به محتوای اصلی
Koohestun
توضیح کوهستانانیمیشن رویه‌ایمقاله آموزشی· 5 دقیقه مطالعه· در بازی و ورزش‌های الکترونیک

زنجیره سینماتیک معکوس (IK): موتورهای بازی‌سازی چگونه با محاسبه زوایای مفاصل، پای کاراکتر را روی زمین‌های ناهموار میخکوب می‌کنند؟

وقتی یک کاراکتر بازی ویدیویی از پله‌ها بالا می‌دود، پاهایش در بافت محیط فرو نمی‌رود. در عوض، موتور بازی‌سازی با استفاده از سینماتیک معکوس، زوایای دقیق مفاصل را از طریق مهندسی معکوس ریاضی محاسبه می‌کند تا هر پا را محکم روی زمین ناهموار قرار دهد.

به قلم قاسم طباطبایی

برنامه‌نویسان موتور بازی 40%انیماتورهای فنی 35%مهندسان رباتیک 25%
برنامه‌نویسان موتور بازی
اولویت دادن به کارایی محاسباتی و بودجه‌های عملکردی قابل پیش‌بینی.
انیماتورهای فنی
حمایت از حداکثر واقع‌گرایی فیزیکی و تعامل پویای محیطی.
مهندسان رباتیک
استفاده از دقیقاً همان ریاضیات برای دستکاری فیزیکی در دنیای واقعی.

بازیکن در یک عنوان مدرن AAA، کاراکتر خود را از تپه‌ای ناهموار و پر از قلوه‌سنگ بالا می‌برد. پای چپ کاراکتر روی یک صخره برجسته فرود می‌آید، زانو برای هضم این ارتفاع عمیقاً خم می‌شود و پای راست در یک گودال فرو می‌رود. برای قرار دادن پا روی زمین ناهموار بدون اینکه در بافت محیط فرو برود، موتورهای بازی‌سازی از یک فرآیند ریاضی به نام سینماتیک معکوس (IK) استفاده می‌کنند. موتور بازی به جای چرخاندن لگن و زانو برای اینکه ببیند پا کجا قرار می‌گیرد، یک پرتو برای پیدا کردن زمین می‌فرستد، پا را دقیقاً در همان مختصات میخکوب می‌کند و برای تعیین زوایای مفصلی مورد نیاز جهت اتصال پا به لگن، محاسبات را رو به عقب انجام می‌دهد.

این مهندسی معکوس، ستون فقرات انیمیشن رویه‌ای است. همان‌طور که اپیک گیمز (Epic Games) در مستندات موتور آنریل (Unreal Engine) خود اشاره می‌کند، از زمان انتشار عناوین سه‌بعدی بنیادینی مانند هف-لایف (Half-Life) در سال ۱۹۹۸، سیستم‌های IK به کاراکترها اجازه داده‌اند تا به محیط‌هایی که در مرحله طراحی قابل پیش‌بینی نیستند، واکنش پویا نشان دهند.[1]

برای درک اینکه چرا IK ضروری است، باید نقطه مقابل آن را بشناسید: سینماتیک مستقیم (FK). در FK، یک انیماتور قسمت بالایی پا را ۳۰ درجه، قسمت پایینی را ۴۵ درجه و مچ پا را ۱۰ درجه می‌چرخاند. در نهایت، پا دقیقاً همان‌جایی قرار می‌گیرد که ریاضیات دیکته می‌کند.

شرکت برنامه‌نویسی رباتیک روبودی‌کی (RoboDK) که اصول آن مستقیماً در موتورهای بازی‌سازی کاربرد دارد، توضیح می‌دهد: «سینماتیک مستقیم تعیین می‌کند که اگر مفاصل در یک موقعیت خاص تنظیم شوند، نقطه اثر نهایی کجا خواهد بود. برای معادله سینماتیک مستقیم همیشه تنها یک جواب وجود دارد.»

سینماتیک مستقیم محاسبات را در طول زنجیره به سمت پایین انجام می‌دهد، در حالی که سینماتیک معکوس از نقطه اثر نهایی به سمت عقب محاسبه می‌کند.

اما در دنیای پویای بازی‌ها، زمین هرگز کاملاً مسطح نیست. اگر یک بازی صرفاً به FK متکی باشد، کاراکتری که از یک شیب ۱۵ درجه‌ای بالا می‌دود، یا در هوا روی شیب شناور می‌ماند یا ساق پاهایش مستقیماً در مش‌های چندضلعی محیط فرو می‌رود.

اینجاست که زنجیره IK وارد میدان می‌شود. در یک ریگ استاندارد انسان‌نما که شامل بیش از ۱۰۰ استخوان مجزا است، پا به عنوان «نقطه اثر نهایی» تعیین می‌شود. موتور بازی به نقطه اثر نهایی می‌گوید که دقیقاً در کجای فضای سه‌بعدی باید قرار بگیرد؛ برای مثال، دقیقاً همان نقطه‌ای که یک پرتو فیزیکی با پله برخورد می‌کند.[4]

سپس موتور بازی باید یک پازل هندسی پیچیده را حل کند: لگن و زانو باید چه زوایایی به خود بگیرند تا فاصله بین لگن کاراکتر و پای تازه میخکوب‌شده را پر کنند؟

سپس موتور بازی باید یک پازل هندسی پیچیده را حل کند: لگن و زانو باید چه زوایایی به خود بگیرند تا فاصله بین لگن کاراکتر و پای تازه میخکوب‌شده را پر کنند؟

در تحلیل فنی ویکی‌پدیا از این موضوع آمده است: «عملیات IK از نظر محاسباتی بسیار پیچیده‌تر از سینماتیک مستقیم است.» از آنجا که سیستم رو به عقب کار می‌کند، اغلب با محدودیت‌های غیرخطی و چندین راه‌حل ممکن مواجه می‌شود.[5]

برای یک پای ساده انسان، موتورها معمولاً از یک حل‌کننده IK دو-استخوانی استفاده می‌کنند. این رویکرد تحلیلی از قانون کسینوس‌ها برای محاسبه زوایای دقیق لگن و زانو بهره می‌برد. از آنجا که یک پا تنها دو مفصل خمشی اصلی دارد، ریاضیات را می‌توان به یک عبارت فرم‌بسته تقلیل داد که تقریباً در یک چشم به هم زدن حل می‌شود.[2]

سیستم IK دو-استخوانی از هندسه تحلیلی برای حل فوری زوایای یک عضو تک‌مفصلی استفاده می‌کند.

روبودی‌کی بیان می‌کند: «یک حل‌کننده تحلیلی سینماتیک معکوس قادر است ژست مورد نظر نقطه اثر نهایی را دریافت کرده و (تقریباً) بلافاصله موقعیت‌های مفصلی مورد نیاز را بیرون بدهد.» همین کارایی بالا دلیل آن است که IK دو-استخوانی همچنان استاندارد صنعت برای قرار دادن پا در رندرینگ بلادرنگ محسوب می‌شود.

با این حال، وقتی زنجیره شامل بیش از دو استخوان باشد (مانند ستون فقرات، یک شاخک یا یک بازوی رباتیک)، ریاضیات به طور نمایی سخت‌تر می‌شود. در این موارد، هندسه تحلیلی شکست می‌خورد و موتور بازی باید به حل‌کننده‌های عددی تکرارشونده تکیه کند.[5]

الگوریتم‌هایی مانند نزول مختصات چرخه‌ای (CCD) یا سینماتیک معکوس پیش‌رونده و پس‌رونده (FABRIK) این زنجیره‌های پیچیده را مدیریت می‌کنند. آن‌ها بارها و بارها در میان مفاصل حلقه می‌زنند و تنظیمات بسیار ریزی انجام می‌دهند تا نقطه اثر نهایی به هدف برسد.

برای مثال، موتور سورس (Source) شرکت ولو (Valve) از پارامتر $ikchain برای تعریف این پیوندهای سینماتیکی استفاده می‌کند و به توسعه‌دهندگان اجازه می‌دهد مشخص کنند کدام استخوان‌ها متعلق به زنجیره هستند و چقدر مجازند خم شوند، پیش از آنکه توهم آناتومی طبیعی از بین برود.[3]

این وزنه‌برداری سنگین ریاضیاتی با یک بودجه عملکردی سخت‌گیرانه همراه است. در حالی که یک حل‌کننده IK دو-استخوانی ممکن است تنها کسری از میلی‌ثانیه به ازای هر کاراکتر هزینه داشته باشد، اجرای IK تمام‌بدن روی جمعیتی متشکل از ۵۰ کاراکتر غیرقابل‌بازی (NPC)، فوراً پردازنده (CPU) را به گلوگاه تبدیل می‌کند.

حل‌کننده‌های تکرارشونده برای زنجیره‌های پیچیده، نسبت به حل‌کننده‌های تحلیلی دو-استخوانی، زمان پردازش (CPU) بسیار بیشتری می‌طلبند.

برای حفظ هدف ۶۰ فریم بر ثانیه (که تنها ۱۶.۶۷ میلی‌ثانیه زمان رندر برای هر فریم در اختیار می‌گذارد)، توسعه‌دهندگان باید بهینه‌سازی‌های تهاجمی انجام دهند. آن‌ها IK پیچیده را برای کاراکتر بازیکن و دشمنان اصلی رزرو می‌کنند، در حالی که جمعیت‌های دوردست به انیمیشن‌های ارزان‌تر و از پیش پخته‌شده FK بازمی‌گردند.

نتیجه کار، یک توهم بی‌نقص است. بازیکن هرگز مثلثاتی را که زیر کاپوت موتور بازی در حال پردازش است نمی‌بیند؛ او تنها کاراکتری را می‌بیند که از نظر فیزیکی در یک دنیای مجازی ریشه دوانده و با دقتی واقع‌گرایانه از روی ریشه‌ها و صخره‌ها قدم برمی‌دارد.

چرا مهم است

انیمیشن رویه‌ای (Procedural) مرز بین دنیاهای غوطه‌ورکننده بازی‌های مدرن و مدل‌های خشک و سرخورده گذشته است؛ اما این واقع‌گرایی هزینه پردازشی سنگینی دارد که تعیین می‌کند چه تعداد کاراکتر می‌توانند همزمان روی صفحه ظاهر شوند.

منابع

پوشش منابع

6 منبع

3 دیدگاه شناسایی‌شده

برنامه‌نویسان موتور بازی 40%انیماتورهای فنی 35%مهندسان رباتیک 25%
  1. [1]Epic Developer Communityبرنامه‌نویسان موتور بازی

    IK Setups

    مطالعه در Epic Developer Community
  2. [2]Game Developerانیماتورهای فنی

    Inverse Kinematics (two joints) for foot placement

    مطالعه در Game Developer
  3. [3]Valve Developer Communityبرنامه‌نویسان موتور بازی

    $ikchain

    مطالعه در Valve Developer Community
  4. [4]MathWorksمهندسان رباتیک

    What Is Inverse Kinematics?

    مطالعه در MathWorks
  5. [5]Wikipediaانیماتورهای فنی

    Inverse kinematics

    مطالعه در Wikipedia
  6. [6]تیم سردبیری کوهستانبرنامه‌نویسان موتور بازی

    تحلیل تیم سردبیری کوهستان

    مطالعه در تیم سردبیری کوهستان

نظرات

همیشه در جریان باشید

هر زاویه. هر روز.

دریافت بازی و ورزش‌های الکترونیک اخبار همراه با پوشش کامل منابع و تحلیل دیدگاه‌ها، مستقیم در صندوق ورودی شما.