پرش به محتوا

لگ (بازی‌های ویدئویی)

از ویکی‌پدیا، دانشنامهٔ آزاد

در کامپیوترها، لَگ به معنای تأخیر (نهفتگی) بین کنش کاربر (ورودی) و واکنش سرور پشتیبانی از وظیفه است که باید به مشتری (client) ارسال شود. توانایی کاربران برای تحمل لَگ بستگی به نوع وظیفه در حال اجرا دارد؛ مثلاً، یک بازی با سرعت کم ممکن است آستانه بالایی داشته باشد یا حتی تحت تأثیر لَگ زیاد قرار نگیرد. در وظیفهای که اجرای آن سخت است، مانند باز بودن تعداد زیادی تب یا پنجره، تفاوت زیادی در فریم ریت به وجود می‌آید.لگ همچنین ممکن است تجربه ی بازی را برای شما بد کند.

زمان پینگ

[ویرایش]

زمان پینگ تأخیر شبکه برای یک رفت و برگشت بین بازیکن کلاینت و سِرورِ بازی است که با ابزار پینگ یا معادل آن اندازه‌گیری می‌شود. زمان پینگ، زمان میانگین است که بر حسب میلی ثانیه اندازه‌گیری می‌شود.[نیازمند منبع] هرچه پینگ کمتر باشد، بازیکن لَگ کمتری را تجربه خواهد کرد. پینگ بالا و پینگ پایین عباراتی هستند که معمولاً در بازی‌های آنلاین مورد استفاده قرار می‌گیرند، پینگ بالا باعث لَگ شدید می‌شود. هر مقداری از پینگ می‌تواند باعث لَگ شود، اما لَگ شدید به معنای پینگ بیش از ۱۰۰ میلی ثانیه است.[۱] این کاربرد یک مکالمهٔ عامیانه در بازی است و معمولاً در جمع‌های شبکه‌های رایانه ای حرفه ای یافت یا استفاده نمی‌شود. در بازی‌هایی که زمان‌بندی نقش کلیدی دارد مانند بازی‌های تیراندازی اول شخص و بازی‌های استراتژی هم‌زمان، همیشه پینگ پایین مطلوب است که یعنی گیم‌پلی روان‌تر است و امکان به‌روزرسانی سریع داده‌های بازی بین بازیکنان کلاینت و سرور بازی وجود دارد.

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

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

برنامه نویسان بازی‌های ویدیویی برای برای تعیین زمان پینگ به جای استفاده از درخواست (به شکل درخواست سنتی اکو آی‌سی‌ام‌پی) و پاسخ (پاسخ به بسته‌های شبکه)، کشف تأخیر را در بسته‌های بازی موجود (معمولاً بر اساس پروتکل UDP) برای خود می‌سازند.

برخی از عوامل تأثیر گذار بر پینگ عبارتند از: پروتکل ارتباطی مورد استفاده، گذرداد اینترنت (سرعت اتصال)، کیفیت رسانندهٔ خدمات اینترنتی کاربر و پیکربندی فایروال‌ها. موقعیت جغرافیایی هم بر پینگ تأثیر دارد؛ مثلاً، اگر بازیکنی در هند روی سروری در ایالات متحده بازی کند، چون فاصله بین این دو کشور بیشتر از بازیکنانی است که واقع در ایالات متحده هستند، انتقال داده‌ها طولانی‌تر می‌شود. هر چند غالباً مقدار سوئیچینگ بسته و سخت‌افزار شبکه در بین دو کامپیوتر مهم‌تر است؛ مثلاً، کارت‌های رابط شبکه بی‌سیم باید سیگنال‌های دیجیتال را به سیگنال‌های رادیویی تعدیل کنند، که اغلب هزینه بیشتری نسبت به سیگنال الکتریکی برای عبور از یک دهانه کابل معمولی طول می‌کشد. پس پینگ پایین‌تر می‌تواند نرخ دانلود و آپلود اینترنت را سریع تر کند.

علت‌ها

[ویرایش]
یک معماری بازی ساده شده

بر خلاف بازی تک نفره که حالت اصلی بازی را روی ماشین محلی حفظ می‌کند، بازی آنلاین آن را روی سرور مرکزی نگهداری می‌کند چون باید از ناهماهنگی بین تک کلاینت‌ها جلوگیری شود؛ بنابراین کلاینت هیچ کنترل مستقیمی بر وضعیت مرکزی بازی ندارد و شاید فقط درخواست‌های تغییر را به سرور بفرستد و تنها با دریافت به روز رسانی از سرور وضعیت بازی محلی را به روز کند. این نیاز به برقراری ارتباط باعث تأخیر بین کلاینت و سرور می‌شود و دلیل اصلی لگ همین است. دلایل اساسی متعددی که چرا یک بازیکن تأخیر را تجربه می‌کند می‌توان برشمرد ولی خلاصهٔ آنها عدم وجود سخت‌افزار کافی در کلاینت یا سرور، یا ارتباط ضعیف بین کلاینت و سرور است.[۲]

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

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

شاید رایج‌ترین نوع لگ ناشی از مشکلات عملکرد شبکه باشد. اتلاف، تخریب یا لرزش (یک بسته تاریخ گذشته نتیجهٔ اتلاف است) ممکن است همه مشکلاتی را ایجاد کنند، اما این مشکلات در شبکه ای با پهنای باند کافی و نامتراکم یا کم‌تراکم نسبتاً کمتر اتفاق می‌افتد. در عوض، تأخیر دخیل در انتقال داده بین کلاینت و سرور نقش مهمی دارد. تفاوت تأخیرها در عواملی مثل فاصله فیزیکی بین سیستم‌های انتهایی است، چون برای فاصله بیشتر امتداد مخابراتی طولانی‌تر و مسیریابی نیاز است که در نتیجه تأخیر بالاتر می‌شود. مسیریابی از طریق اینترنت ممکن است بسیار پیچیده باشد، که منجر به امتداد مخابراتی بسیار بیشتر (و در نتیجه تأخیر) نسبت به مسیر سر راست می‌شود، اگرچه سرویس بازی ابری OnLive با ایجاد روابط همتا با چندین ارائه‌دهنده خدمات اینترنت شبکه سطح ۱ و انتخاب مسیر بهینه بین سرور و کاربر راه‌حلی برای این موضوع ایجاد کرده‌است.[۳] هم چنین، پهنای باند ناکافی و ازدحام، حتی اگر به اندازه کافی شدید نباشد که باعث اتلاف شود، ممکن است بدون توجه به مسافت باعث تاخیرهای اضافی شود. مثل مشکلات سخت‌افزاری، بسته‌هایی که آهسته می‌رسند یا اصلاً نمی‌رسند، باعث می‌شوند هم کلاینت و هم سرور نتوانند وضعیت بازی را به موقع بروز کنند.

بسته به معماری شبکه بی‌سیم و تداخل الکترومغناطیسی محلی که بر آن شبکه تأثیر می‌گذارد، سیستم‌های بازی آنلاین که از یک شبکه بی‌سیم استفاده می‌کنند، می‌توانند لگ چشمگیری داشته باشند. تداخل الکترومغناطیسی (مثلاً از ماکروفر) می‌تواند بسته‌های ارسالی را نابود کند که برای جبران باید دوباره فرستاده شود که خود این باعث تأخیر می‌شود. انتشار رادیویی در هوا سریعتر از نور در فیبر نوری است، ولی سیستم‌های بی‌سیم اغلب بین کاربران زیادی مشترک هستند و ممکن است به دلیل شلوغی شبکه، یا به دلیل پروتکل‌های شبکه که تأخیر را نشان می‌دهند، متحمل تأخیر شوند.

اثرات

[ویرایش]

تأثیرات قابل توجه لگ نه تنها به علت دقیق، بلکه بر روی تمام تکنیک‌های جبران لگ که در بازی ممکن است پیاده‌سازی شده باشد نیز متفاوت است (در زیر توضیح داده شده‌است). از آنجایی که همه کلاینت‌ها با چندی تأخیر مواجه خواهند شد، پیاده‌سازی این روش‌ها برای به حداقل رساندن تأثیر روی بازیکنان برای بازی روان تر مهم است. لگ برای وضعیت‌هایی مثل دادن وضعیت دقیق بازی و تشخیص ضربه مشکلات زیادی ایجاد می‌کند.[۴] در اکثر بازی‌ها، لگ اغلب نادیده گرفته می‌شود، زیرا گیم پلی عادی را مختل می‌کند. شدت لگ به نوع بازی و تحمل ذاتی آن برای لگ بستگی دارد. بعضی از بازی‌های با سرعت پایین‌تر می‌توانند لگ‌های قابل توجهی را بدون هیچ نیازی به جبران تحمل کنند، در حالی که برخی دیگر با تندی بیشتر حساسیت قابل توجهی دارند و برای آنکه بتوان با آنها بازی کرد باید گسترده‌تر از جبران بهره برد (مانند ژانر تیراندازی اول شخص). به دلیل مشکلات مختلفی که تأخیر ممکن است ایجاد کند، گاهی اوقات بازیکنانی که اتصال اینترنت سریع کافی ندارند، اجازهٔ بازی ندارند، یا از بازی با سایر بازیکنان یا سرورهای میزبان سرور دور یا با تأخیر بالا نسبت به یکدیگر، منصرف می‌شوند. موارد شدید لگ ممکن است منجر به عدم همگام سازی گسترده حالت بازی شود.

لگ به دلیل نرخ ناکافی بروزرسانی بین کلاینت و سرور می‌تواند مشکلاتی ایجاد کند، اما این مشکلات معمولاً به خود کلاینت محدود می‌شود. سایر بازیکنان ممکن است متوجه حرکات تند و مشکلات مشابه، با بازیکن مرتبط با کلاینت آسیب دیده شوند، اما مشکل واقعی در خود کلاینت است. اگر کلاینت نتواند وضعیت بازی را با سرعت کافی بروز کند، ممکن است نسخه‌های تاریخ گذشتهٔ بازی به بازیکن نشان داده شود که خود موجب مشکلات مختلفی در تشخیص ضربه و برخورد می‌شود.[۵] اگر نرخ پایین بروز رسانی ناشی از فریم ریت پایین باشد (بر خلاف تنظیمات روی کلاینت که برخی بازی‌ها اجازه می‌دهند)، این مشکلات معمولاً تحت الشعاع مشکلات متعدد مربوط به پردازش سمت کلاینت قرار می‌گیرند. هم نمایشگر و هم کنترل کند و بی پاسخ خواهند بود. در حالی که این ممکن است لگ ملاحظه شده را افزایش دهد، باید توجه داشت که با تاخیرهای مرتبط با شبکه متفاوت است. برای مقایسه، همین مشکل در سرور ممکن است مشکلات قابل توجهی برای همه کلاینت‌های درگیر ایجاد کند. اگر سرور نتواند یا نخواهد بسته‌ها را از مشتریان با سرعت کافی بپذیرد و آنها را به موقع پردازش کند، کنش‌های کلاینت ممکن است هرگز ثبت نشود. هنگام ارسال بروز رسانی‌ها توسط سرور به کلاینت، بازی ممکن است با انجماد (بازی بدون پاسخ) و/یا بازگشت به عقب را با توجه به نوع جبران لگ مواجه شود.

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

راه حل‌ها و جبران لگ

[ویرایش]

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

اگر به کلاینت‌ها برای پیگیری وضعیت خود اجازه داده شود و حالت‌های مطلق به سرور یا مستقیماً به کلاینت‌های دیگر فرستاده شود بسیاری از مشکلات به راحتی حل می‌شوند.[۷] مثلاً، کلاینت دقیقاً می‌گوید که موقعیت کاراکتر بازیکن چیست یا کاراکتر به چه کسی شلیک کرده‌است. این راه حل مؤثر است و اکثر مشکلات مربوط به لگ را حل می‌کند. متأسفانه، فرض بر صداقت کلاینت است. هیچ چیزی مانع بازیکنی نیست که برای اطمینان از اینکه همیشه هدف خود شلیک می‌کند، داده‌های ارسالی بازیکن از طریق مستقیماً به کلاینت یا غیرمستقیم از طریق یک پروکسی را اصلاح کند. در بازی‌های آنلاین، به دلیل خطر تقلب این راه‌حل اجرایی نیست و مشتریان محدود به فرستادن وضعیت‌های نسبی (یعنی کدام بردار حرکت کرده یا به آن شلیک شده‌است) خواهند بود.

سمت کلاینت

[ویرایش]

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

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

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

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

سمت سرور

[ویرایش]

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

زمان عقب‌نشینی

[ویرایش]

برای رسیدگی به این مشکل می‌توان حالت‌های قبلی بازی را برای مدت زمان مشخصی ذخیره کرد، سپس هنگام پردازش یک فرمان، مکان‌های بازیکن را به عقب برگرداند.[۷] سرور از تأخیر پخش کننده (شامل هرگونه تأخیر ذاتی ناشی از درون یابی؛ توضیح در بالا) برای عقب برگرداندن مقدار مناسبی از زمان استفاده می‌کند تا مشخص کند مشتری تیراندازی در زمان شلیک چه چیزی دیده‌است. معمولاً سرور می‌بیند که کلاینت در موقعیت قدیمی هدف شلیک می‌کند و اصابت می‌کند. در بدترین حالت، یک بازیکن آن قدر عقب است که سرور از داده‌های تاریخچه مملو می‌شود و آنها باید هدایت هدف خود را از ابتدا شروع کنند.

این یک راه حل WYSIWYG است که بازیکنان می‌توانند مستقیماً آنچه را که می‌بینند هدف بگیرند. اما این قیمت تشدید کننده اثرات تأخیر زمانی است که یک بازیکن مورد حمله قرار می‌گیرد: علاوه بر تأخیر خود، مهاجم آنها نیز نقش دارد. در بسیاری از موقعیت‌ها، این قابل توجه نیست، اما بازیکنانی که به تازگی کاور شده‌اند، می‌فهمند که پیام‌های آسیب/مرگ را از سرور برای مدت طولانی‌تری از توجیه تأخیر خودشان، دریافت می‌کنند. این می‌تواند بیشتر به این تصور (کاذب) که آنها از طریق پوشش شلیک شده‌اند و تصور (نه کاملاً نادرست) از " هیت‌باکس‌های عقب مانده " منجر شود.[۷]

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

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

اعتماد به کلاینت‌ها

[ویرایش]

کلاینت‌ها می‌توانند به سرور بگویند دارند چه می‌کنند و سرور به داده‌های دریافتی اعتماد کند. از این روش حتی الامکان استفاده نمی‌شود چون در معرض تقلب است: مسیریابی داده‌های شبکه از طریق کامپیوتر ثانویه که پیام‌های ضربه ساختگی را وارد می‌کند یا پیام‌های موجود را اصلاح می‌کند، مسئلهٔ ساده ای است، تکنیکی که با ابزارهای ضد تقلب قابل شناسایی نیست.[۷]

با این حال، مقیاس محض بعضی از بازی‌ها، راه‌حل‌های محاسباتی سنگینی مثل بازگشت به عقب را ناممکن می‌سازد؛ مثلاً، در بتلفیلد ۳، از یک سیستم «تشخیص ضربه ترکیبی» استفاده می‌شود که در آن مشتریان به سرور می‌گویند که ضربه زده‌است و سرور قبل از تأیید فقط یک آزمایش مبهم از معقول بودن انجام می‌دهد.[۸]

وگرنه اعتماد به نتایج کلاینت دارای مزایا و معایبی مانند عقب برگرداندن است.

برون یابی مشتریان

[ویرایش]

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

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

طراحی

[ویرایش]

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

بازی‌های ابری

[ویرایش]

بازی ابری به بازی آنلاینی گفته می‌شود که میزبان کل بازی سرور بازی در مرکز داده است و کاربر فقط یک تین کلاینت را به صورت محلی اجرا می‌کند که اقدامات کنترلر بازی را در بالادست به سرور بازی می‌فرستد. سپس سرور بازی فریم بعدی ویدیوی بازی را با استفاده از فشردهسازی ویدیوی لگ پایین، رندر می‌کند و به پایین‌دست می‌فرستد و تین کلاینت آن را از حالت فشرده خارج می‌کند. برای تجربه ای خوب از بازی ابری، تأخیر رفت و برگشت همه عناصر سیستم بازی ابری (تین کلاینت، اینترنت و/یا اتصال LAN سرور بازی، اجرای بازی در سرور، فشرده سازی ویدیو و صدا و رفع آن، و نمایش ویدیو در نمایشگر) باید آن قدر کم باشد که احساس کاربر، اجرای بازی به صورت محلی باشد.[۳] طبق OnLive، به دلیل چنین الزامات جدی برای لگ، ملاحظات فاصله سرعت نور از طریق فیبر نوری مطرح می‌شود، و اکنون محدویت فاصله بین کاربر و سرور بازی‌های ابری تقریباً ۱۰۰۰ مایل است. تأخیر مرتبط با بازی‌های ابری بحث‌برانگیز است. در بازی‌های چند نفره با استفاده از معماری شبکه کلاینت/سرور، کامپیوتر بازیکن با ارائهٔ محلی گرافیک بازی، تنها اطلاعات مربوط به اقدامات بازیکن در بازی را به سرور می‌فرستد؛ مثلاً، هنگامی که بازیکن پس از فشردن دکمه عمل مربوطه توسط کاراکتر فوراً انجام می‌شود. عواقب عمل مثل کشته شدن دشمن بعد از تأخیری کوتاه به دلیل زمان مصرفی رسیدن عمل به سرور مشاهده می‌شود. اگر پاسخ به ورودی بازیکن به اندازه کافی سریع باشد این مسئله قابل قبول است.

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

لگ ورودی اضافی بازی‌های تک نفره را دشوار می‌کند؛ مثلاً، هنگام حرکت دشمن به سوی بازیکن، بازیکن باید بلاک کند، وقتی صفحه نمایش بازیکن شروع حملهٔ دشمن را نشان می‌دهد، در حالی که دشمن قبلاً به بازیکن در سرور حمله کرده و او را کشته‌است.

جستارهای وابسته

[ویرایش]

منابع

[ویرایش]
  1. "How to Get Rid of Lag | GeForce". www.geforce.com (به انگلیسی). Retrieved 2018-09-13.
  2. Cronin, Eric; Filstrup, Burton; Anthony, Kurc. "A Distributed Multiplayer Game Server System" (PDF). University of Michigan. Retrieved 16 July 2014.
  3. ۳٫۰ ۳٫۱ "The Process of Invention: OnLive Video Game Service". The FU Foundation School of Engineering & Applied Science (Columbia University). Archived from the original on 20 December 2012. Retrieved 2010-01-23.
  4. Smith, Joshua. "Distributed Game Architecture To Overcome System Latency" (PDF). United States Patent. Retrieved 16 July 2014.
  5. Claypool, Mark; Claypool, Kajal. "Latency Can Kill: Precision and Deadline in Online Games". Archived from the original on 29 June 2014. Retrieved 16 July 2014.
  6. Roelofs, Gregory. "Compensating For Network Latency In A Multi-Player Game" (PDF). United States Patent. Retrieved 16 July 2014.
  7. ۷٫۰ ۷٫۱ ۷٫۲ ۷٫۳ ۷٫۴ «Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization - Valve Developer Community». developer.valvesoftware.com. دریافت‌شده در ۲۰۲۲-۰۲-۲۴.
  8. Kertz, Alan (December 11, 2011). "Re: We need someone to create a guide for the new Network Interpolation Setting slider". Retrieved 4 November 2013. BF3's hit model uses a combined client server model, a Hybrid Hit Detection. The client says to the server "Hey, I shot him!" and the server does a check against the position of the two targets and determines if the player could reasonably have hit that target and then applies the damage.