مشكلة توقيت الإطار المراوغ


المدير الفني Croteam Alain Ladawach ، الذي شارك في تطوير Serious Sam و Talos Principle ، يخبر كيف تمكن من العثور على سبب تباطؤ الرسومات حتى على أقوى الأجهزة.

أخيرًا ، ظهر تفسير لسبب تباطؤ بعض الألعاب على جهاز الكمبيوتر الخاص بك (وبصيص أمل في أنها ستتوقف عن التباطؤ في المستقبل القريب).

الفرامل TT


كنت تتطلع إلى الجزء التالي من سلسلة ألعاب الفيديو المفضلة لديك على الكمبيوتر ، وقد خرج أخيرًا. هذه المرة تريد الاستمتاع بها بالكامل ، لذلك قضيت المال والوقت في التحضير الشامل. قمت باستبدال المعالج ، وتثبيت بطاقة رسومات حديثة للغاية ، وإضافة المزيد من ذاكرة الوصول العشوائي - الجحيم ، حتى أنك اشتريت RAID على SSD. يجب أن تكون اللعبة سلسة من شاشة التوقف نفسها.

تم إلغاء تأمين الطلب المسبق أخيرًا وقد أكملت التثبيت للتو. في انتظار عصبية ، تبدأ اللعبة للمرة الأولى. حتى الآن جيد جدًا - يعمل بسرعة 60 إطارًا في الثانية. أو على الأقل هذا ما يقوله عداد إطار موالف GPU. لكن هناك خطأ ما. تقوم بحركات فوضوية حادة باستخدام الماوس. رباط اليسار واليمين ، ثم تبدأ اللعبة ... في التباطؤ! اللعنة ، كيف هذا ممكن؟ كيف يمكن أن تبطئ 60 إطارًا في الثانية؟

إذا لم يحدث هذا لك مطلقًا ، فقد يبدو هذا سخيفًا. ولكن إذا كنت قد اختبرتهم ، فأنت على الأرجح تكره الفرامل من كل قلبك. الفرامل في الألعاب. هذه ليست "تأخر" قديم جيد. ليس معدل إطار منخفض. هذه مجرد "فرامل" تحدث بمعدلات إطارات عالية على ماكينات مثالية وسريعة للغاية. ما هو ، من أين أتوا وكيف تخلص منهم؟ دعني أخبرك قصة ...

الفرامل ، النعومة ، السرعة ... هل هي واحدة؟


تم تشغيل ألعاب الفيديو بمعدل 60 إطارًا في الثانية منذ وقت أول آلات آركيد في السبعينيات. عادة من المتوقع أن تعمل اللعبة بنفس التردد الذي تستخدمه الشاشة. كان هذا قبل تعميم الألعاب ثلاثية الأبعاد ، حيث أصبح معدل الإطار المخفض مقبولًا للمرة الأولى. في التسعينات ، عندما بدأت " البطاقات ثلاثية الأبعاد " (كما أطلقنا عليها قبل أن تصبح " GPUs ") في استبدال عرض البرامج ، لعب الأشخاص ألعابًا بمعدل 20 إطارًا في الثانية ، واعتبر 35 إطارًا في الثانية قيمة لائقة لمعارك الشبكة الجادة. أنا لا أمزح .

اليوم لدينا سيارات فائقة السرعة " وبطبيعة الحال ، يمكنها العمل بمعدل 60 إطارًا في الثانية ". ومع ذلك ، فإن عدد المستخدمين الذين أصيبوا بخيبة أمل من سرعة ألعاب المستخدمين لم يكن أكبر. كيف هذا ممكن؟ لا تكمن المشكلة في أن الألعاب لا يمكنها العمل بسرعة كافية ، ولكنها تتباطأ حتى عندما تتمكن من العمل بسرعة !

إذا قرأت منتديات ألعاب مختلفة ، فستجد بالتأكيد رسائل مماثلة:

الصورة

قد تعتقد أن هذه مشكلات فردية ، ولكن انظر إلى إحصائيات استعلامات بحث Google:

الصورة

على مدى السنوات الخمس الماضية ، أصبحت الفرامل (التلعثم) مشكلة أكثر خطورة (نسبياً) من السرعة!

(لاحظ أن هذه قيم نسبية. فهي لا تعني أن الناس يسألون بشكل عام عن الكبح أكثر من معدل الإطارات. ويعني ذلك أن طلبات معدل الإطارات تبقى عند نفس المستوى ، وأن عدد طلبات المكابح ينمو. ، وخاصة في الآونة الأخيرة.)

عقد من البحث عن سبب المكابح التي لا يمكن تفسيرها


الصورة

من المرجح أن يكون المريض على قيد الحياة أكثر من الموت ، فهو يبطئ أكثر من اللازم بقليل.

واجهت هذه المشكلة لأول مرة في حوالي عام 2003. لقد عملنا على Serious Sam 2 ، وبدأ المستخدمون يرسلون إلينا تقارير تفيد بأنهم اختبروا شيئًا على مستوى فارغ ، وأنه عند تحريك الماوس ، لم تكن الحركات سلسة. وقد رافق ذلك نمط مميز للغاية على الرسم البياني لمعدل الإطارات ، والذي أطلقنا عليه "مخطط القلب".

اعتقدنا أنه في مكان ما في الرمز ، كان هناك خطأ ، ولكن لم نتمكن من العثور عليه. يبدو أن المشكلة تظهر وتختفي بشكل عشوائي - بعد إعادة تشغيل التطبيق ، إعادة تشغيل الجهاز ... ثم قام المشغل بتغيير بعض خيارات السرعة واختفى. ثم قام اللاعب بتشغيل هذا الخيار مرة أخرى ، لكن المشكلة لم تعد. بدت وكأنها شبح.

من الواضح أن هذه المشكلة لم تنشأ معنا فقط. بمشاهدة نفس المشاكل في الألعاب الأخرى ، بدأنا نعتقد أن السائقين هم الملامون. ولكن هذا حدث على بطاقات الفيديو من الشركات المصنعة المختلفة. حتى على واجهات برمجة التطبيقات المختلفة (OpenGL ، DirectX 9 ، DirectX 11 ...) - الشيء الوحيد المشترك بينهم هو ظهورهم على أجهزة مختلفة ، في بعض المشاهد ... في بعض الأحيان.

الصورة

Nessie، bigfoot ... تقريبًا بعيد المنال مثل مشكلة "مخطط القلب".

أصدرنا بعض الألعاب الأخرى ، لكن هذا السلوك الغريب لا يزال يظهر ويختفي. لقد أزعج بعض المستخدمين ، وأوصينا بتغيير خيارات السرعة - في بعض الأحيان ساعدت ، وأحيانًا لا. هذه هي الحياة ، أليس كذلك؟

لكن ذات يوم ، في يوم شتوي عظيم في أوائل عام 2013 ، اتصل بي زميلي دين لرؤية مثال آخر على هذه المشكلة ، والتي يمكن أن يعيد إنتاجها بشكل مستقر نسبيًا في ذلك الوقت. هذه المرة نشأت المشكلة من مستوى Serious Sam 3 . لقد جربنا الخيارات في هذا المشهد حتى بزغ فجأة. فهمت ما هو السبب! وكانت بسيطة للغاية - فلا عجب أنها ابتعدت عن الجميع لمدة اثني عشر عامًا.

من خلال تغيير خيار واحد بسيط للغاية لمحرك اللعبة ، تمكنا من جعل هذه المشكلة تظهر وتختفي في هذا المشهد بالذات. ولكن أصبح من الواضح لنا على الفور أن الأمر يتطلب الكثير من الجهد لحلها عالي الجودة. لا يقتصر الأمر على جهودنا فحسب ، بل على النظام البيئي الكامل لألعاب الكمبيوتر - مبرمجو برامج تشغيل GPU ، مطورو API ، وموردي نظام التشغيل - الجميع.

دعني أشرح.

ماذا كان السبب كل هذا الوقت


أود أن أريكم مثالاً لمشهد من مسلسل Serious Sam 3 ، الذي استكشفته أنا ودين قبل خمس سنوات. أو حتى أفضل - باستخدام مشهد الاختبار من Serious Sam 2 كمثال ، والذي رأيناه فيه لأول مرة. ولكن ، للأسف ، بعد استبدال "الحديد" ، يمكن لهذا الوحش المراوغ أن ينتقل إلى مشهد آخر. لدي مشهد من مبدأ Talos تمكنت فيه مؤخرًا من إعادة إنتاج هذه المشكلة ، وقمت بتصوير بعض مقاطع الفيديو التي سمحت لي بتحليلها بمزيد من التفاصيل.

ولكن قبل أن نبدأ ، تأكد من مشاهدة الفيديو بالفعل بمعدل 60 إطارًا في الثانية. لعرض الأمثلة أدناه ، قم بالتبديل إلى 1080p60 ، كما هو موضح في الصورة:

الصورة

لمشاهدة فيديو بسرعة 60 إطارًا في الثانية ، انتقل إلى YouTube بسرعة 1080 بكسل 60.

إذا كنت تفعل كل شيء بشكل صحيح ، وكان جهاز الكمبيوتر ومتصفح الويب قادرًا على عرض الفيديو بمعدل 60 إطارًا في الثانية ، فيجب تشغيل الفيديو أدناه بسلاسة وبدون أي مكابح. إذا لم يكن الأمر كذلك ، لهذا نتحدث عنه - العديد من التطبيقات الأخرى تظهر أيضًا هذا السلوك ، وليس فقط الألعاب. في الوقت الحالي ، يمكنني فقط أن أوصيك بمحاولة مشاهدة الفيديو على جهاز آخر ، أو قراءة النص فقط.


تحقق ، تحقق ، واحد ، اثنان ، ثلاثة ... يجب أن تشاهد هذا الفيديو بسلاسة 60 إطارًا في الثانية.

الآن دعنا نبدأ العمل. إذا واجهت مكابح ، فمن المرجح أن يبدو شيء مثل هذا:


« 60 fps». «».

, «», 60 fps. - , , « ». , ( , - «» ). « », , - , . 60 fps, « ». ( , , .)

(«»), YouTube . (), . , . , , …



, ? ? , ?..

, , , !

?


. «», 1/20 , :


60 fps, «». 20 .

: -, — , . -, - - — «» , , .

: — — — «»… «» . , ?

(, ( 1/10 000 ), : , …

image

. — , — «».

… , «» ( ). , , , ( ).

… «», « », ?

, , . ( , , , .)


-, - … , , . NTSC, 60 , 60 fps, PAL/SECAM, 50 , 50 fps. - « ».

, — , " ", ZX Spectrum, C64, Atari ST, Amstrad CPC 464, Amiga .. , , , 100% , .

«». , , . , Sonic The Hedgehog Sega Genesis , , 16 . PAL NTSC, 50 fps 60 fps. , .

— , PC «» — , . , . 3D-, , . , — , … . , .

, . ( , «» - , .)

, , . 1/60 (16,67 ), 10 /, 1/6 . 1/60 , 1/30 (33,33 ), 1/3 ( «») , .

? , . , . , . 90- ( «35 fps » ), . ( , GPU) «» «», . 3D-, . , .


GPU, "". , GPU - , GPU , , GPU . , GPU, « », GPU . - . — - . , , .

, , , … . . , :

image

. — , — «».

, . 16,67 ( 1/60 ), , , . () , 24,8 ( 1/60 ), , … , , 10,7 , , - . ( .)

: , , , , PC. , 60 fps, - , . - GPU 60 fps .

— , («») .

, , — , .

. ( , — , ?), :


«», , .

«». «» , !

? Serious Engine sim_fSyncRate=60. , « , 60 fps». — , ! , — , .

? ?

?


— . . , 60, 60 — PC : - , GPU/… — .

, , , — - . ?

, / , .

, ? , — !

, . , API. , , , . , , API , : , . , , .

?


, . API. Vulkan API VK_GOOGLE_display_timing, proof of concept. , Android Linux.

API. ? , .

, Croteam , , .

, , The Talos Principle .


. « », . , , , , .

«»


image

? , . - , ?

« », . , , , , , Skype .. 3D. , , . .

. , — ?


, GPU , , . , GPU . , , . , .


. :) GPU . , GPU . , .

Source: https://habr.com/ru/post/ar419043/


All Articles