آموزش مدیریت سایت

راه های بالا بردن سرعت بازی در موتور بازی یونیتی

راه های بالا بردن سرعت بازی در موتور بازی یونیتی

به این مطلب امتیاز دهید

عملکرد خوب در بازی ها بسیار در موفقیت آن ها حیاتی است. زمانی که سرعت بازی در حد ایده آل باشد کاربران بیشتری را به خود جذب خواهد کرد. معمولا زمانی که یک گیمر بازی جدیدی را شروع میکند، اگر آن بازی سرعت کمی را دارا باشد، به کل توسط آن گیمر کنار گذاشته خواهد شد چون اصل بازی روی سرعت آن است. در ادامه تعدادی از دستورالعمل هایی برای به حداکثر رساندن سرعت ارائه بازی در موتور بازی ساز Unity مطرح شده است که میتواند بسیار در مسیر ساخت بازی به شما کمک کند.

راه های بالا بردن سرعت بازی در موتور بازی یونیتی

  1. مشخص کردن تاثیر گرافیکی بالا

قسمت های گرافیکی بازی شما در درجه اول می تواند روی دو سیستم رایانه تأثیر بگذارد: GPU و CPU. اولین قانون هر بهینه سازی این است که بدانید مشکل عملکرد در کجاست، زیرا استراتژی های بهینه سازی برای GPU در مقابل CPU کاملاً متفاوت است.

راه های متداول برای چک کردن آنها شامل:

  •  GPU اغلب با پهنای باند پر کردن یا حافظه محدود می شود: وضوح نمایشگر را پایین آورده و بازی را اجرا کنید. اگر وضوح نمایش پایین تر باعث سرعت بیشتر بازی می شود، ممکن است با پر کردن در GPU محدود شوید.
  •  CPU اغلب با تعداد دسته ای (batches) که باید ارائه شود محدود می شود: “دسته ها” را در پنجره Rendering Statistics  بررسی کنید. هرچه تعداد دسته های بیشتری ارائه شود، هزینه CPU بیشتر است.

تنگراه هایی (bottlenecks) که کمتر متداول هستند:

  • GPU  رأس های (vertices) بیش از حد زیادی برای پردازش دارد. تعداد رأس هایی که قابل قبول هستند برای اطمینان پیدا کردن از عملکرد خوب، به GPU  و پیچیدگی سایه اندازهای رأس (vertex shadersبستگی دارد.
  • یک رایانه شخصی حتی با چندین میلیون راس نیز به خوبی مدیریت می شود، اما با این وجود میتوان این تعداد را در کمترین حد به وسیله بهینه سازی نگه داشت.
  • CPU  رأس های بیش از حد زیادی برای پردازش دارد. این می تواند در مش های پوست (skinned meshes )، شبیه سازی پارچه، ذرات یا سایر اشیای بازی باشد. همانطور که در بالا ذکر شد معمولاً نگه داشتن این عدد تا حد ممکن پایین و بدون به خطر انداختن کیفیت بازی، عملکرد خوبی است.
  • اگر رندر در GPU یا CPU مشکلی نداشته باشد، ممکن است در جای دیگری به عنوان مثال در اسکریپت یا فیزیک (physics) شما مسئله ای وجود داشته باشد. برای پیدا کردن مشکل از Unity Profiler استفاده کنید.

راه های بالا بردن سرعت بازی در موتور بازی یونیتی

  1. بهینه سازی CPU

برای ارائه دادن اشیا روی صفحه، CPU کارهای پردازشی زیادی را دارد: بررسی اینکه چراغ ها بر روی آن شی تأثیر می گذارند، تنظیم کردن پارامترهای سایه زن (shader parameters) و ارسال دستورات ترسیم شده به درایور گرافیک، که سپس دستورات را آماده کرده تا آن ها را به کارت گرافیک بفرستد.

تمام این کاربردهای CPU برای هر شی بسیار پر مصرف میباشد، بنابراین اگر تعداد زیادی اشیا قابل مشاهده را دارید، میتواند جمع شود. به عنوان مثال اگر شما هزار مثلث داشته باشید، این برای CPU خیلی آسان تر است اگر همه آن ها در یک شبکه (MESH) باشند، به جای اینکه در هر شبکه (MESH) یک مثلث قرار بگیرد که تعداد این مش ها از یکی به هزار مش تبدیل شود. هزینه هر دوی این سناریوها در GPU بسیار مشابه است ولی کاری که CPU برای ارائه هزار شی به جای یک مورد انجام داده است به طور قابل توجهی بیشتر است.

تعداد اشیا قابل ملاحظه را کاهش دهید. برای کاهش میزان کار CPU نیاز است که کارهای زیر انجام شود:

  • اشیا نزدیک را با هم ترکیب کنید؛ به صورت دستی یا با استفاده از بخشی از Unity به نام draw call batching.
  • با قرار دادن بافت های (texturesجداگانه در یک اطلس (atlas ) بافت بزرگتر، از مواد کمتری در اشیا objects خود استفاده کنید.
  • از مواردی که باعث میشوند اشیا چندین بار رندر شوند، کمتر استفاده کنید؛ مانند بازتاب ها (reflections)، سایه ها (shadows) و روشنایی های هر پیکسل.

اشیا را با هم ترکیب کنید تا هر مش حداقل چند صد مثلث داشته باشد و فقط از یک ماده برای تمام مش (mesh) استفاده شود. توجه داشته باشید که ترکیب دو شی که یک ماده را به اشتراک نمی گذارند، به هیچ وجه باعث افزایش عملکرد نمی شود. رایج ترین دلیل نیاز داشتن به چند ماده این است که دو مش بافت های (textures) یکسانی را به اشتراک نمیگذارند. برای بهینه سازی عملکرد پردازنده، اطمینان حاصل کنید که هر اشیایی را که ترکیب می کنید از بافت های یکسانی برخوردار هستند.

بهینه سازی CPU با استفاده از OnDemandRendering انجام میشود و با استفاده از آن عملکرد CPU به وسیله کنترل سرعت ارائه برنامه، بهبود خواهد یافت. زمانی که سرعت رندر تنظیم میشود باعث میشود که بتوانید مصرف برق و حرارت دستگاه را مدیریت کنید تا عمر باتری را به حداکثر رسانده و از سوزاندن CPU جلوگیری کنید. این مورد مخصوصا با بسته Adaptive Performance به خوبی کار میکند.

  1. GPU: بهینه سازی مدل علم هندسه (geometry)

برای بهنه سازی هندسه ی (geometry) یک مدل، دو قانون اصلی وجود دارد:

  • بیش از حد نیاز از مثلث ها استفاده نکنید.
  • سعی کنید تعداد خط های اتصال (seamsنقشه برداری UV و لبه های سخت (hard edges) را تا حد ممکن پایین نگه دارید.

توجه داشته باشید تعداد واقعی رأس ها (vertices) که سخت افزار گرافیکی باید پردازش کند؛ معمولا برابر با تعداد گزارش داده شده به وسیله یک اپلیکیشن 3D نیست. برنامه های مدلسازی معمولاً تعداد نقاط متمایزی که یک مدل را تشکیل می دهند را نمایش می دهند. با این حال برای یک کارت گرافیک، برخی از رأس های هندسی برای ارائه دادن اهداف باید به دو یا چند رأس منطقی تقسیم شوند.

راه های بالا بردن سرعت بازی در موتور بازی یونیتی

  1. GPU: فشرده سازی بافت (texturesو mipmaps

از بافت های فشرده برای کاهش دادن اندازه بافت های خود استفاده کنید. این می تواند منجر شود که زمان بارگیری سریعتر، گرفتن حافظه کمتر و عملکرد ارائه به طور چشمگیری افزایش یابد. بافت های فشرده فقط از بخش کمی از پهنای باند حافظه مورد نیاز برای بافت های فشرده نشده 32 بیتی RGBA استفاده می کنند.

  • بافت نقشه ها (Texture mipmaps)

همیشه تولید mipmaps برای بافتهای استفاده شده در صحنه سه بعدی را فعال کنید. یک بافت mipmap، GPU را قادر میسازد تا برای مثلث های کوچک، از ساختار با وضوح پایین استفاده کند. این شبیه به نحوه فشرده سازی بافت است که
می تواند در محدود کردن مقدار داده های بافتی انتقال داده شده کمک کند زمانی که GPU در حال رندر شدن میباشد.

  1. جمع آوری اشیائی که قابل مشاهده توسط دوربین نیستند

جمع کردن (culling) اشیا مستلزم این است که اشیا به صورت نامرئی ساخته شوند. این یک راه بسیار موثری برای کاهش دادن لود (loadCPU و GPU است. در بسیاری از بازی ها، یک راه سریع و موثر برای انجام این کار بدون به خطر انداختن تجربه بازیکن، این است که جمع آوری اشیاء کوچک خشونت آمیزتر از اشیاء بزرگ است. به عنوان مثال، خرده سنگ ها و سنگ های کوچک در فاصله زیاد قابل مشاهده نیستند، در حالی که ساختمان های بزرگ هنوز قابل مشاهده هستند. پس میتوان اشیائی که در دید کاربر نیستند را نامرئی کرد.

روش های مختلفی برای دستیابی به این هدف وجود دارد:

  • از سیستم Level Of Detail استفاده کنید.
  • به طور دستی فواصل میان لایه ای (per-layer) را روی دوربین تنظیم کنید.
  • اشیا کوچک را در یک لایه جداگانه قرار دهید و با استفاده از عملکرد اسکریپت Camera.layerCullDistances فاصله های میان لایه ها را تنظیم کنید.

همانطور که گفته شد سرعت بازی بسیار موضوع مهمی است که باید در ساخت بازی بسیار مورد توجه قرار بگیرد. سرعت بازی یکی از موارد مهمی است که هر گیمری در همان شروع بازی آن را مورد توجه قرار میدهد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا