Gameآموزش

موتور فیزیک یک گیم انجین چگونه کار می کند؟

موتور فیزیک در گیم انجین ها

در این مقاله از وبسایت کالی بویز تصمیم داریم به معرفی مقدماتی موتور فیزیک و نحوه کارکرد آن در انجین های بازی سازی مانند یونیتی، آنریل و… بپردازیم. اگر نمی دانید انجین بازی سازی یا Game engine چیست؟ پیشنهاد می کنم ابتدا به مقاله “چگونه یک موتور بازی سازی درست کنیم؟” نیم نگاهی بیندازید و دوباره برگردید!

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

این حلقه پیوسته باعث ایجاد توهماتی در بازیکن(Gamer) می شود، مثلا شخص فکر می کند جسم در اثر جاذبه به زمین خورده است. تصویر زیر را ببینید:

جرخه کار موتور فیزیک

حلقه موتور فیزیک

همانطور که در بالا گفته شد موتور فیزیک وظیفه محاسبه شتاب ها، سرعت و جابجایی جسم را از نیرو و گشتاورهای وارد بر آن دارد.

برای ساخت موتور فیزیک به یکسری معادلات نیاز است که مهم ترین آن ها را در زیر می بینید:

قانون دوم نیوتن:

قانون دوم نیوتن

نیروی چرخشی(لحظه ها، گشتاور):

فرمول نیروی چرخشی

دو معادله بالا به معادلات حرکت معروفند. احتمالا از قبل می دانید اگر شتاب را نسبت به زمان در نظر بگیرید، سرعت را بدست می آورید و اگر سرعت را با زمان بسنجید، جابجایی را بدست آورده اید.

موتور فیزیک برای بدست آوردن سرعت و میزان جابجایی یک جسم از معادله حرکت استفاده می کند، این کار را در یک حلقه و به صورت مداوم انجام می دهد که مراحل زیر را شامل می شود.

  1. تمام زمان و نیروهای وارد بر جسم را شناسایی می کند.
  2. برآیند بردار تمام نیروهای وارد بر جسم را محاسبه می کند.
  3. معادله حرکت را برای شتاب خطی و زاویه ای حل می کند.
  4. با استفاده از شتاب و زمان سرعت خطی و زاویه ای را بدست می آورد.

اگر یک نیروی گرانش یا گشتاوری به جسم وارد شود حلقه موتور فیزیک این توهم را ایجاد می کند که یک جسم می چرخد یا می افتد.

ایجاد توهم افتادن یک جسمتخمین اعداد

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

چندین روش تخمین عددی برای حل معادلات حرکت وجود دارد که مهم ترین آن ها به صورت زیر می باشند:

  • روش اویلر
  • روش ورلت
  • روش Runge-Kutta

در میان روش های بالا روش اویلر ساده ترین است اما دقت کمتری هم داراست و دقیق ترین و پیچیده ترین روش Runge-Kutta است که دقت بالایی نیز دارد.

روش های تخمین عددی

تشخیص برخوردها

اگر چه تشخیص برخورد بر عهده سیستم فیزیک است اما معمولا برای تشخیص آن از یک سیستم جداگانه به نام “سیستم تصادف” استفاده می شود. هر دوی این سیستم ها با کمک یک دیگر برخورد ها را تشخیص می دهند، در این مقاله برای جلوگیری از پیچیده شدن بحث تمایزی بین سیستم تصادف و فیزیک قائل نمی شویم.

هدف سیستم تشخیص برخورد این است که در صورت برخورد دو جسم به یکدیگر گزارش دهد.(یک پاسخ ساده بله/خیر برگرداند) این عمل بسیار وقت گیر است، در موتور فیزیک برای افزایش سرعت تشخیص برخورد فرآیند را به یک فاز گسترده(Broad-Phase) و فاز باریک(Narrow-Phase) تقسیم می کنند.

فاز گسترده تشخیص برخورد

در بازی ها هر جسم(Object) یک محدوده و یک حصار در اطراف خود دارد که داخل آن حصار خط قرمز جسم محسوب می شود. به این جسم ها، جسم های محدود شده می گویند، سنتی ترین روش ها برای این کار به صورت زیر می باشند:

  • Axis-Aligned Bounding Boxes (AABB)
  • Oriented Bounding Boxes (OBB).

تصویر زیر این موضوع را برای شما روشن می کند:

حجم های محصور شده

در تشخیص برخورد فاز گسترده هر شی با حجمی محدود می شود. موتور فیزیک فضای هر جسم را تجزیه می کند و یک سلسله مراتب ایجاد می کند که ساختاری شبیه یک درخت دارد که در آن هر گره شامل اشیایی است که احتمال برخورد آن ها وجود دارد.

موتور فیزیک هر گره را آزمایش می کند و لیستی از جفت های برخورد ایجاد می کند. فاز گسترده سریع عمل می کند و ممکن است برخورد کاذب را گزارش کند اما در این صورت همه جفت های برخورد غیرممکن را از بین می برد.
شاید کمی گیج کننده شد، تصویر زیر می تواند این موضوع را در ذهن شما روشن کند:

سلسه مراتب تشخیص برخورد در موتور فیزیک

فاز باریک تشخیص برخورد

پس از گذراندن مراحل بالا تشخیص برخورد اجسام به فاز باریک منتقل می شود. در این مرحله هر جسم با یک جسم محدب و نزدیک به پوسته جسم پوشیده می شود. سپس با استفاده از الگوریتم Gilbert-Johnson-Keerthi (GJK) تست برخورد بین این بدنه های محدب انجام می شود.

این الگوریتم بسیار دقیق است اما کار کردن با آن می تواند کمی مشکل باشد.

پاسخ برخورد

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

در لحظه برخورد مهم ترین نیرویی که بر روی اشیا وارد می شود همان نیروی برخورد است، به همین دلیل تمام نیروهای دیگر در آن لحظه نادیده گرفته می شوند.

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

نتیجه گیری

وظیفه یک موتور فیزیک حل معادلات حرکت و تشخیص برخوردهاست که این یک موضوع و مفهوم ساده است اما پیاده سازی آن به صورت عملی بسیار می تواند پیچیده تر از بحث های این مقاله باشد، در اینجا فقط تعریف های مهم و مقدماتی بیان شد.

موفق باشید:/

مطالعه بیشتر: نقشه راه ۰ تا ۱۰۰ ورود به دنیای بازی سازی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا