Unity - керівництво вікно occlusion culling

Occlusion Culling це функція, яка відключає рендеринг тих об'єктів, які в дані момент не бачить камера (вони закриті іншими об'єктами). У комп'ютерній 3D графіку це не відбувається автоматично. Найчастіше спочатку отрісовиваємих об'єкти, розташовані далі від камери і вже поверх них отрісовиваємих ближні до камери об'єкти (це називається "overdraw"). Occlusion Culling відрізняється від Frustum Culling. Frustum Culling відключає тільки рендеринг об'єктів, що не потрапляють в область огляду камери, не чіпаючи при цьому приховані за overdraw об'єкти. Зверніть увагу, що Frustum Culling корисний навіть при використанні Occlusion Culling.

Unity - керівництво вікно occlusion culling
A maze-like indoor level. This normal scene view shows all visible Game Objects.
Unity - керівництво вікно occlusion culling
Regular frustum culling only renders objects within the camera's view. This is automatic and always happens.
Unity - керівництво вікно occlusion culling
Occlusion culling removes additional objects from within the camera rendering work if they are entirely obscured by nearer objects.

Occlusion сulling, використовуючи віртуальну камеру, проходить по сцені для побудови ієрархії потенційно видимих ​​наборів об'єктів. Ці дані використовуються в Рантайм кожною камерою для визначення того що вона бачить, і що немає. Спираючись на отриману інформацію, Unity забезпечує рендеринг тільки видимих ​​об'єктів. Це зменшує кількість draw calls і збільшує продуктивність гри.

Дані для occlusion culling складаються з осередків. Кожна клітинка - частинка сцени. Осередки утворюють бінарне дерево. Occlusion Culling використовує два дерева. Перше View Cells (для статичних об'єктів), друге Target Cells (для рухомих об'єктів). View Cells містить список індексів, який визначає видимість статичних об'єктів з більш високою точністю.

Про це важливо пам'ятати при створенні об'єктів, тому що потрібен хороший баланс між розмірами об'єктів і осередків. В ідеалі, у вас не повинно бути осередків, які дуже малі в порівнянні з об'єктами. І в той же час, у вас не повинно бути об'єктів, що охоплюють велику кількість осередків. Іноді корисно розбивати великі об'єкти на частини. Іноді корисно поєднувати маленькі об'єкти між собою (для зменшення draw calls), і, поки вони залишаються в одній комірці, occlusion culling буде коректно працювати. Колекцію осередків і інформацію про видимість, що визначає які комірки видімие з іншого вічка, називають PVS (P otentially V isible S et).

You can use the 'overdraw' scene rendering mode to see the amount of overdraw that is occuring, and the stats information pane in the game view to see the amount of triangles, verts, and batches that are being rendered. Below is a comparison of these before and after applying occlusion culling.

Unity - керівництво вікно occlusion culling
Notice in the Overdraw scene view, a high density of overdraw as many rooms beyond the visible walls are rendered. These are not visible in the game view, but nonetheless time is being taken to render them.
Unity - керівництво вікно occlusion culling
With occlusion culling applied, the distant rooms are not rendered, the overdraw is much less dense, and the number of triangles and batches being rendered has dropped dramatically, without any change to how the game view looks.

Налаштування Occlusion Culling

Для правильного використання Occlusion Culling є деякі правила. По-перше, ваша геометрія на рівні повинна бути розбита на шматки розумних розмірів. Це ще потрібно для того, щоб ділити рівень на невеликі, добре певні області, відокремлені один від одного великими об'єктами типу стін, будівель і т.д. Ідея полягає в тому, що кожен індивідуальний меш буде або включений, або вимкнений (в залежності від даних occlusion culling). Так, якщо у вас є об'єкт, що містить всі меблі в кімнаті, то рендерится буде або все, або нічого. В цьому випадку краще робити кожен предмет меблів окремим Мешем, тоді кожен з них буде отрендеріть в залежності від точки огляду камери.

Для того, щоб на об'єкти діяв occlusion culling, їх потрібно позначити тегом Occluder Static в Inspector. Найшвидший спосіб зробити це - виділити всі потрібні вам об'єкти і позначити їх як Occluder Static і Occludee Static.

Unity - керівництво вікно occlusion culling
Помічаємо об'єкт для Occlusion Culling

Коли слід використовувати Occludee Static. Прозорі об'єкти, які не закривають видимість, а також невеликі об'єкти, які не перекривають інших об'єктів, повинні бути позначені як Occludees. а не Occluders. Це означає, що вони не будуть рендерится при закритті їх іншими об'єктами. У разі, коли самі ці об'єкти закривають видимість інших, рендеринг вимикаються не буде. Це допомагає знизити обчислення.

Вікно Occlusion Culling

Для більшості операцій слід використовувати вікно Occlusion Culling (Window-> Occlusion Culling)

У вікні Occlusion Culling ви можете працювати з мешамі і Occlusion Areas (Областями Оклюзії).

У вкладці Object вікна Occlusion Culling Window при виділеному на сцені компоненті Mesh Renderer. ви можете змінювати відповідні Static flags:

Unity - керівництво вікно occlusion culling
Вікно Occlusion Culling для Mesh Renderer

У вкладці Object вікна Occlusion Culling. при виділеному Occlusion Area. ви можете працювати з відповідними властивостями OcclusionArea. Для більш докладної інформації, перейдіть в розділ Occlusion Area

Unity - керівництво вікно occlusion culling
Вікно Occlusion Culling для Occlusion Area

ПРИМІТКА: За замовчуванням, якщо ви не створюєте областей для occlusion culling. вона застосовується до всієї сцені.

ПРИМІТКА: Всякий раз, коли ваша камера знаходиться все області occlusion culling, ця функція застосовуватися не буде. Важливо розташувати області occlusion culling в місцях, де потенційно може знаходиться камера, але занадто великий розмір цих місць погано позначиться на продуктивності під час запікання.

Occlusion Culling - Запікання

Unity - керівництво вікно occlusion culling
Вкладка інспектора запікання Occlusion Сulling

The occlusion culling bake window has a "Set Default Parameters" button, which allows you to reset the bake values ​​to Unity's default values. These are good for many typical scenes, however you'll often be able to get better results by adjusting the values ​​to suit the particular contents of your scene.

Визначає, де може перебувати камера. Виставляйте цей прапорець, якщо вам необхідно відсікти статичні об'єкти саме в цій зоні відсікання.

Unity - керівництво вікно occlusion culling
Властивості зон відсікань для рухливих об'єктів.

Після того як ви додали зону відсікань, вам необхідно поспостерігати як вона розіб'є бокс на осередки. Щоб відстежити те, як буде прораховуватимуться зона відсікання, виберете опцію View в параметрах Edit в (Occlusion Culling Preview Panel). Occlusion Culling Preview Panel.

Unity - керівництво вікно occlusion culling

Тестування отриманого відсікання (Testing the generated occlusion)

Після того як розрахунок був проведений, ви можете протестувати то, що вийшло в результаті, шляхом активації функції відсікання об'єктів (в Occlusion Culling Preview Panel в режимі візуалізації) і переміщаючи Main Camera у видовому вікні сцени.

Під час переміщення камери по сцені (перебуваєте ви в ігровому режимі чи ні), ви помітите як різні об'єкти сцени будуть зникати, то з'являтися. Важливість даного процесу полягає в тому, що таким чином ви будете відловлювати помилки результату розрахунків відсікань. Ви розпізнаєте об'єкти, які видають помилки по тому, як вони будуть раптово вискакувати в видовому вікні під час переміщення камери по сцені. Одним з виходів з даної ситуації є або зміна вихідного дозволу (якщо ви маєте справу з цільовими обсягами), або переміщення об'єктів з місця на місце таким чином, щоб вони більше не мерехтіли і тим самим не викликали подальших проблем. Для налагодження проблем, пов'язаних з відсіканням об'єктів, ви можете переміщати до проблемних областях головну камеру для їх точкової перевірки.

Коли процес розрахунків буде завершений, ви побачите у вікні проекції кольорові паралелепіпеди. Сині куби представляють є осередками Target Volumes. Білі куби ж є осередками View Volumes. Вони служать для розбиття цих обсягів на дрібні частини. Якщо параметри були виставлені правильно, ви помітите що частина об'єктів в сцені перестала бути видимою. Це тому що або вони знаходяться поза полем зору камери, або вони закриті іншими об'єктами.

Якщо навіть після завершення всіх розрахунків у вашій сцені, всі об'єкти як і раніше видно, тобто НЕ відсікаються, значить вам треба спробувати розбити їх на більш дрібні частини, які вміщалися б всередині осередків.

Створення відчуття великих і маленьких розмірів

Materials, Shaders Textures

Схожі статті