ইউপিএস এবং এফপিএস - আমার কী সীমাবদ্ধ করা উচিত এবং কেন?


11

আমি বর্তমানে সি ++ এবং এসডিএল 2 ব্যবহার করে একটি গেম লিখছি এবং আমি এখানে একটি বিষয় নিয়ে ভাবছি যে - আমার ফ্রেম প্রতি সেকেন্ডে (এফপিএস) এবং / বা আমার আপডেটগুলি প্রতি সেকেন্ডে (ইউপিএস) সীমাবদ্ধ করা কি বোধগম্য নয়?

আমি ধারণা পেয়েছি যে আপনি ইউপিএস সীমাবদ্ধ রাখলে আপনি মূলত গতির গতি নিয়ন্ত্রণ করতে পারেন - যদি খেলোয়াড় প্রতি আপডেটে 1 পিএক্স স্থানান্তরিত করে এবং আপনি সর্বদা এটি প্রতি 30 সেকেন্ডে 30 বার আপডেট করেন তবে সে 30px / s এর গতিতে চলে যাবে এবং আপনি প্রতি সেকেন্ডে গণনার পরিমাণ হ্রাস হওয়ায় সম্ভবত সিপিইউ থেকেও মুক্তি পাবেন। আপনি যদি এফপিএস সীমাবদ্ধ করেন তবে প্রতি সেকেন্ডে ড্রকলের পরিমাণ হ্রাস পায়, তাই আপনি আপনার জিপিইউ উপশম করেন। আমি আশা করি আমি এগুলি সমস্ত সঠিকভাবে বুঝতে পেরেছি, যদি না হয় তবে আমাকে সংশোধন করতে দ্বিধা বোধ করবেন।

আমার প্রশ্নটি - আমার খেলায় আমার কী সীমাবদ্ধ রাখার কথা? FPS যে? ইউ। পি। এস? উভয়? একটিও না? এর থেকে আরও ভাল পদ্ধতির কী আছে? বেশিরভাগ গেমগুলিতে এটি কীভাবে করা হয় এবং কেন?

উত্তরগুলি প্রশংসিত হয়!


2
সত্যিই কোনও উত্তর নয়, তবে আপনি এটি দরকারী খুঁজে পেতে পারেন: gafferongames.com/game-physics/fix-your-timestep
সাইফার

উত্তর:


10

হ্যাঁ, এটা বোঝা যায় না।

যেমনটি আপনি বলেছেন যে এটি সিস্টেমে কম লোড তৈরি করবে, যা তাপীয় এবং অন্যান্য অ্যাপ্লিকেশনগুলির জন্য ভাল।

তবে .... আপনার গেমসের যুক্তি প্রতি সেকেন্ডের আপডেটের উপর নির্ভর করবে না। অতএব আমি আপনাকে ডেল্টাটাইমটি একবার দেখার জন্য পুনঃব্যক্ত করলাম, যা প্রতি সেকেন্ডের আপডেটগুলি থেকে আপনার গেমটি স্বাধীন করে তুলবে।

আমি আপনাকে এই প্রশ্নটি একবার দেখার পরামর্শ দিচ্ছি। এটি কীভাবে গণনা এবং ব্যবহার করতে হয় তা বেশ ভালভাবে ব্যাখ্যা করে explains কিভাবে ডেল্টা সময় পাবেন এবং ব্যবহার করবেন

আশা করি এটি সাহায্য করেছে!


সুতরাং আমি কি উভয় বা কেবল একটির সীমাবদ্ধ করব?
ডককুক

উভয়, তবে সমন্বয় করতে সেটিংসে একটি বিকল্প যুক্ত করুন।
KaareZ

5
সাবধানতার একটি শব্দ: আপনি যদি পদার্থবিজ্ঞানের ইঞ্জিন ব্যবহার করেন তবে ডেল্টার সময় / পরিবর্তনশীল আপডেট ফ্রেমের উপর নির্ভর করবেন না কারণ এগুলি খুব কমই সমর্থিত; তাদের জন্য স্থির ফ্রেম পদ্ধতির প্রয়োজন। এবং যদি আপনার ফ্রেমটি অনেকটা ওঠানামা করে, এর অর্থ হতে পারে আপনার সফ্টওয়্যারটিতে আপনার সমস্যা রয়েছে এবং কেন এমন হয় তা ভাবতে হবে। এগুলি দেওয়া, আপনি ডিটি পদ্ধতির ব্যবহারটি পুনরায় বিবেচনা করতে পারেন।
ভাইল্যানকোর্ট

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

1
সত্যিই, আমি মনে করি ডেল্টাটাইম একটি ভাল ধারণা নয়। আমি এটি বছরের পর বছর ধরে ব্যবহার করেছি এবং এটি দুটি প্রধান সমস্যা নিয়ে আসে। প্রচুর বিভিন্ন মাল্টিপ্লেয়ার নিবন্ধগুলির জন্য নির্দিষ্ট সময়ের পদক্ষেপগুলি ব্যবহার করার পরামর্শ দেয় এবং যদি ডেল্টাটাইম খুব বেশি হয়ে যায়, তবে আপনি যদি তা বিবেচনায় না নেন তবে আপনি দেয়াল বা অনুরূপ বাগগুলির মাধ্যমে টেলিপোর্ট করতে পারবেন।
প্রোগ্রামমুদে

6

সর্বোত্তম উত্তরটি: এটি নির্ভর করে

আপনার একটিও সীমাবদ্ধ করতে হবে না

আপডেটগুলি : যদি আপনার আপডেটগুলি কোনও উচ্চতর সীমাতে আবদ্ধ না হয়, তবে গেমটি যেখানে চালানো হচ্ছে তার উপর নির্ভর করে গেমটি দ্রুত বা ধীরে ধীরে চালানো এড়াতে গেম যুক্তি একটি ব-দ্বীপ সময়ের পরিমাণের উপর নির্ভরশীল হওয়া উচিত । এটি অনেক গেম দ্বারা ব্যবহৃত একটি খুব সাধারণ পদ্ধতি, তবে এটি একমাত্র নয়।

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

আপনি উভয় সীমাবদ্ধ হতে পারে

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

রেন্ডারিং : পূর্ববর্তী টিয়ারিংয়ের সমস্যা এড়াতে প্রতি সেকেন্ডের ফ্রেমগুলি একটি উচ্চতর সীমাতে সেট করা উচিত, তবে, আপনার অ্যাপ্লিকেশনটিকে কিছু সিপিইউ লক দিয়ে ম্যানুয়ালি করার চেষ্টা করা উচিত নয় । পরিবর্তে, ভি-সিঙ্ক সক্ষম করুন এবং মনিটরের রিফ্রেশ রেটের সাথে আন্ডারলিং হার্ডওয়্যারটিকে সিঙ্ক্রোনাইজ করতে দিন। এটি করার মাধ্যমে, আপনার গেমটি ভবিষ্যতের মনিটরের সাথে সামঞ্জস্যপূর্ণ হবে যা বর্তমানে খুব সাধারণ 60Hz এর চেয়ে অনেক বেশি ফ্রিকোয়েন্সিতে পরিচালিত হতে পারে। এটিও লক্ষণীয় যে অনেক গেমার, বিশেষত যারা বেঞ্চমার্কিংয়ের ক্ষেত্রে রয়েছে তারা এখনও সর্বাধিক সম্ভব ফ্রেম রেটের অনুমতি দেওয়ার জন্য ভি-সিঙ্ক ছাড়াই চালানো পছন্দ করে। সুতরাং রানটাইম চলাকালীন বৈশিষ্ট্যটি সক্ষম বা অক্ষম করার অনুমতি দেওয়া বুদ্ধিমানের কাজ।

আপনার কি সীমাবদ্ধ করা উচিত নয়

যদি আপনার গেমটি ব্যবহারকারীর ইনপুটটিতে একটি পোলিং-ভিত্তিক পদ্ধতির ব্যবহার করে, যেমন: getInput()আপডেটের ধাপের সময় নিয়ামক রাজ্যগুলিকে আপডেট করতে বিভিন্ন ধরণের কল করে , তবে সীমাবদ্ধ না থাকলে এটি আরও ভাল। বা যদি সীমাবদ্ধ থাকে তবে খুব উচ্চতর উপরের সীমানায় সেট করুন। আপনি যত বেশি প্রায়ই ব্যবহারকারীদের ইনপুটটি জিজ্ঞাসা করেন এবং এতে কাজ করেন, ততই সাড়া জাগানো এবং খেলাটি "বোধ" হবে smooth আমরা আজকাল তথাকথিত H০ হার্টজ গেমগুলির কথা শুনি যা এআই এবং সমস্ত বিশ্বের রাষ্ট্রগুলিকে সেই হারে আপডেট করে না, কেউ কেউ এই দ্রুত প্রতিবেদনও করে না, তবে তারা সেকেন্ডে কমপক্ষে times০ বার নিয়ামক ইনপুট অনুসন্ধান করে এবং সেই অনুসারে প্লেয়ার অবতার আপডেট করে। অনুমোদিত যে এটি কেবল দ্রুতগতির অ্যাকশন গেমের ক্ষেত্রেই প্রাসঙ্গিক।


যদিও ভিএসআইএনসি সক্ষম করা হয়েছে তখন আমার আপডেটগুলি স্বয়ংক্রিয়ভাবে সীমাবদ্ধ থাকে। সুতরাং, আমি স্পষ্টতই টিয়ারিং-সমস্যা এবং আপডেট-পোলিং-সমস্যার মধ্যে সিদ্ধান্ত নিতে হবে, সঠিক?
ডককুক

@ ডককুক, যদি আপনার রেন্ডারার এবং গেম যুক্তি একই থ্রেডে চালিত হয়, হ্যাঁ, ভি-সিঙ্ক সক্ষম করা আপডেটের ফ্রিকোয়েন্সিও ঠিক করে দেয়। এটি এক কারণ যা কিছু গেমগুলিকে আলাদা থ্রেডে আলাদা করে উপস্থাপনা এবং গেম-লজিক দেয়।
গ্ল্যাম্পার্ট

1

দুটি পোস্ট রয়েছে যা আপনি একবার খেয়াল করতে চাইতে পারেন:

আপনার টাইমস্টেপ ঠিক করুন

ইন্টারপোলটেড ফিজিক্স রেন্ডারিং

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

আশা করি এটা সাহায্য করবে.

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