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

تاوان تاخیر: نبرد درون‌یابی و برون‌یابی در کدهای شبکه بازی‌ها

در حالی که برون‌یابی روی کاغذ با پیش‌بینی حرکات آینده، تاخیر را از بین می‌برد، موتورهای بازی‌سازی مدرن برای تضمین دقت مکانی به درون‌یابی تکیه می‌کنند؛ انتخابی که به قیمت یک تاخیر بصری اجباری تمام می‌شود.

به قلم ویدا فراهانی

حامیان درون‌یابی 70%حامیان برون‌یابی 30%
حامیان درون‌یابی
دقت مکانی و ثبت ضربه را بر پاسخگویی بی‌درنگ و مطلق ترجیح می‌دهند.
حامیان برون‌یابی
بازخورد بصری فوری و کاهش مصرف پهنای باند از طریق الگوریتم‌های پیش‌بینانه را در اولویت قرار می‌دهند.

دیدگاه‌هایی که این گزارش پوشش نداده

  • بازیکنانی با اتصالات دارای تاخیر بالا
  • توسعه‌دهندگان نت‌کد رول‌بک در بازی‌های مبارزه‌ای

نکات کلیدی

  • برون‌یابی برای پنهان کردن تاخیر، حرکات آینده را پیش‌بینی می‌کند، اما در هنگام تغییر جهت‌های نامنظم انسان با شکست مواجه می‌شود.
  • درون‌یابی وضعیت‌های گذشته را بافر می‌کند تا دقت مکانی را تضمین کند، که این امر یک تاخیر بصری اجباری به همراه دارد.
  • شوترهای رقابتی مدرن برای حفظ یکپارچگی رقابت، به درون‌یابی برای هیت‌باکس بازیکنان تکیه می‌کنند.
  • یک سرور ۱۲۸ تیک، فریم‌ها را هر ۷.۸ میلی‌ثانیه پردازش می‌کند و هیچ جایی برای خطاهای مکانی پیش‌بینانه باقی نمی‌گذارد.

بازیکنان و توسعه‌دهندگان تازه‌کار مدام بحث می‌کنند که یک نت‌کد بی‌نقص باید به سادگی پیش‌بینی کند که هدف به کجا می‌رود و با جلو بردن زمان، تاخیر را کاملا از بین ببرد. اما ریاضیات موتورهای بازی‌سازی مدرن دقیقا عکس این را ثابت می‌کند. وقتی یک سرور رقابتی برای حفظ تیک‌ریت ۱۲۸، آپدیت‌ها را در پنجره‌های زمانی ۷.۸ میلی‌ثانیه‌ای پردازش می‌کند، پیش‌بینی آینده (تکنیکی که به عنوان برون‌یابی شناخته می‌شود) خطاهای مکانی ایجاد می‌کند که یکپارچگی رقابت را به هم می‌ریزد. در عوض، توسعه‌دهندگان مجبورند به درون‌یابی تکیه کنند؛ سیستمی که عمدا وضعیت بصری را به تاخیر می‌اندازد تا دقت را تضمین کند.

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

سبک‌سنگین کردن این دو روش، حس و حال هر بازی چندنفره بزرگی را تعریف می‌کند. موتور سورس (Source) شرکت ولو (Valve) که قدرت‌بخش برخی از ماندگارترین شوترهای تاکتیکی است، به طور پیش‌فرض روی نرخ ۳۰ بسته دستوری در ثانیه تنظیم شده است. پر کردن شکاف بین این نرخ آپدیت ۳۳ میلی‌ثانیه‌ای کلاینت و یک سرور ۶۶ یا ۱۲۸ تیک، موتور را مجبور می‌کند که یا منتظر بسته بعدی بماند یا حدس بزند بازیکن به کجا می‌رود.[5]

شکاف ریاضی بین نرخ آپدیت کلاینت و پنجره پردازش سرور، موتورها را مجبور می‌کند که یا بافر کنند یا پیش‌بینی انجام دهند.

بر اساس مستندات جامعه توسعه‌دهندگان ولو، «کلاینت بسته‌های دستوری را با نرخ مشخصی (معمولا ۳۰ بسته در ثانیه) ارسال می‌کند.» از آنجا که پهنای باند شبکه محدود است، سرور نمی‌تواند برای هر ریزحرکت یک اسنپ‌شات جدید پخش کند. وقتی این بسته‌ها به کلاینت می‌رسند، موتور باید آن‌ها را به هم متصل کند. اگر بسته‌ای گم شود، سیستم با یک انتخاب فوری روبرو می‌شود: کاراکتر را فریز کند، مسیر را حدس بزند، یا برای هموار کردن این شکاف به یک بافر از پیش تعیین‌شده تکیه کند.[5]

اپیک گیمز (Epic Games) در آنریل انجین ۵ (Unreal Engine 5) با استفاده از یک بافر درون‌یابی پیش‌بینانه دقیقا به سراغ همین مشکل می‌رود. وقتی کلاینت داده‌ها را از یک آبجکت تحت فرمان سرور دریافت می‌کند، موتور بلافاصله آن را در همان مهر زمانی دقیق رندر نمی‌کند. همان‌طور که مهندسان اپیک گیمز در مستندات فیزیک شبکه سال ۲۰۲۶ خود اشاره می‌کنند، آن‌ها «داده‌های وضعیت دریافت شده را به اندازه نیمی از زمان رفت و برگشت به جلو پیش‌بینی می‌کنند.» این محاسبه تضمین می‌کند که نمایش بصری، زمان انتقال بسته را در نظر می‌گیرد، در حالی که همچنان به جای حدس و گمان محض، به داده‌های قطعی تکیه دارد.[4]

اپیک گیمز (Epic Games) در آنریل انجین ۵ (Unreal Engine 5) با استفاده از یک بافر درون‌یابی پیش‌بینانه دقیقا به سراغ همین مشکل می‌رود.

برون‌یابی یا ناوبری کور، مسیر کاملا مخالفی را طی می‌کند. کلاینت با محاسبه یک مسیر بر اساس آخرین سرعت شناخته‌شده، سعی می‌کند تاخیر شبکه را کاملا پنهان کند. یک مقاله پژوهشی یوزنیکس (USENIX) در سال ۲۰۰۹ در مورد ناوبری کور همتا به همتا نشان داد که این روش برای موجودیت‌هایی با اینرسی بالا بی‌نقص کار می‌کند. وسیله نقلیه‌ای که با سرعت ۶۰ مایل در ساعت در یک خط مستقیم حرکت می‌کند، احتمالا در ۵۰ میلی‌ثانیه بعدی نیز در همان خط مستقیم به حرکت خود ادامه می‌دهد، که این امر برون‌یابی را برای کاهش بار محاسباتی سرور بسیار کارآمد می‌کند.[3]

برون‌یابی هنگام تغییر جهت بازیکن، خطاهای مکانی شدیدی ایجاد می‌کند و سرور را مجبور می‌کند مدل را به واقعیت برگرداند.

با این حال، حرکت انسان در یک عنوان ورزش الکترونیک کاملا غیرخطی است. بازیکنی که یک مکانیک استریف سریع را اجرا می‌کند، در کسری از ثانیه تغییر جهت می‌دهد و پیش‌بینی الگوریتم ناوبری کور را در هم می‌شکند. ارائه سال ۲۰۱۶ بلیزارد انترتینمنت (Blizzard Entertainment) در رویداد جی‌دی‌سی پیرامون معماری گیم‌پلی اورواچ (Overwatch) به صراحت این نقطه ضعف را برجسته کرد. تیم توسعه، درون‌یابی را برای موجودیت‌های بازیکن در اولویت قرار داد تا اطمینان حاصل کند که حرکت نامنظم انسان به جای حدس زدن و اصلاح شدن، بافر شده و با دقت رندر می‌شود.[2]

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

پکیج نت‌کد برای گیم‌آبجکت‌های یونیتی (Unity) به توسعه‌دهندگان این امکان را می‌دهد که بین این حالت‌ها جابجا شوند، اما مستندات آن صراحتا در مورد لرزش ذاتی برون‌یابی هشدار می‌دهد. وقتی کلاینت مجبور است خود را به وضعیت واقعی یک شیء با حرکت سریع برساند، آرتیفکت بصری حاصل، بسیار بیشتر از یک تاخیر ثابت و قابل پیش‌بینی، هدف‌گیری بازیکن را مختل می‌کند. مغز انسان می‌تواند با یک تاخیر بصری پایدار ۳۰ میلی‌ثانیه‌ای سازگار شود، اما نمی‌تواند با هدفی که به طور تصادفی تلپورت می‌شود، کنار بیاید.[1]

اجماع صنعت در سال ۲۰۲۶ بر روی یک تقسیم کار دقیق بین این دو تکنیک به ثبات رسیده است. توسعه‌دهندگان بازی برای صرفه‌جویی در پهنای باند و کاهش تاخیر درک شده، اشیاء فیزیکی قابل پیش‌بینی مانند نارنجک‌های پرتاب شده یا پلتفرم‌های متحرک را برون‌یابی می‌کنند. اما برای حرکت فرکانس بالا و غیرقابل پیش‌بینی یک حریف انسانی، آن‌ها به شدت از درون‌یابی استفاده می‌کنند. تاخیر بصری اجباری ۲۰ تا ۵۰ میلی‌ثانیه‌ای، بهای ضروری برای حقیقت مکانیکی است و تضمین می‌کند که وقتی بازیکن ماشه را می‌کشد، هدف دقیقا همان جایی است که صفحه نمایش ادعا می‌کند.

چرا مهم است

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

بررسی عمیق دیدگاه‌ها

درون‌یابی (بافر کردن وضعیت)

رندر کردن بازی کمی در گذشته برای تضمین دقت مکانی.

موافق: تضمین می‌کند که آنچه بازیکن می‌بیند واقعا روی سرور رخ داده است. با بافر کردن بسته‌ها و به تاخیر انداختن نمایش بصری با یک حاشیه مشخص (اغلب نیمی از زمان رفت و برگشت)، موتورهایی مانند آنریل و یونیتی یک مسیر کاملا هموار بین دو نقطه شناخته شده ایجاد می‌کنند. به شرطی که نرخ رسیدن بسته‌ها پایدار بماند، این کار اثر کشسانی را کاملا از بین می‌برد. مخالف: تاخیر بصری اجباری ایجاد می‌کند. یک بافر ۵۰ میلی‌ثانیه‌ای به این معنی است که بازیکن همیشه به شبحی شلیک می‌کند که ۵۰ میلی‌ثانیه از واقعیت سرور عقب‌تر است. در یک محیط ۱۲۸ تیک که فریم‌ها هر ۷.۸ میلی‌ثانیه پردازش می‌شوند، این تاخیر مصنوعی نشان‌دهنده از دست رفتن بیش از شش فریم از زمان واکنش است. شواهد: معماری اورواچ بلیزارد به شدت به درون‌یابی برای کاراکترهای بازیکن متکی است و ثبت ضربه را بر موقعیت‌یابی بی‌درنگ و مطلق ترجیح می‌دهد. مناسب برای: ردیابی حرکات نامنظم و غیرقابل پیش‌بینی انسان در شوترهای تاکتیکی رقابتی. نامناسب برای: زمانی که لرزش شبکه از اندازه بافر فراتر می‌رود و باعث می‌شود کلاینت بسته‌های ذخیره شده خود را تمام کند و خط لوله رندر متوقف شود.

برون‌یابی (ناوبری کور)

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

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

منابع

پوشش منابع

6 منبع

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

حامیان درون‌یابی 70%حامیان برون‌یابی 30%
  1. [1]Unityحامیان درون‌یابی

    Interpolation and extrapolation

    مطالعه در Unity
  2. [2]GDC Vaultحامیان درون‌یابی

    'Overwatch' Gameplay Architecture and Netcode

    مطالعه در GDC Vault
  3. [3]USENIXحامیان برون‌یابی

    Offloading AI for Peer-to-Peer Games with Dead Reckoning

    مطالعه در USENIX
  4. [4]Epic Gamesحامیان درون‌یابی

    Networked Physics Replication in Unreal Engine

    مطالعه در Epic Games
  5. [5]Valveحامیان برون‌یابی

    Source Multiplayer Networking

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

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

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

نظرات

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

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

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