প্রতি সেকেন্ডে ফ্রেম ক্যাপ করার সুবিধা কী কী? (যদি কোন)


13

আমি ডিসপ্লে ইনিশিয়েশন এবং ইনপুট জন্য এসডিএল ব্যবহার করে ওপেনগিলে একটি সাধারণ গেমের সাথে কাজ করছি, এবং সময়সীমার ক্ষেত্রে এটি আমার কাছে দুটি বিকল্প উপলব্ধ রয়েছে appears সর্বাধিক প্রথমটি কেবলমাত্র সর্বোত্তম টাইমপ্রেম ফ্রেমের জন্য ঘুমাচ্ছে - TheTimeTakenToRender, যখন সেকেন্ডে 1/1 / TheFramerateCap এ OptimalTimePerFrame হয়। (এটি প্রয়োজনীয় কিনা আমি সম্পূর্ণরূপে নিশ্চিত নই, কেননা এটি ভিসিএনসি ব্যবহারের সমতুল্য, যা আরও সঠিক হতে পারে my যদি আমার ধারণাটি সঠিক হয় তবে দয়া করে আমাকে কোথাও বলুন বা না এসডিএল + ওপেনলএলটি ডিফল্টরূপে vsync আছে এবং যদি না হয় তবে এটি সক্ষম করার জন্য।) অন্যটি হ'ল শেষ ফ্রেমটি রেন্ডার হওয়ার পরে সময়টি পরিমাপ করা এবং কেবল সেই অনুযায়ী আন্দোলন সামঞ্জস্য করা। (একটি ফ্রেম রেন্ডার করতে সংক্ষিপ্ত সময় নেওয়া, স্বল্প দূরত্বের সত্ত্বাগুলি সেই ফ্রেমে স্থানান্তরিত হবে)। কর্মক্ষমতা, এবং হ্রাস ঝলকানো ইত্যাদির ক্ষেত্রে, এই দুটি পদ্ধতির সুবিধা এবং অসুবিধাগুলি কী?

উত্তর:


15

যদি আপনার ফ্রেমের সময়টি অনির্দেশ্য হয় (এটি আপনার দোষ কিনা বা না; ওএস মাঝেমধ্যে সংস্থানগুলি ব্যবহার করতে পারে ইত্যাদি ইত্যাদি), আপনার অনুমেয় ফ্রেমরেটের তুলনায় কিছুটা কম যে অনুমানযোগ্য ফ্রেম রেটের সাথে ক্যাপিং করা যায় তা অনুমানযোগ্য বিলম্বের জন্য অনেক কিছু করতে পারে, যা করতে পারে গেমটি আরও অনেক ভাল অনুভব করুন।

আপনি যখন ইনপুট প্রক্রিয়াকরণ করবেন এবং সেই ইনপুট সম্পর্কিত পরিবর্তনগুলি রেন্ডার করবেন তখন কতক্ষণের মধ্যে পরিবর্তন খারাপ লাগতে পারে - এমনকি যদি আপনি দুজনের মধ্যে কম বিলম্ব অর্জন করেন তবে "জিটার" মানুষের কাছে (সচেতনভাবে বা অচেতনভাবে) লক্ষণীয় হতে পারে।

মাইক্রোসফ্ট গেম ফেস্ট উপস্থাপনাটি ফ্রেমে কী রয়েছে তা দেখুন : কিছুটা অন্তর্দৃষ্টির জন্য ছেঁড়া, বিলম্ব এবং ফ্রেম রেট । কারম্যাকের একটি ব্লগ পোস্টও রয়েছে যা এটি কার্যকর।

এছাড়াও সচেতন থাকুন যে আপনি যখন কম deltaTমান ব্যবহার করে ফ্রেম চালান তখন কিছু গণিত ভেঙে যেতে পারে - বা আপনি যখন ভেরিয়েবল ব্যবহার করেন তখনও deltaT(জিনিসগুলি "স্থিতিশীল" এবং ভবিষ্যদ্বাণীমূলক পদ্ধতিতে করতে আরও কঠিন বা এমনকি জটিলও হতে পারে, যা জিনিসগুলির জন্য গুরুত্বপূর্ণ রিপ্লে এবং নেটওয়ার্ক সিঙ্ক্রোনাইজেশনের কিছু ফর্মগুলির মতো)। এখানে কিছু অন্তর্দৃষ্টি জন্য আপনার টাইমস্টেপ ঠিক করুন দেখুন ।


1
(যাইহোক, আমি অত্যন্ত "ঘুম" এর মাধ্যমে ক্যাপিং না দেওয়ার সুপারিশ করব; আপনার প্ল্যাটফর্মে আপনার ভিএনসিএনসি পরিস্থিতি কী তা নির্ধারণ করুন এবং আপনাকে গাড়ি চালানোর জন্য ভিএনসিএনসি ব্যবহার করুন It's এটি অনেক বেশি অনুমানযোগ্য এবং সাধারণত কম সংস্থান ব্যবহার করে))
লিণ্ডার

ধন্যবাদ, আমি অবশ্যই ফ্রেমরেট ক্যাপ করার চেষ্টা করব। আপনি কীভাবে এসডিএল ব্যবহার করে ভিএনসিএন সক্ষম করবেন তা জানেন?
w4etwetewtwet

1
এসডিএল ২.০-তে আপনি SDL_NDERER_PRESENTVSYNC পতাকাটি SDL_CreateRenderer কলটিতে পাস করে vsync সক্ষম করতে পারেন, যেমনSDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
টিজেএস

12

আপনি অনেক কম সিপিইউ ব্যবহার করবেন (মাল্টি টাসাররা আপনাকে ধন্যবাদ জানাবে) এবং মোবাইল ডিভাইসের লোকেরাও এটির প্রশংসা করবে।


4
নিম্ন বিদ্যুতের ব্যবহার (মোবাইল ডিভাইস / ল্যাপটপের জন্য গুরুত্বপূর্ণ) এবং কম তাপ উত্পাদন উল্লেখ না করা।
জিল

এটি আমাকে কিছু গেমস ইস্যুর স্মরণ করিয়ে দেয়, যখন মেনুগুলিতে FPS সীমাহীন এবং অত্যধিক 900fps ছিল এবং এটি সিপিইউ / জিপিইউ -> উচ্চতর টেম্প -> আরও শব্দে জোর দেয়।
ক্রোমস্টার

10

ফ্রেমরেট নিয়ন্ত্রণ করতে আপনার কখনই, কখনও কখনও, কখনও কখনও স্লিপ ব্যবহার করা উচিত নয়

এটি এর আগেও শেষ হয়ে গেছে এবং এর কারণগুলির জন্য আলোচনার জন্য আমি আপনাকে অন্য প্রশ্নে উল্লেখ করব। একটি জিনিস যা এখানে উল্লেখ করা হয়নি তা হ'ল টিপিক্যাল আধুনিক রিফ্রেশ হারে 60Hz, এবং স্লিপ কলগুলির সাধারণ 1 মিলিসেকেন্ড গ্রানুলারিটির সাথে ফ্রেমের মধ্যে সঠিক সময়ের জন্য ঘুমানো অসম্ভব।

আমি বলছি না যে আপনার যদি কিছু না করার থাকে তবে সিপিইউ দেওয়া খুব খারাপ কাজ; এটি থেকে অনেক দূরে। তবে ফ্রেমরেট নিয়ন্ত্রণ করা একই জিনিস নয় এবং ঘুম একটি সমাধান যা পূর্বের পক্ষে উপযুক্ত তবে পরবর্তীকালের নয়।

পরিবর্তে সময় অতিবাহিত হয়ে দেখুন, এবং যদি কোনও ফ্রেম চালানোর সময় হয়ে থাকে তবে তা করুন, অন্যথায় - এবং আপনি যদি কিছু সিপিইউ অর্জন করতে চান - সর্বাধিক সময়ের জন্য ঘুমান - 1 মিলিসেকেন্ড is আপনার স্লিপ টাইমারটি আপনার প্ল্যাটফর্মের জন্য যথাযথভাবে সেট আপ করা হয়েছে যাতে এটি আপনাকে ভাল রেজোলিউশন দেয় তা নিশ্চিত করুন; অর্থাত্ আপনি যখন "ঘুম (1)" কল করেন তখন 15, 20 বা 30 এর মতো কিছু না হয়ে আসলে 1 মিলি সেকেন্ডের জন্য সত্যিই ঘুমানোর সম্ভাবনা থাকে। আমি বিশ্বাস করি যে এসডিএল আপনার জন্য এটি স্বয়ংক্রিয়ভাবে করবে।

আপনি এটিতে কিছুটা আলগাও তৈরি করতে পারেন, যাতে যদি কোনও ফ্রেম চালানোর সময় হয়ে যায় তবে আপনি ঘুমানো বন্ধ করেন এবং ফ্রেমটি চালানো না হওয়া পর্যন্ত ফ্ল্যাট-আউট চালানো শুরু করেন, যা আপনাকে আপনার পছন্দসই ফ্রেমের ব্যবধানটিকে আরও সঠিকভাবে আঘাত করতে সহায়তা করতে পারে।

এর মতো দেখতে কী শেষ হয় তা হ'ল স্লিপ (1) এর মাঝে মাঝে মাঝে মাঝে ফ্রেমের সাথে কল করে এবং এটি ঠিক। আপনার যখন প্রয়োজন হবে না তখনও আপনি সিপিইউ ছেড়ে দিচ্ছেন, তবে আপনার ফ্রেমগুলি এখনও সময়মতো চালাতে সক্ষম হবে।


1

ক্যাপিং ফ্রেম রেটের সম্ভবত সবচেয়ে গুরুত্বপূর্ণ সুবিধা হ'ল এটি মেশিনে আক্ষরিক শারীরিক ক্ষতি রোধ করতে সহায়তা করতে পারে। তারা স্টারক্রাফ্ট II এ এটি করতে ভুলে গিয়েছিল, যা কিছু ব্যবহারকারীদের জন্য এটি প্যাচ না করা পর্যন্ত খুব সমস্যাযুক্ত (এবং ব্যয়বহুল) হিসাবে প্রমাণিত হয়েছিল।


0

যেমনটি আগে উল্লেখ করা হয়েছিল, এটি সিপিইউ ব্যবহার কমায়। ফ্লিপসাইডে, এবং ক্রমবর্ধমান গুরুত্বপূর্ণ, এটি ব্যাটারির জীবনও সঞ্চার করে। একটি ভাল উদাহরণ হিসাবে, এফটিএল আমার এমবিএতে প্রায় 100% সিপিইউতে চলে। ফলস্বরূপ, এটি 2 ঘন্টা ব্যাটারি ড্রেন করে এবং খুব গরম চলে hot (আরও প্রত্যক্ষ ফলাফল হিসাবে, আমি আনইনস্টল করেছি এবং এটি আর খেলব না ...)। একটি ফ্রেম ক্যাপ এটি আটকাতে পারে।

অন্য অনির্ধারিত সুবিধাটি হ'ল, যদি এটি কোনও মাল্টিপ্লেয়ার গেম হয়, তবে আপনিও সবাইকে একই অভিজ্ঞতা দিয়ে খেলার ক্ষেত্রকে সমতল করুন।


আপনার ফ্রেমরেট এবং গেম আপডেট লুপটি একই গতিতে চলতে হবে না, তাই লোকেদের একই অভিজ্ঞতা দেওয়া একাই ফ্রেমরেটের উপর নির্ভর করে না।
থমাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.