Occlusion در یونیتی چیست؟


18 آبان 1399

webmehr-shape
webmehr-shape
webmehr-shape
webmehr-shape
webmehr-shape
webmehr-shape
webmehr-shape
webmehr-shape

وب مهر

2020-11-08T03:16:26+03:30
Occlusion در یونیتی چیست؟

Occlusion در لغت به معنی انسداد، بسته شدگی، جفت شدگی می باشد. در موتور بازی سازی یونیتی این لغت در بخش های مختلفی استفاده شده است مانند دوربین، نقشه و غیره.

اما Occlusion چیست و در هر بخش چه کاربردی دارد؟ این واژه در یونیتی اکثرا در کنار دیگر کلمات مانند area,   culling, map  وغیره به کار می رود و زمانی که در کنار هر کدام از این کلمات قرار می گیرد معنای «نادیده گرفته شدن» یا «کم اهمیت بودن» می گیرند. در ادامه به این خواهیم پرداخت که این دو واژه در هر بخش به چه معنی می باشند و چه کاربردی دارند.

Occlusion map

این قابلیت در نورپردازی مدل ها به کار می رود و اطلاعاتی نظیر اینکه کدام بخش از یک مدل روشنایی غیرمستقیم کمتر یا بیشتری داشته باشد را مشخص می کند. نور غیرمسقیم از نور اصلی و بازتاب های نور محیط بدست می آیند.

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

نقشه انسداد یا همان occlusion map تصویری سیاه سفید است که بخش های سفید نشان دهنده دریافت کردن روشنایی بیشتر و بخش های سیاه نشان دهنده دریافت کردن روشنایی کمتر می باشد. در زیر می توانید نمونه یک occlusion  map  را ببینید.

Occlusion در یونیتی چیست؟

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

در زیر می توانید تفاوت شخصیت بازی را در دو حالت استفاده از نقشه انسداد و استفاده نکردن از آن را ببینید (نقشه انسداد شخصیت زیر در بالاتر نشان داده شده است).

Occlusion در یونیتی چیست؟

Ambient Occlusion

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

انسداد محیط به دو صورت بیک شده(Baked) یا در لحظه(Realtime) صورت می گیرد. اگر Global Illumination در صحنه شما فعال باشد، موتور یونیتی می تواند انسداد محیط را در نقشه های نوری قرار دهد که به آن Baked Ambient Occlusion یا همان انسداد محیط بیک شده گفته می شود.

برای فعال کردن این قابلیت تنها کافیست مراحل زیر را انجام دهید.

  1. پنجره lighting را باز کنید (Window > Rendering > Lighting settings)
  2. به بخش Mixed Lighting بروید.
  3. گزینه Baked Global Illumination را فعال کنید.
  4. به بخش Lightmapping Settings بروید.
  5. گزینه Ambient Occlusion را فعال کنید.

اگر می خواهید این قابلیت را در لحظه داشته باشید باید از یک post-processing استفاده کنید تا این قابلیت در لحظه بر روی صحنه شما اثر بگذارد.

Occlusion Culling

یکی از پر استفاده ترین و مهمترین قابلیت هایی که در یونیتی می باشد. از این قابلیت برای افزایش سرعت بازی نیز استفاده می شود. این قابیلیت یک فرایند ((Process می باشد که به وسیله آن، از رندر کردن و انجام محاسبات بر روی اشیائی ((GameObjects که کاملا از دید دوربین و دیگر اشیا مخفی می باشند، جلوگیری می کند.

در هر فریم، دوربین ها عملیات مسدود کردن را انجام می دهند. آن ها رندرهای موجود در هر فریم را بررسی می کنند و اشیائی که لازم نیست رندر شوند را مشخص می کند. تنظیمات دوربین ها به صورت پیش فرض بر روی frustum culling می باشد.

 در این حالت تمامی اشیا و اجسام موجود در صحنه بدون در نظر گرفتن اینکه در دید دوربین هستند یا خیر رندر می شوند. که این امر باعث کند شدن سرعت نرم افزار مخصوصا بر روی گوشی های موبایل می شود. در زیر نمونه دو صحنه که یکی از آن ها این قابلیت در آن استفاده شده و دیگری بر روی تنظیمات پیش فرض می باشد نشان داده می شود.

صحنه ای که بر روی تنظیمات پیش فرض می باشد:

Occlusion در یونیتی چیست؟

صحنه ای که از قابلیت occlusion culling استفاده می کند:

Occlusion در یونیتی چیست؟

اما برای اینکه مشخص کنید که بهتر است در چه مواقعی ازocclusion culling  استفاده کنید تا بتوانید بازدهی و پرفرومنس اجرایی برنامه خود را بالاببرید به نکات زیر توجه کنید:

  • جلوگیری از هدر رفتن زمان بر روی CPU, GPU که می خواهد برای رندر کردن استفاده شود که در نهایت به بهبود عملکرد منجر می شود.
  • یونیتی داده های occlusion culling را در مموری ذخیره می کند. شما باید مطمئن باشید که مموری کافی برای بارگذاری این داده ها را دارید.
  • بهترین عملکرد این قابلیت در صحنه هایی کوچکی است که بخش های مختلف آن کاملا توسط solid gameobject ها جدا شده اند. برای مثال می توان به اتاق هایی اشاره کرد که توسط راهرو به یکدیگر متصل شده اند.
  • از این قابلیت برای انسداد GameObject های داینامیک نیز می توان استفاده کرد. اما آن ها نمی توانند object دیگری را مسدود کنند. اگر پروژه شما geometry را در لحظه ایجاد می کند پس این قابلیت یونیتی برای پروژه شما مناسب نمی باشد.

Occlusion Culling چگونه کار می کند؟

 این قابلیت، داده هایی که صحنه تولید شده را در ویرایش گر یونیتی ذخیره می کند، و در لحظه مشخص می کند که کدام GameObjectها باید توسط دوربین دیده شوند و کدام یک نباید دیده شود.

زمانی که شما این داده ها را بیک می کنید. یونیتی صحنه شما را به سلول هایی با اندازه مشخص ( که توسط شما مشخص می شود) ایجاد می کند و یک داده که توصیف می کند geometry بین سلول ها را و قابلیت مشاهده بین سلول های مجاور را تعیین می کند. سپس یونیتی تا جایی که امکان پذیر است سلول ها را با یکدیگر ادغام می کند تا اندازه آن کاهش یابد.

برای تنظیم کردن تنظیمات بیک کردن، شما می توانید متغیر های موجود در پنجره occlusion culling تغییر دهید و یا مناطق انسداد اضافه کنید. در هنگام اجرا، یونیتی داده های بیک شده را در مموری بارگذاری کرده و از رندر کردن برخی اجسام جلوگیری می کند.

دریافت مشاوره و استعلام

image

بدون نظر

    اولین نفری باشید که نظر می دهد!

نظر بدهید

آدرس ایمیل شما منتشر نخواهد شد. موارد ستاره دار الزامی است. *