একটি এক্সএনএ 2 ডি গেমটি অনুকূল করা


56

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

উত্তর:


79

কুলিং একটি পারফরম্যান্স অপ্টিমাইজেশন। সুতরাং এটি কেবল এটির জন্য এটি করার কোনও মানে নেই। আপনার একটা কারণ থাকতে হবে।


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

(যখন আমি "তখন" বলি - এটি আসলে একটি বিশাল সমান্তরাল পাইপলাইনে এটি করে)

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


তাই জ্যামিতিটি অফ-স্ক্রিনে রাখার জন্য সাধারণত অল্প বা ব্যয় হয়।

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

আমি এই উত্তরটি পড়ার এবং ব্যাচগুলির গভীরতার জন্য এই লিঙ্কযুক্ত স্লাইড ডেকটি পড়ার পরামর্শ দিচ্ছি ।

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


এখন - আপনার প্রশ্নটি 2 ডি এক্সএনএ সম্পর্কিত - সম্ভবত সম্ভবত আপনি ব্যবহার করছেন SpriteBatchএটি কিছুটা আলাদা।

এটিকে "স্প্রাইট ব্যাচ " বলা কোনও ভুল নয় । এটি যা করছে তা হ'ল আপনার আঁকানো স্প্রিট নিয়ে যাওয়া এবং যতটা সম্ভব ব্যাচগুলিতে একসাথে ব্যাচ করে জিপিইউতে এই স্প্রাইটগুলি জমা দেওয়ার পক্ষে সেরা চেষ্টা করা ।

তবে স্প্রাইটব্যাচ নতুন ব্যাচ শুরু করতে বাধ্য হবে যদি:

  • এটি কোনও একক ব্যাচে ফিট হওয়ার চেয়ে বেশি স্প্রাইট আঁকুন (এক্সএনএ 4 এ 2048 স্প্রাইটস)
  • আপনি টেক্সচার পরিবর্তন করুন (এ কারণেই একটি সাজানোর বাই টেক্সচার বিকল্প রয়েছে)

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

এখন - আপনি যদি আপনাকে ব্যাচের সীমাতে নিয়ে যাওয়ার জন্য পর্যাপ্ত টেক্সচার-অদলবদলগুলি আঁকেন এবং সেগুলির অনেকগুলি প্রকৃতপক্ষে অফ-স্ক্রিনে থাকে এবং এগুলি চালিত করে আপনাকে ব্যাচের সীমাতে নিয়ে যেতে পারে। তাহলে হ্যাঁ - কুলিং একটি অপ্টিমাইজেশন যা কাজ করবে।

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


(বরাবরের মতো: এটি পারফরম্যান্স অপটিমাইজেশনের পরামর্শ। সুতরাং আপনার গেমের নিজস্ব পারফরম্যান্সটি এবং অপ্টিমাইজেশান যুক্ত করার উপর প্রচেষ্টা ব্যয় করার আগে আপনি কী সীমাবদ্ধ করছেন তা পরিমাপ এবং বুঝতে হবে))


5
+1 কেবল স্বার্থের জন্য ক্লুলিং না করার বিষয়ে উল্লেখ করার জন্য, তবে যখন এটি কার্য সম্পাদনের বিষয়টির জন্য প্রয়োজন হয়।
উইল মারকুইলারের

12
আমাকে শেষ পর্যন্ত বলার জন্য +1 যে প্রোগ্রামার / ডিজাইনারের সুবিধার্থে স্প্রাইট শিটের প্রকৃতপক্ষে অন্য কোনও কারণ থাকার কারণ রয়েছে
বিল

3
দুর্দান্ত ব্যাখ্যা করার জন্য +1, আমি আপনার উত্তর থেকে অনেক কিছু শিখেছি।
জেসি এমন্ড

1
"ব্যাচ, ব্যাচ, ব্যাচ" পিডিএফ-এর লিঙ্কটি নষ্ট হয়ে গেছে। এখানে একটি আপডেট করা আছে: ce.u-sys.org/Verranstaltungen/…
মার্টন

13

এমএসডিএন-এর ফোরামে পোস্ট অনুসারে, এক্সএনএ ফ্রেমওয়ার্ক হতাশাগ্রস্ত করে তোলে না:

এক্সএনএ ফ্রেমওয়ার্ক আপনার জন্য কোনও হতাশার কাজ করবে না - এটি কোনও কারণ খুঁজে পাবে না যেখানে আসলে কিছু শেষ হবে। সমস্ত রূপান্তরগুলি জিপিইউতে সম্পন্ন হয় এবং এটি একটি কাস্টম শেডার হতে পারে।

http://xboxforums.create.msdn.com/forums/p/22763/121897.aspx

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


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

1

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

এক্সএনএ হিডিফ প্রোফাইল (পৌঁছনো নয়) এর একটি অ্যাসোলেশনকোয়ারি ক্লাস রয়েছে যা অবসেশন কুলিং সম্পাদন করতে ব্যবহৃত হয়। অন্তর্ভুক্তি কুলিং এমন ভিউপোর্ট থেকে সেই কোয়াডগুলি সরিয়ে দেয় যা অন্য কোয়াডের দ্বারা দর্শন থেকে গোপন থাকে।

আর কিছু যা আপনার বিবেচনা করা উচিত তা হ'ল প্রজন্মকে এবং টেসলেশনকে পৃথকভাবে থিয়েড করা।

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

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