আমি কীভাবে গ্রাফিকাল সংস্থানগুলি সংযোজনীয়ভাবে লোড করব?


9

প্ল্যাটফর্ম-অজানাস্টিক ভাবি: বাকি খেলা চলাকালীন আমি কিছু গ্রাফিকাল সংস্থান লোড করতে চাই।

নীতিগতভাবে, আমি প্রকৃত ফাইলগুলি আলাদা থ্রেডে লোড করতে পারি, বা এসিঙ্ক আই / ও ব্যবহার করে O তবে গ্রাফিকাল অবজেক্টের সাথে, আমি সেগুলি জিপিইউতে আপলোড করতে হবে এবং এটি (সাধারণত) কেবল মূল থ্রেডে করা যেতে পারে।

আমি এরকম কিছু দেখতে আমার গেমের লুপটি পরিবর্তন করতে পারি:

while true do
    update()
    for each pending resource do
        load resource to gpu
    end
    draw()
end

ডিস্ক থেকে র‌্যামে পৃথক থ্রেড লোড সংস্থান থাকার সময়।

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

while true do
    update()
    if there are pending resources then
        load one resource to gpu
        remove that resource from the pending list
    end
    draw()
end

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

সর্বোত্তমভাবে, আমি নিম্নলিখিত পদ্ধতিতে আমার লোড সময়টি পছন্দ করতে চাই:

while true do
    time_start = get_time()
    update()
    while there are pending resources then
        current_time = get_time()
        if (current_time - time_start) + time_to_load(resource) >= 1/60 then
            break
        load one resource to gpu
        remove that resource from the pending list
    end
    draw()
end

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

আমি এখানে কি মিস করছি? অনেক গেম কীভাবে তাদের সমস্ত জিনিস পুরোপুরি অবিচ্ছিন্ন এবং ড্রপ ফ্রেম বা চূড়ান্ত লোডিং সময় ছাড়াই লোড করতে পারে?

উত্তর:


7

আসুন একটি নিখুঁত বিশ্ব ধরে ধরে শুরু করি। সংস্থানটি লোড করার জন্য দুটি পদক্ষেপ রয়েছে: প্রথমে আপনি এটি আপনার স্টোরেজ মিডিয়াটি থেকে সরিয়ে ফেলা এবং সঠিক ফর্ম্যাটে মেমরিতে এবং দ্বিতীয়ত আপনি এটিকে মেমোরি বাস জুড়ে ভিডিও মেমোরিতে স্থানান্তর করুন। এই দুটি পদক্ষেপের কোনওটিই আসলে আপনার মূল থ্রেডে সময় ব্যবহার করা দরকার না - এটি কেবল I / O কমান্ড জারি করার জন্য জড়িত হওয়া দরকার। আপনার সিপিইউ এবং জিপিইউ উভয়ই অন্য কিছু করতে পারে যখন সংস্থানটি অনুলিপি করা হচ্ছে। একমাত্র আসল সংস্থান হ'ল মেমরি ব্যান্ডউইথ।

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

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

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

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


এটি একটি বেশ ভাল ব্যাখ্যা। প্রচুর স্টাফ আমি জানতাম না তবে প্রচুর পরিমাণে বুদ্ধিমান ছিল। এটির স্ট্রেস-টেস্টিংয়ের পরিবর্তে, আমি রানটাইমটিতে টেক্সচার সৃজনকে ওভারহেড পরিমাপ করব, আস্তে আস্তে শুরু করব এবং বলতে হবে, 80% উপলব্ধ এক্সিকিউশন টাইম আউটলিরদের জন্য ঘর ছাড়ার জন্য।
পান্ডা পাইজামা

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

এছাড়াও, এখানে অ্যাসিক্রোনাস টেক্সচার স্থানান্তর সম্পর্কিত একটি এনভিআইডিআইএর উপস্থাপনা। এটি যে মূল বিষয়টি বাড়িতে চালাচ্ছে, যতদূর আমি পড়ছি, তা হ'ল আপনি আপলোড করার পরে খুব শীঘ্রই কোনও টেক্সচার ব্যবহার করা স্টল হয়ে যাচ্ছে। বিকাশকারী.ডাউনলোড.এনভিডিয়া.
com/ জিটিসি / পিডিএফ / জিটিসি ২০১২ / উপস্থাপনা পিডিএফ/…

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

@ পান্ডপাজামা ভিআরএএম উপলব্ধ থাকার চেয়ে বেশি টেক্সচার তৈরি করার জন্য, এবং টেক্সচার তৈরি করতে এবং তারপরে কখনই ব্যবহার করবেন না এটি সাধারণ। একটি সাধারণ কেসটি হ'ল "একগুচ্ছ টেক্সচার তৈরি করুন এবং তারপরে তত্ক্ষণাত একটি দৃশ্য আঁকুন যা তাদের ব্যবহার করে", যে ক্ষেত্রে অলস হওয়া চালককে সহায়তা করে কারণ এটি বুঝতে পারে যে কোন টেক্সচারটি প্রকৃতপক্ষে ব্যবহৃত হয়েছে, এবং সেই প্রথম ফ্রেমটি যাইহোক হিচকে চলেছে । তবে আমিও কোনও ড্রাইভার দেব নই, এটি একটি নুনের দানা দিয়ে নিন (এবং এটি পরীক্ষা করুন!)
জন কলসবিেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.