Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Діапазон видимості (HLOD)
Поряд з Рівень деталізації сітки (LOD) і Вибракування оклюзії діапазони видимості є ще одним інструментом для покращення продуктивності у великих, складних 3D-сценах.
На цій сторінці ви дізнаєтеся:
Що можуть робити діапазони видимості та в яких сценаріях вони корисні.
Як налаштувати діапазони видимості (вручну LOD) у Godot.
Як налаштувати діапазони видимості для найкращої продуктивності та якості.
Дивись також
Якщо вам потрібні сітки лише для того, щоб вони ставали менш деталізованими на відстані, але у вас немає створених вручну сіток LOD, подумайте про те, щоб натомість покладатися на автоматичний Рівень деталізації сітки (LOD).
Зауважте, що автоматичний LOD і діапазони видимості сітки можна використовувати одночасно, навіть на одній сітці.
Як це працює
Діапазони видимості можна використовувати з будь-яким вузлом, який успадковує GeometryInstance3D. Це означає, що їх можна використовувати не лише з MeshInstance3D і MultiMeshInstance3D для керованого художником HLOD, а й GPUParticles3D, CPUParticles3D, Label3D, Sprite3D, AnimatedSprite3D і CSGShape3D.
Оскільки діапазони видимості налаштовуються для кожного вузла, це дає змогу використовувати різні типи вузлів як частину системи LOD. Наприклад, ви можете відобразити MeshInstance3D, що представляє дерево, якщо зблизька, і замінити його самозванцем Sprite3D на відстані, щоб покращити продуктивність.
Перевагою HLOD перед традиційною системою LOD є її ієрархічна природа. Одна більша сітка може замінити кілька менших сіток, так що кількість викликів витягування може бути зменшена на відстані, але можливості вибракування можуть бути збережені під час близькості. Наприклад, ви можете мати групу будинків, яка використовує окремі вузли MeshInstance3D (по одному для кожного будинку), якщо наблизитися, але перетворюється на один MeshInstance3D, який представляє менш детальну групу будинків (або використовуйте MultiMeshInstance3D).
Нарешті, діапазони видимості також можна використовувати для повного згасання певних об’єктів, коли камера наближається занадто близько або занадто далеко. Це можна використовувати для ігрових цілей, а також для зменшення візуального безладу. Наприклад, вузли Label3D можуть бути вицвілі за допомогою діапазонів видимості, якщо вони надто далеко, щоб їх можна було прочитати або мати відношення до гравця.
Налаштування діапазону видимості
Це короткий посібник із налаштування базової системи LOD. Дотримуючись цього посібника, ця система LOD відображатиме SphereMesh, коли камера буде розташована поблизу, і BoxMesh, коли камера буде достатньо далеко. Невеликий запас гістерезису також налаштовується за допомогою властивостей Begin Margin і End Margin. Це запобігає надто швидкому вискакуванню LOD вперед і назад, коли камера рухається на «краї» переходу LOD.
Властивості діапазону видимості можна знайти в розділі Діапазон видимості інспектора GeometryInstance3D після вибору вузла MeshInstance3D.
Додайте вузол Node3D, який використовуватиметься для групування двох вузлів MeshInstance3D.
Додайте перший вузол MeshInstance3D як дочірній вузол Node3D. Призначте новий SphereMesh його властивості Mesh.
Встановіть діапазон видимості першого MeshInstance3D End на
10.0і End Margin на1.0.Додайте другий вузол MeshInstance3D як дочірній вузол Node3D. Призначте новий BoxMesh його властивості Mesh.
Встановіть діапазон видимості другого MeshInstance3D Begin на
10.0і Begin Margin на1.0.Перемістіть камеру назад і назад до об’єкта. Зверніть увагу на те, як об’єкт переходитиме зі сфери в коробку, коли камера віддалятиметься.
Властивості діапазону видимості
В інспекторі будь-якого вузла, який успадковує GeometryInstance3D, ви можете налаштувати такі властивості в розділі Діапазон видимості GeometryInstance3D:
Початок: Екземпляр буде приховано, коли камера буде ближче до центру вирівняної по осі обмежувальної рамки (AABB) екземпляра, ніж це значення (у 3D-одиницях).
Початкове поле: Відстань переходу гістерезису або альфа-згасання, яка використовується для переходу великим планом (у 3D-елементах). Поведінка цієї властивості залежить від Fade Mode.
Кінець: Екземпляр буде приховано, коли камера буде розташована далі від центру AABB екземпляра, ніж це значення (у 3D-одиницях).
Кінцеве поле: Перехідна відстань гістерезису або альфа-згасання, яка використовується для далекого переходу (у 3D-одиницях). Поведінка цієї властивості залежить від Fade Mode.
Режим затухання: контролює, як повинен виконуватися перехід між рівнями LOD. Подробиці дивіться нижче.
Режим згасання
Примітка
Вибраний режим згасання має видимий вплив, лише якщо Діапазон видимості > Початкове поле або Діапазон видимості > Кінцеве поле більше ніж 0,0.
У розділі Діапазон видимості інспектора є 3 режими згасання на вибір:
Вимкнено: Використовує гістерезис для миттєвого перемикання між рівнями LOD. Це запобігає ситуаціям, коли рівні LOD швидко перемикаються вперед і назад, коли гравець рухається вперед, а потім назад у точці переходу LOD. Відстань гістерезису визначається параметрами Діапазон видимості > Початкове поле і Діапазон видимості > Кінцеве поле. Цей режим забезпечує найкращу продуктивність, оскільки він не змушує рендеринг ставати прозорим під час переходу згасання.
Self: Використовує альфа-змішування для плавного переходу між рівнями LOD. Вузол сам зникає, коли досягає меж власного діапазону видимості. Відстань переходу згасання визначається параметрами Діапазон видимості > Початкове поле та Діапазон видимості > Кінцеве поле. Цей режим змушує прозорий рендеринг об’єкта під час переходу зникання, тому це впливає на продуктивність.
Залежності: Використовує альфа-змішування для плавного переходу між рівнями LOD. При досягненні межі власного діапазону видимості вузол зменшить свої залежності. Відстань переходу згасання визначається параметрами Діапазон видимості > Початкове поле та Діапазон видимості > Кінцеве поле. Цей режим змушує прозорий рендеринг об’єкта під час переходу зникання, тому це впливає на продуктивність. Цей режим призначений для ієрархічних систем LOD, що використовують батьківський елемент видимості. Він діє так само, як Self, якщо діапазони видимості використовуються для виконання неієрархічного LOD.
Батько видимості
Властивість Visibility Parent полегшує налаштування HLOD. Він дозволяє автоматично приховувати дочірні вузли, якщо їхній батьківський вузол є видимим, враховуючи його поточні властивості діапазону видимості.
Примітка
Ціль Visibility Parent має успадкувати від GeometryInstance3D.
Незважаючи на свою назву, властивість Visibility Parent може вказувати на вузол, який не є батьківським вузлом у дереві сцени. Однак неможливо вказати Visibility Parent на дочірній вузол, оскільки це створює цикл залежності, який не підтримується. Ви отримаєте повідомлення про помилку на панелі виводу, якщо відбудеться цикл залежностей.
Дано наступне дерево сцени (де всі вузли успадковуються від GeometryInstance3D):
┖╴BatchOfHouses
┠╴House1
┠╴House2
┠╴House3
┖╴House4
У цьому прикладі BatchOfHouses — це велика сітка, призначена для представлення всіх дочірніх вузлів, якщо дивитися на відстань. Від House1 до House4 менші MeshInstance3D, що представляють окремі будинки. Щоб налаштувати HLOD у цьому прикладі, нам потрібно налаштувати лише дві речі:
Установіть для параметра Початок діапазону видимості значення, що перевищує 0,0, щоб BatchOfHouses з’являвся лише на досить великій відстані від камери. Нижче цієї відстані ми хочемо, щоб натомість відображалися від House1 до House4.
Від House1 до House4 призначте властивість Visibility Parent для BatchOfHouses.
Це полегшує виконання подальших налаштувань, оскільки вам не потрібно налаштовувати Початок діапазону видимості для BatchOfHouses і Кінець діапазону видимості для House1 до House4.
Режим згасання автоматично обробляється властивістю Visibility Parent, так що дочірні вузли стають прихованими лише після того, як батьківський вузол повністю зникає. Це зроблено для того, щоб мінімізувати видиме спливаюче вікно. Залежно від ваших налаштувань HLOD, ви можете спробувати як Self, так і Dependencies fade modes.
Примітка
Вузли, приховані за допомогою властивості Visible, по суті, видаляються з дерева залежностей видимості, тому залежні екземпляри не враховуватимуть прихований вузол або його предків.
На практиці це означає, що якщо ціль вузла Visibility Parent приховано шляхом встановлення для його властивості Visible значення false, вузол не буде приховано відповідно до значення Початок діапазону видимості, указаного в батьківському елементі видимості.
Поради щодо налаштування
Використовуйте простіші матеріали на відстані, щоб покращити продуктивність
Одним із способів подальшого покращення продуктивності є використання простіших матеріалів для віддалених сіток LOD. Хоча використання сіток LOD зменшує кількість вершин, які потрібно візуалізувати, навантаження на піксель затінення для матеріалів залишається ідентичним. Однак попіксельне затінення зазвичай є вузьким місцем для GPU у складних 3D-сценах. Один зі способів зменшити навантаження на графічний процесор — це використовувати простіші матеріали, коли вони не роблять значних візуальних відмінностей.
Підвищення продуктивності при цьому слід ретельно виміряти, оскільки збільшення кількості унікальних матеріалів у сцені само по собі впливає на продуктивність. Тим не менш, використання простіших матеріалів для віддалених сіток LOD може призвести до чистого приросту продуктивності в результаті меншої кількості необхідних обчислень на піксель.
Наприклад, для матеріалів, які використовуються віддаленими сітками LOD, ви можете вимкнути дорогі функції матеріалів, такі як:
Звичайна карта (особливо на мобільних платформах)
Обідок
Очистити
Анізотропія
Висота
Підповерхневе розсіювання
Заднє освітлення
Заломлення
Близьке згасання
Використовуйте дизерінг для переходів LOD
Godot наразі підтримує лише альфа-згасання для діапазонів видимості. Однак ви можете замість цього використовувати дизерінг, використовуючи кілька різних матеріалів для різних рівнів LOD.
Є дві переваги використання дизерінгу над альфа-змішуванням для переходів LOD:
Вища продуктивність, оскільки змішування прозорості відтворюється швидше порівняно з альфа-змішуванням.
Відсутність візуальних збоїв через transparency sorting issues під час переходів LOD.
Недоліком дизерінгу є те, що під час переходів із затуханням LOD видно «шумний» візерунок. Це може бути не так помітно при вищій роздільній здатності вікна перегляду або коли ввімкнено тимчасове згладжування.
Крім того, оскільки затухання на відстані в BaseMaterial3D підтримує лише згасання поблизу або завмирання на великій відстані, це налаштування найкраще використовувати лише з двома LOD як частиною налаштування.
Переконайтеся, що для параметрів Begin Margin та End Margin встановлено значення
0.0на обох вузлах MeshInstance3D, оскільки гістерезис або альфа-згасання тут небажані.На обох вузлах MeshInstance3D зменште Початок на потрібну відстань переходу згасання та збільште Кінець на ту саму відстань. Це потрібно для того, щоб перехід дизерінгу був фактично видимим.
На MeshInstance3D, який відображається зблизька, відредагуйте його матеріал в інспекторі. Установіть для режиму Distance Fade значення Object Dither. Установіть Мінімальна відстань на те саме значення, що й діапазон видимості Кінець. Встановіть Максимальна відстань на те саме значення мінус відстань переходу згасання.
На MeshInstance3D, який відображається далеко, відредагуйте його матеріал в інспекторі. Установіть для режиму Distance Fade значення Object Dither. Установіть Мінімальна відстань на те саме значення, що й діапазон видимості Початок. Встановіть для Максимальна відстань те саме значення плюс відстань переходу згасання.