در بازی مبارزه‌ای آنلاین، چند فریم تأخیر می‌تواند زمان دفاع یا اجرای حرکت را عوض کند. Rollback Netcode روشی برای هماهنگ‌کردن بازی دو نفر از راه شبکه است: بازی ورودی حریف را برای لحظه‌ای پیش‌بینی می‌کند و اگر ورودی واقعی متفاوت بود، چند فریم را دوباره محاسبه می‌کند. هدف این است که فرمان بازیکن محلی بی‌دلیل منتظر بسته شبکه نماند. برای تفکیک عملکرد سرور از تأخیر شبکه، معنای Tick Rate سرور بازی را هم بخوانید.

خلاصه کلیدی
  • Rollback Netcode وضعیت بازی را در فریم‌های نزدیک ذخیره می‌کند، ورودی دوردست را موقتاً حدس می‌زند و بازی را جلو می‌برد.
  • بازی مبارزه‌ای بر واکنش دقیق به حرکت حریف و خواندن فاصله شخصیت‌ها تکیه دارد.
  • در روش تأخیری، بازی می‌تواند برای رسیدن ورودی طرف مقابل صبر کند و سپس هر دو فرمان را در یک فریم اجرا کند.
  • یک پیش‌بینی رایج این است که ورودی اخیر حریف برای چند فریم دیگر ادامه دارد، مگر خلافش برسد.

Rollback Netcode دقیقاً چه کاری انجام می‌دهد؟

Rollback Netcode وضعیت بازی را در فریم‌های نزدیک ذخیره می‌کند، ورودی دوردست را موقتاً حدس می‌زند و بازی را جلو می‌برد. وقتی ورودی واقعی حریف برسد، اگر با حدس فرق داشته باشد، به وضعیت ذخیره‌شده برمی‌گردد و فریم‌ها را با ورودی درست دوباره اجرا می‌کند. نتیجه معمولاً سریع‌تر از انتظار برای هر بسته حس می‌شود.

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

بازیکن معمولاً خودِ عقب‌رفتن شبیه‌سازی را نمی‌بیند، چون اصلاح در زمان کوتاهی رخ می‌دهد. با این حال اگر اختلاف پیش‌بینی زیاد یا اتصال نامناسب باشد، ممکن است جابه‌جایی ناگهانی شخصیت، تغییر کوتاه انیمیشن یا ناهماهنگی صدا دیده شود. بنابراین «rollback» وعده حذف کامل اثر شبکه نیست. روش فقط نحوه مواجهه با تأخیر را عوض می‌کند.

چرا بازی‌های مبارزه‌ای به این روش حساس‌اند؟

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

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

درک این تفاوت برای ارزیابی بازی آنلاین کمک می‌کند. هنگام خواندن معرفی بازی، فقط وجود واژه rollback را ملاک نگیرید؛ کیفیت پیاده‌سازی، تعداد فریم‌های قابل بازگشت و پایدار بودن اتصال نیز مهم‌اند. رتبه حریف یا مهارت او مسئله جداگانه‌ای است. مطلب MMR در بازی آنلاین درباره شیوه همتاسازی بازیکنان توضیح می‌دهد، نه همگام‌سازی فریم‌ها.

تفاوت rollback با netcode تأخیری چیست؟

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

انتخاب میان این دو فقط مسئله «جدید و قدیمی» نیست. اگر اتصال بسیار پایدار و تأخیر کم باشد، هر دو روش ممکن است تجربه قابل قبولی بدهند. وقتی فاصله شبکه بیشتر می‌شود، انتظار ثابت می‌تواند حرکت را کند کند و پیش‌بینی نادرست می‌تواند تصویر را لحظه‌ای اصلاح کند. بازی‌ها ممکن است ترکیبی از چند فریم تأخیر و rollback را استفاده کنند. تنظیم دقیق به موتور بازی و شرایط شبکه بستگی دارد.

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

نمای مانیتور بازی مبارزه‌ای و کنترلر در محیط گیمینگ
نمای مانیتور بازی مبارزه‌ای و کنترلر در محیط گیمینگ

پیش‌بینی ورودی حریف چگونه کار می‌کند؟

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

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

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

بازگشت فریم‌ها چه اثری در تصویر می‌گذارد؟

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

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

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

پینگ و نوسان اتصال چه نقشی دارند؟

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

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

نمایش «پینگ خوب» در منوی بازی تضمین نمی‌کند همه بسته‌ها به‌موقع برسند. بعضی بازی‌ها تأخیر، jitter و فریم rollback را جدا نشان می‌دهند. اگر چنین شاخص‌هایی دارید، هنگام مشکل از آن‌ها تصویر بگیرید و زمان رخداد را ثبت کنید. برای مقایسه، یک حریف و یک تنظیم ثابت را انتخاب کنید و فقط یک عامل، مثلاً وای‌فای در برابر کابل، را تغییر دهید.

آیا rollback همیشه تجربه بهتری می‌دهد؟

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

اگر بازی برای اجرای دوباره فریم‌ها توان پردازشی کافی نداشته باشد، افت نرخ فریم می‌تواند مزیت کاهش انتظار را از بین ببرد. هماهنگ‌سازی جلوه‌ها نیز دشوار است. گاهی سازنده برای کنترل پرش، مقدار کمی تأخیر ورودی ثابت می‌گذارد. بنابراین دو بازی که هر دو از rollback نام می‌برند ممکن است حس کاملاً متفاوتی داشته باشند. بررسی تجربه واقعی و توضیح فنی سازنده مفیدتر از برچسب تبلیغاتی است.

برای بازیکن، انتخاب عملی ساده است: اگر بازی امکان نمایش شاخص اتصال و انتخاب منطقه دارد، از آن استفاده کنید؛ اگر ندارد، مسابقه‌های متعدد را در شرایط مشابه مقایسه کنید. تغییر دسته بازی یا نمایشگر شاید تأخیر محلی را کم کند، ولی مشکل بسته‌های شبکه را حل نمی‌کند. بخش‌های تجربه را جدا بسنجید تا هزینه اشتباه برای تجهیزات ندهید.

از کجا بفهمیم مشکل از شبکه است یا دستگاه؟

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

در همان بازی، یک مسابقه تمرینی آفلاین و چند مسابقه آنلاین با حریف نزدیک انجام دهید. نرخ فریم را در هر دو مقایسه کنید. اگر مشکل فقط با یک حریف رخ می‌دهد، ممکن است اتصال یکی از دو طرف یا مسیر شبکه میان آن‌ها مسئله داشته باشد. اگر با همه حریفان و در همه ساعت‌هاست، تنظیمات شبکه خانه، NAT و سرویس بازی را هم بررسی کنید؛ اما تنظیمات امنیتی روتر را بدون شناخت تغییر ندهید.

فیلم کوتاه از مشکل و ثبت زمان، پینگ نمایشی و تعداد فریم rollback برای گزارش به پشتیبانی بازی مفید است. اگر پس از به‌روزرسانی تازه مشکل آغاز شده، نسخه بازی و تغییرات را یادداشت کنید. توسعه‌دهنده با داده تکرارپذیر بهتر از عبارت کلی «لگ دارد» می‌تواند مسئله را پیدا کند. در نهایت کیفیت تجربه از چند جزء می‌آید و هیچ کدام را نباید با یک عدد خلاصه کرد.

جمع‌بندی

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

سوالات متداول
آیا rollback پینگ را کم می‌کند؟

خیر. زمان رفت‌وبرگشت شبکه را کم نمی‌کند؛ اثر آن را با پیش‌بینی و اصلاح فریم‌ها مدیریت می‌کند.

چرا با rollback هم شخصیت حریف می‌پرد؟

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

آیا کابل شبکه برای rollback لازم است؟

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

منابع
نوشته قبلی