بهینه‌سازی رندر در Unity

در توسعه‌ی بازی‌ها و اپلیکیشن‌های سه‌بعدی با Unity، یکی از مهم‌ترین عوامل در عملکرد (Performance) رندرینگ، میزان آبجکت‌هایی است که در هر فریم رندر می‌شوند. به طور پیش‌فرض، Unity تنها آنچه در میدان دید دوربین (Camera Frustum) قرار دارد را رندر می‌کند. با این حال، با تکنیک‌ها و تنظیمات پیشرفته‌تری می‌توان کنترل دقیق‌تری روی رندر گرفت و بخش‌هایی از محیط را که قابل مشاهده نیستند، از چرخه‌ی رندر حذف کرد.

در این مقاله به معرفی روش‌هایی می‌پردازیم که تنها بخش‌هایی از محیط بازی که دوربین می‌بیند رندر شوند و از رندر شدن بی‌مورد سایر بخش‌ها جلوگیری شود.

 

🔹 ۱. Frustum Culling (پیش‌فرض در Unity)

Frustum Culling به فرآیندی گفته می‌شود که در آن موتور بازی بررسی می‌کند آیا یک آبجکت داخل محدوده‌ی دید دوربین قرار دارد یا خیر. اگر بیرون از این محدوده باشد، به طور کامل از رندر حذف می‌شود.

این قابلیت به صورت پیش‌فرض در Unity فعال است و نیازی به فعال‌سازی دستی ندارد. اما برای اطمینان از عملکرد صحیح:

  • اطمینان حاصل کنید که آبجکت‌ها دارای کامپوننت Renderer فعال هستند.

  • از منوی Scene View، گزینه‌ی Overdraw را برای مشاهده‌ی مناطق رندر شده فعال کنید.

 

🔹 ۲. Occlusion Culling (مخفی‌سازی پشت موانع)

Frustum Culling فقط آبجکت‌های بیرون دید را حذف می‌کند، اما Occlusion Culling پا را فراتر می‌گذارد و آبجکت‌هایی که در دید دوربین هستند ولی پشت یک مانع قرار گرفته‌اند را نیز از رندر خارج می‌کند.

مراحل فعال‌سازی:

  1. پنجره‌ی Window > Rendering > Occlusion Culling را باز کنید.

  2. آبجکت‌هایی مثل دیوارها، زمین و ستون‌ها را به عنوان Static تنظیم کنید.

  3. در بخش Inspector، گزینه‌های Occluder Static و Occludee Static را فعال کنید.

  4. در پنجره‌ی Occlusion Culling روی Bake کلیک کنید.

نکته: Occlusion Culling بیشتر در محیط‌های بسته مانند ساختمان‌ها و دالان‌ها کاربرد دارد.

 

🔹 ۳. استفاده از Culling Mask در دوربین

اگر بخواهید فقط لایه‌های خاصی توسط یک دوربین دیده شوند، می‌توانید از Culling Mask استفاده کنید.

تنظیمات:

  1. دوربین مورد نظر را انتخاب کنید.

  2. در بخش Camera > Culling Mask، لایه‌هایی که باید دیده شوند را انتخاب یا حذف کنید.

این روش برای ساخت سیستم‌هایی مثل دوربین‌های امنیتی یا مینی‌مپ‌ها بسیار مفید است.

 

🔹 ۴. استفاده از Shader سفارشی یا Script برای تشخیص دید دوربین

در صورتی که نیاز به کنترل دقیق‌تری دارید، می‌توانید با استفاده از اسکریپت یا Shader بررسی کنید که آیا آبجکت در دید دوربین قرار دارد یا نه، و سپس رندر را غیرفعال کنید.

نمونه‌ی ساده در C#:

void Update()
{
    Plane[] planes = GeometryUtility.CalculateFrustumPlanes(Camera.main);
    if (!GeometryUtility.TestPlanesAABB(planes, GetComponent<Renderer>().bounds))
    {
        GetComponent<Renderer>().enabled = false;
    }
    else
    {
        GetComponent<Renderer>().enabled = true;
    }
}

 

🔹 ۵. استفاده از Replacement Shader (پیشرفته)

برای مواقعی که بخواهید یک ظاهر خاص را فقط در محدوده دید دوربین رندر کنید (مثل سایه، حرارت، یا فیلترهای خاص)، می‌توانید از تکنیک Replacement Shader استفاده کنید تا متریال‌ها یا ویژگی‌های خاصی فقط در آن بخش دیده شوند.

 

🎯 نتیجه‌گیری

بهینه‌سازی رندر در Unity یکی از کلیدی‌ترین بخش‌های افزایش کارایی بازی است. با ترکیب تکنیک‌هایی مثل Frustum Culling، Occlusion Culling و استفاده از Culling Mask یا حتی Shaderهای سفارشی، می‌توان به شدت از بار گرافیکی کاست و بازی روان‌تری را برای کاربر ارائه داد.

اگر پروژه‌ی شما در پلتفرم‌هایی با منابع محدود مثل موبایل یا VR اجرا می‌شود، استفاده از این روش‌ها به شدت توصیه می‌شود.

 

اشتراک گذاری

مهدی یدی

مهدی یدی

یک برنامه نویس ☕ ASP.Net Core - MAUI - WPF - Unity فعالیت می کنم.از تولید محتوا لذت میبرم. و دوست دارم محتوای پارسی را بروز نگهدارم 😎

مقالات مرتبط

ثبت دیدگاه

0 دیدگاه

دوره‌های سایت

مقاله‌های اخیر

‌نرم افزار و ابزار

بازی‌ها منشتر شده

    (بزودی)

محبوب ترین مقاله‌ها

Captcha Active