আমি কীভাবে রেন্ডারিং গাছগুলির কার্যকারিতা প্রভাবকে হ্রাস করতে পারি?


24

আমি লো পলি স্টাইলাইজড ধরণের গেম তৈরি করছি। আমার কাছে কিছুটা জল রয়েছে এবং আমি প্রচুর এবং প্রচুর গাছ চাই; এই মুহুর্তে আমার কাছে 10,000 টি গাছ রয়েছে। প্রতিটি গাছে 200 টিরও বেশি ত্রিভুজ থাকে না তাই তারা খুব বেশি কর আদায় করে না।

মূল সমস্যাটি হ'ল এখানে হ্রদ রয়েছে এবং হ্রদগুলি বেশ বড়। আপনি হ্রদের ওপারের কোনও গাছ দেখতে পাচ্ছেন না এবং এটি দেখতে খুব খারাপ লাগছে, বিশেষত যখন আপনি সেখানে হাঁটেন এবং গাছগুলি হঠাৎ দেখা যায়।

এটি ঠিক করার জন্য, আমাকে গাছের দূরত্ব বাড়াতে হবে যাতে আপনি হ্রদের ওপারে একটি শালীন পরিমাণে গাছ দেখতে পান, তবে এটি পারফরম্যান্সকে হ্রাস করে 40-50fps করে এবং খেলায় এখনও আর কিছু নেই। আমি যদি জিটিএক্স 1080 ব্যবহার করি তবে এটি যদি সহায়তা করে।

আমার গেমটি আরও বেশি গাছের সাথে দ্রুত চালাতে আমি কী করতে পারি?


আইআইআরসি, সাইলেন্ট হিল দূরে ক্লিপিং প্লেনে কাটাফটিটি আড়াল করতে কুয়াশার ব্যবহার করেছিল, যার ফলে তারা কুয়াশাটি যেখান থেকে কাটছে ঠিক তার বাইরে গতিময় জিনিস লোড করা শুরু করেছিল। গেমের পরিবেশের পরিবর্তন থেকে আপনি উপকৃত হতে পারেন।
কোডি

গাছগুলি আপনাকে উইন্ডোটি সন্ধানের জন্য আঁকছে, এভাবে আপনার কর্মক্ষমতা হ্রাস করবে।
mbomb007

আপনি প্রোফাইলার চালানোর চেষ্টা করেছেন? যদি তাই হয় তবে কোথায় বাধা?
মিকারেল হ্যাগ্রস্টেম

আপনি কি কোনও ধরণের হতাশায় কুলিং করছেন?
ক্রিথিক

হতাশায় কুলিং কি?
মিঃ-ম্যাট

উত্তর:


43

অঙ্কনের পারফরম্যান্স বাড়ানোর জন্য কয়েকটি জিনিস আপনি করতে পারেন things

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

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

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

  4. শেডারগুলিতে ইনস্ট্যান্সিং সক্ষম করুন। ইনস্ট্যান্সিং ইঞ্জিনটিকে কেবল একটি ড্র কল সহ একাধিক অবজেক্ট (একই জালযুক্ত) আঁকতে সক্ষম করে। এটি কাজ করার জন্য আপনার জাল ভাগ করে নেওয়া এবং জাল ভাগ করে নেওয়া উচিত। উপাদান পৃথক হতে পারে, তবে শেডারকে অবশ্যই বিভিন্ন বিবিধ বৈশিষ্ট্য সমর্থন করতে হবে।

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

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

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

  7. যদি আপনার দৃশ্যটি বিশাল হয় এবং আপনার সিপিইউ সময়টি বেশিরভাগ ক্ষেত্রে Unক্যতে চলে যায় দৃশ্যের গাছের মধ্য দিয়ে সমস্ত বস্তু রেন্ডার করার জন্য তালিকা তৈরি করে, আপনি যা করতে পারেন তা হ'ল ityক্যটিকে রেন্ডারিং পরিচালনা করতে না দেওয়া। আপনার যদি আঁকতে সক্ষম অবজেক্টগুলি ট্র্যাক করার আরও ভাল উপায় থাকে তবে আপনি কমান্ডবফারটি ব্যবহার করতে পারেন ra ড্রআউমিশইন্সট্যান্সড বা গ্রাফিক্স D ড্রয়মেশআইনস্ট্যান্সড হাতে হাতে এঁকে দেওয়ার জন্য। আমি এ সম্পর্কে খুব বেশি বিস্তারিত জানব না কারণ এটি অনেক বেশি উন্নত এবং এতে নিজেকে পর্যবেক্ষণ করা এবং কী করা উচিত নয়।

যদি স্থির বা গতিশীল ব্যাচিং সঠিকভাবে কাজ না করে (যা আপনি ফ্রেম ডিবাগারটি পরীক্ষা করে দেখতে পারেন), আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি প্রকৃত অর্থে ভাগ করা উপাদান ব্যবহার করছেন এবং কলিংয়ের সাথে দুর্ঘটনাক্রমে উপাদানটির অনুলিপি তৈরি করছেন না meshRenderer.material। কলকে .materialআপনার সামগ্রীর অনুলিপি তৈরি করবে এবং ব্যাচিং করবে। .sharedMaterialপরিবর্তে ব্যবহার করুন।

ইউনিটি 5.6 যেহেতু নির্দিষ্ট ড্রকলগুলি পূর্ববর্তী ড্রকারগুলির সাথে কেন ব্যাচ করছে না তা নির্ধারণ করতে আপনি ফ্রেম ডিবাগারটি ব্যবহার করতে পারেন। আপনার গেমের ড্রকলগুলি হ্রাস করার চেষ্টা করার সময় এটি সত্যিই সহায়ক হবে।

স্ট্যান্টিক / ডায়নামিক / কাস্টম ব্যাচিংয়ের চেয়ে ইনস্ট্যান্সিংয়ের নিম্নলিখিত সুবিধা রয়েছে:

  • জাল কম স্মৃতি ব্যবহার করে কারণ জাল মেমরিতে নকল করতে হয় না
  • একাধিক উপকরণ ব্যবহার করতে পারেন, কেবল ভাগ করা শেডার প্রয়োজন
  • অবজেক্টস অ্যানিমেটেড হতে পারে

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


১. হ্যাঁ, আমি এলওডির চেষ্টা করেছি এবং আমার আশ্চর্যের বিষয়, এটি আসলে এটি আরও খারাপ করেছে। আমার সামান্য কম ভার্টেক্স গণনা সহ প্রতিটি গাছের 3 টি প্রকরণ ছিল এবং গাছের রেন্ডার ইমেজ সহ একটি সমতল বিমান ছিল plane
মিঃ-ম্যাট

২. আমার সমস্ত গাছ স্থির হিসাবে চিহ্নিত are আমি যতদূর জানি যে ব্যাচিং সক্ষম করে? এটা কি ঠিক? এবং আপনি যখন ভাগ করা উপাদান বলছেন, আপনি কি কেবল বোঝাতে চান, গাছগুলির একই উপাদান রয়েছে?
মিঃ-ম্যাট

৩. এটি আসলে কী ধরণের পারফরম্যান্সের উন্নতি করবে? এটা কি চেষ্টা করার মতো?
মিঃ-ম্যাট

1
2/3: আমার অভিজ্ঞতায় ইউনিটি গতিশীল ব্যাচিংয়ে খুব ভাল কাজ করে না এবং স্ট্যাটিক ব্যাচিং বিল্ডের আকার বাড়ায়, তাই আমি নিজেই ব্যাচিং বাস্তবায়ন করেছি এবং লোড-টাইমের সংমিশ্রণ জালটি করেছি। এই কৌশলটি ব্যবহার করে আমি প্রায় 300 ড্রকলগুলিতে সংকুচিত করতে 2500 ড্রকলগুলি পরিচালনা করতে সক্ষম হয়েছি যা আমাদের মোবাইল গেমের জন্য যেখানে ড্রয়াকলগুলি গুরুত্বপূর্ণ are এটি গণনা করার জন্য অযৌক্তিক সামান্য বিভাজন তৈরি করেছে (অফস্ক্রিন) তবে এটি মূল্য ছিল it
লাসে

2
tfw যখন আপনি গাছগুলির সাথে খারাপ অভিনয় সম্পর্কে প্রশ্ন পড়েন এবং বিলবোর্ডিংয়ের একটি শব্দও নষ্ট হয় না
Num Lock

13

ঠিক আছে, সুতরাং সমস্যাটি কেবল এটি ছিল যে আমি প্রাক-গণিত রিয়েলটাইম জিআই ব্যবহার করিনি। আমি কিছুক্ষণ আগে এটি যাচাই করেছিলাম তবে এটির তাত্ক্ষণিক প্রভাব ছিল না তাই আমি এটি ছেড়ে দিয়েছিলাম এবং এটি সম্পর্কে ভুলে গিয়েছিলাম এবং আলোক প্রসেসিংয়ের সময়টি এত দীর্ঘ ছিল। যাইহোক, এটি সবেমাত্র এটি প্রক্রিয়াজাতকরণ শেষ করেছে, এবং আমার কথাটি, আমার fps 3x দ্বারা বেড়ে গেছে। তাই আপাতত, আমি এটি সেটিতে রেখে দেব এবং ভবিষ্যতে নিশ্চিত হয়ে নিন যে আমি সবসময় প্রাকম্পিউটার রিয়েলটাইম জিআই ব্যবহার করছি!

পারফরম্যান্স আরও উন্নত করার জন্য যদি আমি এখনও আরও কিছু করতে পারি তবে দয়া করে আমাকে জানান, আমি সবচেয়ে কৃতজ্ঞ হব!


2
অন্তর্ভুক্তি কুলিং ব্যবহার করুন, যদি আপনার দৃশ্যটি বড় হয় - এটিকে খণ্ডগুলিতে ভাগ করার বিষয়টি বিবেচনা করুন, উদাহরণস্বরূপ অনেকগুলি অঞ্চল এবং লোড এবং আনলোড করুন।
প্রার্থী চাঁদ _ম্যাক্স_

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