শীর্ষবিন্দুর বিন্যাস বিশ্লেষণ করুন

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

একটি glDrawElements কলের জন্য ফ্রেম প্রোফাইলিং ভিউ, ড্র কল প্যারামিটারে বিশদ বিবরণের জন্য হোভার করা হয়েছে
চিত্র 1. একটি একক glDrawElements কলের জন্য ফ্রেম প্রোফাইলিং ভিউ, অঙ্কিত 2,718 ত্রিভুজ আদিম দেখানো হচ্ছে

ভার্টেক্স অ্যাট্রিবিউট কম্প্রেশন

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

একটি প্রদত্ত ড্র কলের জন্য শীর্ষবিন্দু বিন্যাস পর্যবেক্ষণ করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. আগ্রহের একটি ড্র কল নির্বাচন করুন।

    এটি দৃশ্যের জন্য একটি সাধারণ ড্র কল, বৃহৎ সংখ্যক শীর্ষবিন্দু সহ একটি ড্র কল, একটি জটিল অক্ষর মডেলের জন্য একটি ড্র কল, বা অন্য কিছু ধরণের ড্র কল হতে পারে।

  2. পাইপলাইন ফলকে নেভিগেট করুন এবং ইনপুট সমাবেশের জন্য IA-তে ক্লিক করুন। এটি GPU-তে আসা শীর্ষবিন্দুগুলির জন্য শীর্ষবিন্দু বিন্যাস সংজ্ঞায়িত করে।

  3. গুণাবলী এবং তাদের বিন্যাস একটি সিরিজ পর্যবেক্ষণ; উদাহরণস্বরূপ, R32G32B32_SFLOAT হল একটি 3-কম্পোনেন্ট 32-বিট স্বাক্ষরিত ফ্লোট।

একটি ড্র কলের ইনপুট সমাবেশের জন্য ফ্রেম প্রোফাইলিং ভিউ, অসঙ্কুচিত শীর্ষস্থানীয় বৈশিষ্ট্য সহ
চিত্র 2. একটি ড্র কলের জন্য ইনপুট সমাবেশ, অসংকুচিত বৈশিষ্ট্য সহ যার ফলে একটি শীর্ষবিন্দু আকার 56 বাইট

প্রায়শই, টানা মডেলের গুণমানে ন্যূনতম হ্রাসের সাথে শীর্ষবিন্দুর বৈশিষ্ট্যগুলিকে সংকুচিত করা যেতে পারে। বিশেষ করে, আমরা সুপারিশ করি:

  • অর্ধ-নির্ভুল 16-বিট ফ্লোটে শীর্ষবিন্দুর অবস্থান সংকুচিত করা
  • UV টেক্সচার কম্প্রেস করা 16-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা উশর্টে স্থানাঙ্ক
  • কোয়াটারনিয়ন ব্যবহার করে স্বাভাবিক, স্পর্শক এবং বাইনর্মাল ভেক্টর এনকোডিং করে স্পর্শক স্থান সংকুচিত করা

অন্যান্য বিবিধ বৈশিষ্ট্যগুলিও কেস-বাই-কেস ভিত্তিতে নিম্ন-নির্ভুলতার প্রকারের জন্য বিবেচনা করা যেতে পারে।

ভার্টেক্স স্ট্রিম বিভাজন

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

ভার্টেক্স রিড মেমরি ব্যান্ডউইথ কমাতে এবং ক্যাশে দক্ষতা উন্নত করতে এবং এইভাবে বিনিং পাসে ব্যয় করা সময় কমাতে, ভার্টেক্স ডেটা দুটি পৃথক স্ট্রীমে বিভক্ত করা উচিত, একটি শীর্ষস্থানীয় অবস্থানের জন্য এবং একটি অন্য সমস্ত শীর্ষস্থানীয় বৈশিষ্ট্যের জন্য।

শীর্ষস্থানীয় বৈশিষ্ট্যগুলি যথাযথভাবে বিভক্ত কিনা তা তদন্ত করতে:

  1. আগ্রহের একটি ড্র কল নির্বাচন করুন এবং ড্র কল নম্বরটি নোট করুন।

    এটি দৃশ্যের জন্য একটি সাধারণ ড্র কল, বৃহৎ সংখ্যক শীর্ষবিন্দু সহ একটি ড্র কল, একটি জটিল অক্ষর মডেলের জন্য একটি ড্র কল, বা অন্য কিছু ধরণের ড্র কল হতে পারে।

  2. পাইপলাইন ফলকে নেভিগেট করুন এবং ইনপুট সমাবেশের জন্য IA-তে ক্লিক করুন। এটি GPU-তে আসা শীর্ষবিন্দুগুলির জন্য শীর্ষবিন্দু বিন্যাস সংজ্ঞায়িত করে।

  3. আপনার শীর্ষবিন্দুর বৈশিষ্ট্যগুলির বাইন্ডিংগুলি পর্যবেক্ষণ করুন; সাধারণত এগুলি রৈখিকভাবে বৃদ্ধি পেতে পারে (0, 1, 2, 3, ইত্যাদি), তবে এটি সর্বদা হয় না। শীর্ষস্থানীয় অবস্থান সাধারণত তালিকাভুক্ত প্রথম শীর্ষবিন্দু বৈশিষ্ট্য।

  4. রাজ্য ফলকে, LastDrawInfos খুঁজুন এবং ম্যাচিং ড্র কল নম্বরটি প্রসারিত করুন। তারপর, এই ড্র কলের জন্য BoundVertexBuffers প্রসারিত করুন।

  5. প্রদত্ত ড্র কলের সময় আবদ্ধ শীর্ষবিন্দু বাফারগুলি পর্যবেক্ষণ করুন, সূচকগুলি পূর্বের থেকে শীর্ষস্থানীয় বৈশিষ্ট্য বাইন্ডিংয়ের সাথে মেলে।

  6. আপনার ড্র কলের শীর্ষবিন্দুর বৈশিষ্ট্যগুলির জন্য বাইন্ডিংগুলি প্রসারিত করুন এবং বাফারগুলি প্রসারিত করুন৷

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

একটি ড্র কলের ইনপুট সমাবেশ এবং আবদ্ধ শীর্ষ বাফার দেখানো অবস্থার জন্য ফ্রেম প্রোফাইলিং ভিউ
চিত্র 3. একটি ড্র কলের জন্য ইনপুট সমাবেশ, ডানদিকে স্টেট প্যানেল সহ দেখায় যে 0 এবং 1 বাইন্ডিং এ বৈশিষ্ট্যগুলি, শীর্ষস্থানীয় অবস্থান এবং স্বাভাবিক, একটি একক অন্তর্নিহিত বাফার ভাগ করে

ভার্টেক্স স্ট্রীম স্প্লিটিং এবং বিভিন্ন গেম ইঞ্জিনে এটি কীভাবে সমাধান করা যায় সে সম্পর্কে আরও বিশদের জন্য, বিষয়টিতে আমাদের ব্লগ পোস্টটি দেখুন।