উত্স প্রক্রিয়া সত্তার মতো ইঞ্জিন কীভাবে কাজ করে?


9

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

প্রতিটি সত্তার একটি থিঙ্ক ফাংশন থাকে, যা সেই সত্তার জন্য সমস্ত যুক্তি যুক্ত করে।

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

প্রথম নজরে, এই ধারণাটি যুক্তিসঙ্গত, তবে গেমটির অনেক সত্ত্বা থাকলে এটি খুব বেশি সংস্থান গ্রহণ করতে পারে ..

সুতরাং, উত্সের মতো ইঞ্জিন কীভাবে গেমের বিষয়গুলির যত্ন (প্রক্রিয়া, আপডেট, অঙ্কন ইত্যাদি) গ্রহণ করে?


2
এটি কীভাবে <some commercial engine>তা বিবেচনা করে?
কম্যুনিস্ট হাঁস

8
@ কম্যুনিস্ট হাঁস, আমি মনে করি এখানে আসল প্রশ্নটি আরও বেশি একটি সফল ইঞ্জিন এটি কীভাবে করে তাই আমি তাদের কাছ থেকে শিখতে পারি?
subb

উত্তর:


5

ওয়েল, সেখানে প্রায় কাছাকাছি কোন এটা করতে অন্য উপায় - আপনি যাচ্ছেন আছে লুপ মাধ্যমে এবং কল think()প্রতি কয়েক ফ্রেম একবার অন্তত প্রত্যেক সত্তা জন্য।

আপনি সত্ত্বাকে তাদের নিজস্ব থ্রেডে রাখতে পারেন, তবে তারপরে আপনার কাছে পুরো স্টেট-সিঙ্ক্রোনাইজেশন দুঃস্বপ্ন হয়, এটি অবশ্যই উপযুক্ত নয়।

প্রথম নজরে, এই ধারণাটি যুক্তিসঙ্গত, তবে গেমটির অনেক সত্ত্বা থাকলে এটি খুব বেশি সংস্থান গ্রহণ করতে পারে ..

সে কারণেই উত্স ইঞ্জিনটি এক সময়ে বিদ্যমান অস্তিত্বগুলির সংখ্যার জন্য একটি কঠোর সীমাবদ্ধতা দেয় : 4096 সত্তা, যার মধ্যে কেবল অর্ধেক (2048) নেটওয়ার্ক করা যায়। এই সীমাগুলির যে কোনও একটিতে যান এবং গেমটি ক্র্যাশ হয়ে যায় sh

এ কারণেই ম্যাপ তৈরি করার সময় তারা আপনাকে প্রায় 800 টিরও বেশি সত্ত্বা ব্যবহার না করার পরামর্শ দেয়।


2 ^ 12 ফাংশনটি কি প্রতিটি ফ্রেমের জন্য এখনও একটি বড় নম্বর কল করে না?
জুলিওসি

@ জালিও: ঠিক আছে, 60 সেকেন্ডে fps যা প্রতি সেকেন্ডে 246k ফাংশন কল করে - এটি অনেক বেশি, তবে স্পষ্টতই আজকের হার্ডওয়্যারে কার্যকর do তবে মনে রাখবেন যে উত্স ইঞ্জিনটি ক্রাশ হওয়ার আগেই এটি সর্বনিম্ন অনুমোদিত - সাধারণত কোনও মানচিত্রে কম সংখ্যক প্রতিষ্ঠান রয়েছে।
ব্লুরাজা - ড্যানি প্লেফুঘুফুট

5
সত্তাগুলি একটি পরবর্তী সময় আছে, থিংক ফাংশনটি সর্বস্বত্ত্ব হিসাবে বলা হয় না এবং সমস্ত সত্তার জন্য নয়। আমার মনে আছে যে ভূমিকম্প 2-এর জন্য সর্বনিম্ন চিন্তাভাবনার সময় ছিল 0.1 (100msec), সত্তা প্রক্রিয়াজাতকরণের জন্য কেবল 10fps।
বিসিএসেঞ্চস

"আপনি সত্ত্বাকে তাদের নিজস্ব থ্রেডে রাখতে পারেন, তবে তারপরে আপনার কাছে পুরো রাজ্য-সিনক্রোনাইজেশন দুঃস্বপ্ন হয়, এটি অবশ্যই উপযুক্ত নয়" " এই কিলজোন 4 টি স্লাইডগুলি পরীক্ষা করুন যদি আপনি মনে করেন এটির পক্ষে এটি উপযুক্ত নয়: de.slideshare.net/jrouwe/…
তারা

3

আপনার উল্লেখ করা এই পদক্ষেপগুলি সম্ভবত পৃথক ইঞ্জিনে সম্পন্ন হয়। এটি কেবল সাধারণ গেম ইঞ্জিনগুলিতে সাধারণত একটি পাসে থাকে। আপনার ক্রম

for each object
    do physics
    do game logic
    draw

হয়ে

call physics subsystem
call game logic subsystem
call drawing subsystem

পদার্থবিজ্ঞান ইঞ্জিন অবস্থান এবং আকারগুলির যত্ন নেয়।

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

অঙ্কন ইঞ্জিনটি কোন বস্তুগুলি দৃশ্যমান তা আঁকায় এবং কী কী বস্তুগুলি দৃশ্যমান তা তিনি জানেন কারণ কোপোন ইঞ্জিনগুলি এখানে ধরণের প্রতারণা করে (অঙ্কিত বিভাগটি দেখুন)।

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

পদার্থবিদ্যা

সমস্ত সত্ত্বা পুনরাবৃত্তি এবং {মনে করি, আঁকুন do এর সম্পূর্ণ ধারণা সম্ভবত সমস্যার কারণ হতে পারে। দ্বন্দ্ব ইত্যাদি থাকবে। আমি ভালভের হাভোককে বিশ্বাস করি এবং আমার ধারণা হ্যাভোক পর্যাপ্ত-সঠিক পদার্থবিদ্যার যত্ন নেয়।

মনে

যখন গেমের একটি সময় পরের লিঙ্কের সময়ের সমান হয় তখন থিঙ্ক ফাংশনটি চালিত হয় । এটি কোয়েট ইঞ্জিনে এইভাবে কাজ করে এবং হাফ লাইফ ইঞ্জিনগুলির জন্য কোয়েট ইঞ্জিন ভিত্তি। এটি প্রতিবার চালানো হয় না।

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

খুব বড় সংখ্যক সত্ত্বা থাকলে আপনার fps কে কতটা উন্নতি করা হবে তা পরিমাপ করা উচিত। দ্রষ্টব্য, Amdahl এর আইনের কারণে এটি সম্ভাব্য অদৃশ্য স্পিডআপ। আমি বলতে চাইছি, আপনি কেবল সমস্ত আইটেমটি গর্তে পুনরাবৃত্তি করুন এবং একটি সংখ্যা হ্রাস এবং চেক করুন।

আমি এটিকে সুনির্দিষ্টভাবে নেক্সটথিংকের মাধ্যমে সারণি বাছাই করব (সত্তাগুলির পয়েন্টারগুলির তালিকা তৈরি করুন এবং এটি প্রতিটি সময় সাজান; সত্ত্বার অ্যারে নয়, কারণ সত্তা যে কোনও সময় তাদের পরবর্তী তৃতীয় স্থান পরিবর্তন করতে পারে, সুতরাং অ্যারেগুলিতে পুনরায় বিন্যাস করা O এর পরিবর্তে O (N) নেবে ( 1) তালিকায়)।

আপনার লিনাক্সের ও (1) সময়সূচীর দিকেও নজর দেওয়া উচিত ।

আঁকা

ইঞ্জিনটি এমন কোনও অঞ্চল থেকে দৃশ্যমান যা ক্যামেরা রয়েছে তা আঁকবে। গেম স্তরটি একটি গাছে বিভক্ত হয় এবং একটি অঞ্চল সেই গাছের পাতা। আমি আপনাকে এটি সম্পর্কে বিশদ দিয়ে বিরক্ত করব না ... সুতরাং কোনও সত্তা যদি দৃশ্যমান হয় তবে এটি দৃশ্যমান সত্তার একটি সেটতে স্থাপন করা হবে এবং সেগুলি আঁকবে।

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


2

সুতরাং, যদি প্রক্রিয়া করার দরকার হয় এমন সমস্ত কিছু যদি থিংক ফাংশন সহ একটি বেস শ্রেণি থেকে আসে তবে গেম ইঞ্জিন একটি তালিকাতে এবং প্রতিটি ফ্রেমে সমস্ত কিছু সঞ্চার করতে পারে এবং এর মাধ্যমে ফাংশনটি কল করতে পারে।

প্রথম নজরে, এই ধারণাটি যুক্তিসঙ্গত, তবে গেমটির অনেক সত্ত্বা থাকলে এটি খুব বেশি সংস্থান গ্রহণ করতে পারে ..

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

আপনার অগত্যা এমনকি সেই সময়ে সাধারণ বেস বর্গ থেকে সমস্ত কিছু অর্জন করাও প্রয়োজন হবে না; উত্সটি উত্তরাধিকারের অপব্যবহারের সাথে মোটামুটি ওভারবোর্ডে যায় যা অন্যথায় সেই হিসাবে ডেটা হিসাবে প্রয়োগ করা যেতে পারে।

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


1

আপনাকে কী বিবেচনায় নিতে হবে এবং পূর্ববর্তী উত্তরগুলির চিন্তার ট্রেনের এই নিম্নলিখিতটি হ'ল আপনার কর্মক্ষমতাও কখন এবং কীভাবে আপনি এই থিংস ফাংশনগুলিকে কল করবেন তাও চালু থাকবে।

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

এবং আপনার নির্দিষ্ট গেমের যুক্তি এবং পরিস্থিতির উপর নির্ভর করে অপ্টিমাইজেশনের আরও আরও নির্দিষ্ট স্তর রয়েছে।


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