ফ্রেমরেট সীমাবদ্ধতা


9

সবচেয়ে সফল প্রতিযোগিতামূলক খেলা ইঞ্জিন পছন্দ id Tech, GoldSrc, Sourceএবং এই ধরনের ফ্রেমরেট সীমাবদ্ধতা জন্য অনুমতি দেয়।

সংক্ষিপ্তভাবে আপনি এটিকে ক্যাপ করতে এবং ক্যাপটি নিয়ন্ত্রণ করতে পারেন 30 দিয়ে, 60 দিয়ে 99, 99 দিয়ে 72, 68 এর সাথে খেলতে পারবেন।

আমি ভাবছিলাম, আমি কীভাবে ফ্রেমরেট সীমাবদ্ধ করব?

কোডে আগ্রহী নয়, তবে তত্ত্ব।


কৌতূহলের বাইরে, অন্যান্য প্রক্রিয়াগুলির জন্য চক্র মুক্ত করা ব্যতীত এর অন্যটি কী?
ডিভে

1
@ ডেভিডলাইভলি, ল্যাপটপগুলি সম্পর্কে চিন্তা করুন, যারা খুব উচ্চ ফ্রেমের হারে খুব সহজেই অতি উত্তপ্ত হয়, যখন 60fps ক্যাপ সহ (আরও যেভাবেই নিরর্থক, এমনকি 60 কিছুটা বেশি, 40 করা উচিত) তারা তাপমাত্রা আরও ভালভাবে নিয়ন্ত্রণ করতে পারে।

প্রতিযোগিতামূলক গেমিংয়ের জন্য 60০ থেকে ১০০ এফপিএসের মধ্যে স্পাইকগুলির পরিবর্তে একটি এমনকি ফ্রেম রেট থাকা ভাল কারণ কখনও কখনও কিছু ক্রিয়া ফ্রেম রেট নির্ভর করে সময় নির্ভর নয়, সমান ফ্রেম রেট আপনাকে এই ক্রিয়াকলাপগুলির জন্য অনুভূতি পেতে দেয়। বিটিডাব্লু নোট করুন যে আপনি ভিএসআইএনসি সক্ষম করলে আপনার গেমটিতে সর্বদা আপনার রিফ্রেশ রেটের সমত সর্বোচ্চ এফপিএস থাকে কারণ (ড্রাইভার এটি যত্ন করে)।
রায় টি।

উত্তর:


7

তত্ত্বটি হ'ল: আপনি যখন কোনও ফ্রেম শেষবার রেন্ডার করেছিলেন তা পরীক্ষা করে দেখুন এবং যদি অন্য ফ্রেমটি আঁকার সময় এখনও না আসে, তবে যাবেন না এবং এটি হওয়া পর্যন্ত অপেক্ষা করুন।


8

বলুন আপনি নিজের ফ্রেমরেটটি 60fps-এ সীমাবদ্ধ করতে চান, তার অর্থ প্রতিটি ফ্রেমের 1 / 60s = 16,67ms রেন্ডার সময় থাকে (বৃত্তাকার)

আপনার ফ্রেমের হার সীমাবদ্ধ করতে আপনি আপনার গেম লুপের শুরুতে কেবল সময়টি পরীক্ষা করতে পারেন, তারপরে আপনি গেম লুপের শেষে যে সময়ের সাথে তুলনা করতে পারেন: যদি পার্থক্যটি 16.67ms এর চেয়ে কম হয় তবে আপনাকে সেই সময়ের জন্য স্টল করা উচিত।

এটি করার একটি উপায় হ'ল ব্যবহার করা:

sleep(waittime)

তবে যেহেতু sleep(x)ন্যূনতম xমিলিসেকেন্ডের জন্য থ্রেড ফলন করে আপনি সময় মতো নিয়ন্ত্রণ ফিরে পাবেন কিনা তা আপনি নির্দিষ্টভাবে জানেন না।

একটি ভাল উপায় ব্যবহার করা হবে:

while(timediff < 16.67ms){ sleep(0); }

এটি থ্রেড প্রদান করে এবং যত তাড়াতাড়ি সম্ভব ফিরে আসার অনুরোধ জানায়।

আর একটি সমাধান হ'ল ব্যস্ত ওয়েট লুপ থাকা, এটি আপনাকে সেরা নিয়ন্ত্রণ দেয় তবে অযথা সিপিইউ ব্যবহার করে।

মনে রাখবেন যে ওএস সময়সূচী সর্বদা আপনার থ্রেড থেকে নিয়ন্ত্রণ সরিয়ে নিতে পারে তাই কিছুটা ওঠানামা করার জন্য প্রস্তুত থাকুন।


"1 / 60s" পরিষ্কার হতে হবে। :)
রিচার্ড মার্স্কেল - ড্রাকির

এই সমাধানটি সত্যিই খারাপ। আপনি যদি ভিআইএনসিএন সক্ষম করেছেন বা ওএস স্টাফ করার সিদ্ধান্ত নিয়েছে, আপনার ফ্রেমরেট অনেকটা ওঠানামা করবে।
তারা

@ ডুডসন কেন খারাপ? (এটি কোয়াক 3 বিটিডব্লুতে ব্যবহৃত কৌশল)। আপনার এফপিএস 60 এর চেয়ে কম হলে লুপটি এড়িয়ে যায়। সুতরাং এটি আপনার এফপিএসকে যথাসম্ভব উঁচুতে রাখে তবে কখনও 60 এর উপরে নয়
রায় টি।

@RoyT। আকর্ষণীয় ... আপনি কোথা থেকে এই তথ্যটি পেয়েছেন? উত্স কোড থেকে? এছাড়াও, আমি বলছি একটি লুপে অপেক্ষা করা খারাপ কারণ এটি ঠিক আমার ইঞ্জিনে এটি হয়েছিল এবং এটি আমার প্রচুর ব্যথা করে। সমস্যাটি হ'ল, আপনি যখন ভিসিএনসি চালু করেন (জিপিইউ ড্রাইভারের মধ্যে) আপনি অতিরিক্তভাবে আপনার কোডটিতে ফ্রেম রেট সীমাবদ্ধ করার চেষ্টা করেন আপনি প্রচুর ফ্রেম ড্রপ পান, কারণ আপনার টাইমিনিগ প্রতিটি ফ্রেম নিখুঁত হবে না। আমি শুধু vsync সমস্যা সম্পর্কে কথা বলছি। ভিআইএনসিচ ছাড়া এটি কোনও সমস্যা নয়। এবং আমি নিশ্চিত নই যে আজকের মতো ভূমিকম্পে 3 দিনের মধ্যে ভিএনসিঙ্ক একই ধরণের চুক্তি হয়েছিল কিনা।
তারা 21

@ ডিউডসন অন্য কেউ আমাকে ইশারা করেছেন কিছুক্ষণ আগে কারণ আমি অপেক্ষা ও ঘুম নিয়ে ব্যস্ত হয়ে পড়েছিলাম। আমি এখন দেখতে পাচ্ছি যে আপনি কিছুটা মিস করলে ভি-সিঙ্ক চালু থাকলে আপনি 30fps এবং 60fps এর মধ্যে ওঠানামা করতে পারেন। তবে আমি অনুমান করি যে কোনও কৌশল দ্বারা এটি ঘটে (এটি ফ্রিসাইঙ্ক হ্রাস করার চেষ্টা করে না)। কোড দ্বারা একটি সীমাবদ্ধ ফ্রেমরেট, বা আপনার কম্পিউটার 60fps এ রেন্ডার করতে না পারায় এই সমস্যাটি আমার মনে হবে সর্বদা :)
রায় টি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.