গেম লুপে আপডেট রেন্ডারিংয়ের বিন্দুটি কী?


74

গেম লুপগুলিতে সেখানে কয়েক ডজন নিবন্ধ, বই এবং আলোচনা রয়েছে। যাইহোক, আমি প্রায়শই প্রায় এই জাতীয় কিছু আসে:

while(running)
{
    processInput();
    while(isTimeForUpdate)
    {
        update();
    }
    render();
}

মূলত এই পদ্ধতির সম্পর্কে আমাকে বিরক্ত করা হচ্ছে হ'ল "আপডেট-ইন্ডিপেন্ডেন্ট" রেন্ডারিং উদাহরণস্বরূপ যখন কোনও পরিবর্তন হয় না তখন একটি ফ্রেম রেন্ডার করুন। সুতরাং আমার প্রশ্ন হল কেন এই পদ্ধতির প্রায়শই শেখানো হয়?


6
ব্যক্তিগতভাবে, আমি গেমপ্রগ্রামিংপ্যাটার্নস :: গেম-লুপ এইচটিএমএল একটি সহায়ক ব্যাখ্যা পেয়েছি
নীল

12
রেন্ডারিংয়ের সমস্ত পরিবর্তন গেমের রাজ্যে প্রতিফলিত হয় না। এবং আমি সন্দেহ করি যে আপনি সেই কোডের টুকরোটির বিন্দুটি ভুল বুঝেছেন - এটি আপনাকে প্রতি একাধিকবার রেন্ডার আপডেট করতে দেয়, প্রতি আপডেটে একাধিকবার রেন্ডার করে না।
লুয়ান

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

আরও যৌক্তিক প্রশ্নটি হবে "আপডেট- নির্ভর রেন্ডারিং গেম লুপের বিন্দুটি কী "
ব্যবহারকারী1306322

1
আপনার প্রায়শই এমন আপডেট থাকে যা কিছুই করে না? এমনকি ব্যাকগ্রাউন্ড অ্যানিমেশনগুলি বা অন-স্ক্রিনের ঘড়িগুলি আপডেট করা হচ্ছে না?
pjc50

উত্তর:


113

আমরা এই প্রচলিত সম্মেলনে কীভাবে এসে পৌঁছলাম তার দীর্ঘ ইতিহাস রয়েছে, পথে প্রচুর মনোমুগ্ধকর চ্যালেঞ্জ রয়েছে, তাই আমি এটিকে পর্যায়ক্রমে প্রেরণা দেওয়ার চেষ্টা করব:

1. সমস্যা: ডিভাইসগুলি বিভিন্ন গতিতে চালিত হয়

কোনও আধুনিক পিসিতে কখনও কোনও পুরানো ডস গেমটি খেলতে চেষ্টা করুন, এবং এটি খেলতে পারা যায় না - কেবল একটি ঝাপসা?

প্রচুর পুরানো গেমগুলির একটি খুব নিখুঁত আপডেট লুপ ছিল - তারা ইনপুট সংগ্রহ করতে, গেমের অবস্থা আপডেট করতে এবং হার্ডওয়ারটি যতটা সময় পার করত তার জন্য হিসাব না করে যত দ্রুত অনুমতি দিত nder যার অর্থ হার্ডওয়্যার পরিবর্তন হওয়ার সাথে সাথে গেমপ্লে পরিবর্তন হয়।

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

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

এখানে নিশ্চিত আগুনের সমাধানটি হ'ল যে হারে আমরা গেমপ্লে স্টেট আপডেট করি lock এইভাবে আমরা গ্যারান্টি দিতে পারি ফলাফল সর্বদা এক রকম হবে।

২. সুতরাং, কেন কেবল ফ্রেমরেটটি লক করবেন না (উদাহরণস্বরূপ, ভিএসআইএনসি ব্যবহার করে) এবং এখনও গেমপ্লে স্টেট আপডেটগুলি এবং লকস্টেপে রেন্ডারিং চালাচ্ছেন?

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

বিশেষত ভিআর-তে, ফ্রেমরেট রাজা এবং মানটি ক্রমবর্ধমান থাকে। ভিআর এর সাম্প্রতিক পুনরুত্থানের প্রথম দিকে, গেমগুলি প্রায়শই প্রায় 60 পিপিএসে চলত। এখন 90 আরও বেশি স্ট্যান্ডার্ড এবং পিএসভিআরের মতো হারওয়ার 120 টি সমর্থন করতে শুরু করেছে This এটি এখনও বাড়তে পারে। সুতরাং, যদি কোনও ভিআর গেমস তার ফ্রেমরেটকে আজ করণীয় এবং গ্রহণযোগ্য কিসের মধ্যে সীমাবদ্ধ করে রাখে তবে হার্ডওয়্যার এবং প্রত্যাশাগুলি আরও বিকশিত হওয়ায় এটি পিছনে ফেলে রাখা দায়বদ্ধ।

(একটি নিয়ম হিসাবে, সতর্ক থাকুন যখন বলা হয় "প্লেয়াররা XXX এর চেয়ে দ্রুত কিছু বুঝতে পারে না" কারণ এটি সাধারণত নির্দিষ্ট ধরণের "উপলব্ধি" এর উপর ভিত্তি করে ক্রম অনুযায়ী কোনও ফ্রেমকে স্বীকৃতি দেয় motion গতির ধারাবাহিকতা ধারণা সাধারণত অনেক বেশি সংবেদনশীল।)

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

এটি বিশেষত সমস্যাযুক্ত হতে পারে যদি আপনার সমস্ত বিদ্যমান সিস্টেমগুলি নির্মিত হয় এবং লকস্টেপ রেন্ডারিং ফ্রেমরেট ধরে নেয় যে এখন আপনি সবসময় আঘাত করতে পারবেন না তখন পারফরম্যান্সের সমস্যাগুলি বিকাশে দেরীতে দেখা যায়। আপডেট এবং রেন্ডারিং হারগুলি ডিক্লোলিং পারফরম্যান্সের পরিবর্তনশীলতার সাথে আচরণ করার জন্য আরও নমনীয়তা দেয়।

৩. একটি নির্দিষ্ট টাইমস্টেপে আপডেট করার ক্ষেত্রে (২) এর মতো সমস্যা নেই?

আমি মনে করি এটিই আসল প্রশ্নের মাংস: যদি আমরা আমাদের আপডেটগুলি ডিকুয়াল করি এবং মাঝে মধ্যে কোনও গেম স্টেট আপডেট না করে দুটি ফ্রেম রেন্ডার করি তবে এটি কোনও নিম্ন ফ্রেমেররে লকস্টেপ রেন্ডারিংয়ের মতো নয়, যেহেতু কোনও দৃশ্যমান পরিবর্তন নেই since পর্দাটি?

গেমগুলি এই আপডেটগুলি ডিকোপলিংকে ভাল প্রভাবের জন্য ব্যবহার করে এমন বিভিন্ন উপায় রয়েছে:

ক) আপডেটের হার রেন্ডার করা ফ্রেমরেটের চেয়ে দ্রুততর হতে পারে

অন্য উত্তরে টাইজকেন নোট হিসাবে, বিশেষত পদার্থবিজ্ঞান প্রায়শই রেন্ডারিংয়ের চেয়ে উচ্চতর ফ্রিকোয়েন্সিতে পদক্ষেপ নিয়ে আসে যা ইন্টিগ্রেশন ত্রুটিগুলি হ্রাস করতে এবং আরও সঠিক সংঘর্ষে সহায়তা করে। সুতরাং, রেন্ডারযুক্ত ফ্রেমের মধ্যে 0 বা 1 আপডেট না করে আপনার 5 বা 10 বা 50 থাকতে পারে।

এখন ১২০ fps এ রেন্ডারিং করা প্লেয়ারটি ফ্রেমে প্রতি 2 টি আপডেট পেতে পারে, যখন 30 fps এ লোয়ার স্পেস হার্ডওয়ারের খেলোয়াড়ের ফ্রেম প্রতি 8 আপডেট পাওয়া যায় এবং তাদের উভয় গেম একই গেমপ্লে-টিক্স-প্রতি-রিয়েলটাইম-সেকেন্ড গতিতে চালিত হয়। আরও ভাল হার্ডওয়্যার এটিকে মসৃণ দেখায়, তবে গেমপ্লেটি কীভাবে কাজ করে তা আমূল পরিবর্তন করে না।

এখানে একটি ঝুঁকি রয়েছে যে, আপডেটের হারটি যদি ফ্রেমরেটের সাথে মিলে যায় তবে আপনি দুজনের মধ্যে একটি "বীট ফ্রিকোয়েন্সি" পেতে পারেন । যেমন। বেশিরভাগ ফ্রেমগুলিতে আমাদের 4 গেমের স্টেট আপডেট এবং একটি সামান্য অবশিষ্টের জন্য পর্যাপ্ত সময় থাকে, তবে প্রতিবার প্রায়শই আমাদের একটি ফ্রেমে 5 আপডেট করার জন্য পর্যাপ্ত পরিমাণ সাশ্রয় হয়, কিছুটা লাফিয়ে যায় বা চলাচলে হাঁপিয়ে যায়। এটি দ্বারা সম্বোধন করা যেতে পারে ...

খ) ইন্টারপোলটিং (বা এক্সট্রাপোলটিং) আপডেটগুলির মধ্যে গেমের অবস্থা

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

ঠিকঠাক হয়ে গেলে এটি চলাচলকে বাটরিটিকে মসৃণ করে তোলে এবং ফ্রেমরেটে কিছুটা ওঠানামাও মাস্ক করতে সহায়তা করে, যতক্ষণ না আমরা খুব কম না নামি ।

গ) নন-গেমপ্লে-রাজ্যের পরিবর্তনগুলিতে মসৃণতা যুক্ত করা

এমনকি গেমপ্লে স্থিতিকে ইন্টারপোলেট না করেও আমরা কিছুটা মসৃণতা জিততে পারি।

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

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

৪. কেন সকল কিছুর জন্য কেবল (গ) স্টাইলটি ব্যবহার করবেন না? যদি এটি অ্যানিমেশন এবং ইউআইয়ের পক্ষে কাজ করে, তবে বর্তমান ফ্রেমরেটের সাথে মেলে আমরা কী কেবল আমাদের গেমপ্লে স্টেট আপডেটগুলি স্কেল করতে পারি না?

হ্যাঁ * এটি সম্ভব, তবে না এটি সহজ নয়।

এই উত্তরটি ইতিমধ্যে কিছুটা দীর্ঘ তাই আমি সমস্ত ক্ষতিকারক বিবরণগুলিতে যাব না, কেবল একটি দ্রুত সংক্ষিপ্তসার:

  • রৈখিক পরিবর্তনের deltaTimeজন্য পরিবর্তনশীল-দৈর্ঘ্যের আপডেটগুলিতে সামঞ্জস্য করতে কাজগুলি দ্বারা গুণ করা (উদাহরণস্বরূপ ধ্রুব বেগের সাথে চলাচল, টাইমারের গণনা বা একটি অ্যানিমেশন টাইমলাইন বরাবর অগ্রগতি)

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

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

সুতরাং, মাঝারি জটিলতার খেলার জন্য সাধারণ ক্ষেত্রে, deltaTimeস্কেলিংয়ের মাধ্যমে সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ আচরণ এবং ন্যায্যতা বজায় রাখা খুব কঠিন এবং রক্ষণাবেক্ষণের মধ্যবর্তী কোথাও একেবারে অক্ষম থেকে অক্ষত।

একটি আপডেটের হারকে মানসম্মত করা আমাদের প্রায়শই সরল কোড সহ আরও বিভিন্ন শর্ত জুড়ে আরও ধারাবাহিক আচরণের গ্যারান্টি দেয় ।

আপডেটের হারটিকে রেন্ডারিং থেকে ডেকে আনা করা গেমপ্লে যুক্তির কোনও পরিবর্তন না করে অভিজ্ঞতার সাবলীলতা এবং পারফরম্যান্সকে নিয়ন্ত্রণ করতে আমাদের নমনীয়তা দেয় ।

তারপরেও আমরা কখনই সত্যিকারের "নিখুঁত" ফ্রেমরেট স্বাধীনতা পাই না তবে গেমগুলিতে অনেকগুলি পদ্ধতির মতো এটি আমাদের প্রদত্ত গেমের প্রয়োজনের জন্য "যথেষ্ট ভাল" দিকে ডায়াল করার একটি নিয়ন্ত্রণযোগ্য পদ্ধতি দেয়। এ কারণেই এটি একটি দরকারী সূচনা পয়েন্ট হিসাবে সাধারণত শেখানো হয়।


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

3
যদিও এটি সত্য যে আরও জটিল আপডেট পাইপলাইনগুলি অনিচ্ছাকৃতভাবে বিলম্বিতকরণ প্রবর্তন করা সহজ করে তোলে, সঠিকভাবে প্রয়োগ করার সময় ডিকপলড পদ্ধতির এটি প্রয়োজনীয় ফলাফল নয়। আসলে, আমরা এমনকি বিলম্বিতা হ্রাস করতে সক্ষম হতে পারে । আসুন এমন একটি গেম নেওয়া যাক যা 60 এফপিএসে রেন্ডার হয়। একটি লকস্টেপ সহ read-update-render, আমাদের সবচেয়ে খারাপ কেস লেটেন্সিটি 17 মিমি (আপাতত গ্রাফিক্স পাইপলাইন এবং ডিসপ্লে ল্যাটেন্সি উপেক্ষা করে)। (read-update)x(n>1)-renderএকই ফ্রেমরেটে একটি ডিকোপলড লুপের সাথে, আমাদের সবচেয়ে খারাপ ক্ষেত্রে বিলম্বিতা কেবল একই বা আরও ভাল হতে পারে কারণ আমরা ইনপুটটিতে ঘন ঘন বা আরও বেশি হিসাবে পরীক্ষা করে দেখি। :)
ডিএমগ্রিগরি

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

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

1
@ অস্কুরো: এটি কোনও ত্রুটি ছিল না। কতগুলি আক্রমণকারী পর্দায় রয়েছে তা নির্বিশেষে আপডেট লুপের গতি স্থির থাকে তবে গেমটি প্রতিটি আপডেট লুপে সমস্ত আক্রমণকারীকে আঁকতে পারে না।
সুপারক্যাট

8

অন্যান্য উত্তরগুলি ভাল এবং গেম লুপটি কেন বিদ্যমান এবং রেন্ডার লুপ থেকে আলাদা হওয়া উচিত সে সম্পর্কে কথা বলুন। তবে সুনির্দিষ্ট উদাহরণ হিসাবে "যখন কোনও পরিবর্তন হয়নি তখন কেন একটি ফ্রেম রেন্ডার করুন?" এটি সত্যিই কেবল হার্ডওয়্যার এবং জটিলতায় নেমে আসে।

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

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

হার্ডওয়্যার ইত্যাদির নকশাই বর্তমান সম্মেলনের জন্য মূলত অনুকূলিত, এবং একটি রাষ্ট্রীয় যন্ত্রটি শুরু করার জন্য একটি ভাল মডেল হিসাবে কাজ করেছে।


5
রেন্ডারিং (সমস্ত কিছু) কেবল তখনই কিছু পরিবর্তিত হয় (প্রশ্নটি যা জিজ্ঞাসা করে) এবং কেবল পরিবর্তিত অংশগুলি (আপনার উত্তর কী বর্ণনা করে) রেন্ডারিংয়ের মধ্যে এখানে পার্থক্য রয়েছে ।
ডিএমগ্রিগরি

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

এগুলি ছাড়াও আমি নোট করব যে রেন্ডার না করার কোনও কারণ নেই । আপনি জানেন যে আপনার রেন্ডারটির জন্য প্রতিটি ফ্রেমে সবসময় সময় থাকে (আপনি আরও ভাল করেই জানতেন যে আপনার রেন্ডারটির জন্য প্রতিটি ফ্রেমকে কল করার জন্য আপনার কাছে সবসময় সময় থাকে!) তাই 'অপ্রয়োজনীয়' রেন্ডার করতে খুব কম ক্ষতি হয় - বিশেষত যেহেতু এই ক্ষেত্রে আসবে মূলত অনুশীলনে কখনই আসে না।
স্টিভেন স্টাডনিকি

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

6

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

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


1
অথবা, উদাহরণস্বরূপ, টিকগুলির মধ্যে সময় পরিমাপ করুন এবং গণনা করুন যে সেই সময়ের মধ্যে চরিত্রটি কতদূর যেতে হবে? স্থির স্প্রাইট অ্যানিমেশনগুলির দিনগুলি অতীত!
গ্রাহাম

2
টেম্পোরাল অ্যালাইজিং ছাড়াই মানুষ 60০fps এর চেয়ে বেশি দ্রুত জিনিস বুঝতে পারে না, তবে গতি ঝাপকের অভাবে মসৃণ গতি অর্জনের জন্য প্রয়োজনীয় ফ্রেম রেট এর চেয়ে অনেক বেশি হতে পারে। একটি নির্দিষ্ট গতির বাইরে, একটি স্পিনিং হুইলটি অস্পষ্ট হিসাবে উপস্থিত হওয়া উচিত, তবে যদি সফ্টওয়্যারটি গতি অস্পষ্টতা প্রয়োগ না করে এবং চক্রটি ফ্রেম প্রতি অর্ধেকেরও বেশি স্পোক করে, ফ্রেমের হার 1000fps হলেও চাকাটি খারাপ দেখাবে।
সুপারক্যাট

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

1
মানব সাধারণত 60 এফপিএসের চেয়ে দ্রুত বুঝতে পারে না, সুতরাং এর চেয়ে দ্রুত প্রতিদান দেওয়ার ক্ষেত্রে সম্পদগুলি অপচয় করা অর্থহীন। আমি যে বিবৃতি দিয়ে ইস্যু নিতে। ভিআর এইচএমডিগুলি 90Hz রেন্ডার করে এবং এটি উপরে চলে যায়। আমাকে বিশ্বাস করুন যখন আমি আপনাকে বলি যে আপনি হেডসেটে 90Hz এবং 60Hz এর মধ্যে পার্থক্যটি সঠিকভাবে বুঝতে পারবেন। এছাড়াও, আমি ইদানীং এমন অনেকগুলি গেম দেখেছি যা জিপিইউ-আবদ্ধ হিসাবে সিপিইউ-আবদ্ধ। "রেন্ডারিং সাধারণত সবচেয়ে ধীর প্রক্রিয়া" বলা বাহুল্য সত্য নয়।
ডিভে

@ ডেভিডলাইভলি, সুতরাং "অর্থহীন" হতে পারে অত্যুক্তি খুব বেশি। আমি যা বোঝাতে চাইছিলাম তা হল রেন্ডারিং একটি বাধা হয়ে দাঁড়ায় এবং বেশিরভাগ গেমস 60 এফপিএসে সূক্ষ্ম দেখায়। অবশ্যই কিছু প্রভাব রয়েছে যা ভিআর এর সাথে কিছু ধরণের গেমগুলিতে গুরুত্বপূর্ণ যা আপনি কেবল দ্রুত ফ্রেম রেট নিয়ে পেতে পারেন তবে এগুলি আদর্শের চেয়ে ব্যতিক্রম বলে মনে হয়। যদি আমি একটি ধীর মেশিনে একটি গেমটি চালাচ্ছিলাম তবে আমি সবেমাত্র লক্ষণীয়ভাবে দ্রুত ফ্রেমের হারের চেয়ে কাজ করা পদার্থবিজ্ঞানটি করতাম।
tyjkenn

4

আপনার প্রশ্নের মতো একটি নির্মাণ যদি বোঝায় যে রেন্ডারিং সাবসিস্টেমটির "গত রেন্ডার থেকে অতিবাহিত সময়" সম্পর্কে কিছু ধারণা থাকে ।

উদাহরণস্বরূপ, এমন একটি পদ্ধতির কথা বিবেচনা করুন যাতে গেম ওয়ার্ল্ডের কোনও অবজেক্টের অবস্থান স্থায়ী (x,y,z)স্থানাঙ্কের মাধ্যমে এমন একটি পদ্ধতির সাথে প্রতিনিধিত্ব করা হয় যা বর্তমান চলমান ভেক্টরকে সঞ্চয় করে (dx,dy,dz)। এখন, আপনি আপনার গেম লুপটি লিখতে পারেন যাতে পদ্ধতিতে অবস্থানের পরিবর্তনটি ঘটে থাকে updateতবে আপনি এটির নকশাও তৈরি করতে পারেন যাতে চলাচলের পরিবর্তনটি ঘটেছিল update। পরবর্তী পদ্ধতির সাথে, যদিও আপনার গেমের রাজ্যটি পরবর্তী পরবর্তী পর্যন্ত পরিবর্তিত হবে না update, এrenderউচ্চতর ফ্রিকোয়েন্সিতে ডাকা ফাংশনটি ইতিমধ্যে সামান্য আপডেট অবস্থানে বস্তুটি আঁকতে পারে। যদিও এটি প্রযুক্তিগতভাবে আপনি যা দেখেন এবং অভ্যন্তরীণভাবে যা উপস্থাপন করা হয় তার মধ্যে একটি তাত্পর্য সৃষ্টি করে, তবে পার্থক্যটি বেশিরভাগ ব্যবহারিক দিকগুলির জন্য গুরুত্বপূর্ণ নয়, তবুও অ্যানিমেশনগুলিকে খুব মসৃণ দেখতে দেয়।

উদাহরণস্বরূপ যখন আপনি নেটওয়ার্ক ইনপুটটির বিলম্বিকে বিবেচনা করেন তখন আপনার গেমের "ভবিষ্যতের" ভবিষ্যদ্বাণী করা (ভুল হওয়ার ঝুঁকি থাকা সত্ত্বেও) ভাল ধারণা হতে পারে।


4

অন্যান্য উত্তর ছাড়াও ...

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

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

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