Демістифікація "чіткого рівня деталізації"


17

Зовсім недавно намагаються осмислити впровадження чіткої системи деталізації в Unity. Я буду генерувати чотири сітчасті площини, кожна з яких має карту висоти, але я думаю, що це не надто важливо на даний момент. У мене після запитання про цю техніку виникає багато запитань, я сподіваюся, що це не надто багато, щоб запитати всіх за один раз, але я був би дуже вдячний тому, що хтось допоможе мені зрозуміти цю методику.

1 : Я не можу зрозуміти, в який момент вниз по трубопроводу Chunked LOD сітка розбивається на шматки. Це під час початкової генерації сітки, чи існує окремий алгоритм, який це робить.

2 : Я розумію, що структура даних Quadtree використовується для зберігання даних Chunked LOD , я думаю, що мені трохи не вистачає точки, але чи є квадратне збереження даних вершин та трикутників для кожного рівня підрозділу?

: Як зазвичай обчислюється відстань до камери Читаючи про квадрати, багато згаданих обмежувальних коробок по осі. У цьому випадку кожен шматок має коробку, що обмежує зіткнення, щоб виявити камеру чи програвач поблизу? чи є кращий спосіб зробити це? (Можливо, радіація?)

3b : Чи шматки самі обчислюють відстань камери?

4 : Чи має кожен блок має один і той же «дозвіл». наприклад, на верхньому рівні сітка буде 32x32, чи буде кожний підрозділений вузол також 32x32. Приклад нижче:

приклад зрізаного LOD


Якщо хтось знає кращий підхід LOD для планетарної планети, це також було б цікаво.
Кай Євген

Я припускаю, що ви вже подивилися оригінальний папір SIGGRAPH Тетчер Ульріх та пов'язану з ним програму? tulrich.com/geekstuff/chunklod.html
drxzcl

У мене це дуже інформативно до певного моменту, але воно не входить у тип деталей чи підходи до реалізації. Дякую
Кай Євген

1
Тут є ряд варіантів планетарного ЛОД; vterrain.org/LOD/spherical.html
OriginalDaemon

Відповіді:


12

1: Я не можу зрозуміти, в який момент вниз по трубопроводу Chunked LOD сітка розбивається на шматки. Це під час початкової генерації сітки, чи існує окремий алгоритм, який це робить.

Це не має значення. Наприклад, ви можете інтегрувати фрагменти в алгоритм генерації сітки. Ви можете навіть робити це динамічно, щоб нижчі рівні динамічно додавалися (наприклад, у міру наближення гравця) за допомогою плазмового алгоритму уточнення. Ви також можете генерувати сітку з високою роздільною здатністю з даних вимірювання введення виконавця або висоти та об’єднувати їх у всі фрагменти LOD під час завершення активу. Або ви можете змішувати і відповідати. Це дійсно залежить від вашої заявки.

2: Я розумію, що структура даних Quadtree використовується для зберігання даних Chunked LOD, я думаю, що мені трохи не вистачає точки, але чи є квадратне збереження даних вершин та трикутників для кожного рівня підрозділу?

Не обов'язково. Дерево просто зберігає інформацію про геометрію та способи її надання. Це може означати наявність списку вершин / облич у кожному вузлі дерева. Більш реально в цей день і вік ви зберігаєте ручки сіток / екземплярів у пам'яті GPU.

3а: Як зазвичай обчислюється відстань до камери Читаючи про квадрати, багато згаданих обмежувальних коробок по осі. У цьому випадку кожен шматок має коробку, що обмежує зіткнення, щоб виявити камеру чи програвач поблизу? чи є кращий спосіб зробити це? (Можливо, радіація?)

Дуже дешевим і простим варіантом є використання відстані до центральної точки шматка, а потім виправлення. Ви знаєте, що ця відстань - це завжди недооцінка: якщо центральна точка знаходиться на відстані Z, це означає, що половина шматка знаходиться ближче до цього. Що ми не знаємо, але це орієнтація. Якщо ми переглянемо шматок ширини, який знаходиться на wмежі ширини , найближчий шматочок буде знаходитися на відстані Z-w. Однак, якщо ми спочатку переглянемо кут, куди буде найближчий біт Z-sqrt(2)*w. Якщо ви можете жити з цією невизначеністю (ви майже завжди можете), ви закінчите. Зауважте, що ви також могли скоригувати кут огляду за допомогою основної тригонометрії.

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

Якщо ви можете скористатися вашим фізичним двигуном, щоб це зробити, то всіма силами зробіть це, але ви дійсно хочете думати про це більше з точки зору "запиту на відстань", ніж "зіткнення".

3b: Чи шматки самі обчислюють відстань камери?

Це дійсно залежить від конструкції вашого двигуна. Я б рекомендував зберігати листя відносно невеликою вагою. Залежно від вашої платформи, лише накладні витрати на виклик з кількох тисяч ландшафтів місцевості виконують власне оновлення, кожен кадр може серйозно вплинути на продуктивність.

4: Чи має кожен шматок однакову "роздільну здатність". наприклад, на верхньому рівні сітка буде 32x32, чи буде кожний підрозділений вузол також 32x32.

Вони не повинні, але зручно, якщо всі шматки займають однакову кількість місця. Тоді ви можете виконувати управління (GPU) пам’яттю в одиницях «шматок». Так само простіше зняти / приховати шви між двома шматками різного розміру, якщо одна роздільна здатність кратна іншій, оскільки вони мають більше вершин. (наприклад: 32x32 та 64x64 простіше керувати, ніж 32x32 та 57x57) (спасибі Guiber!). Якщо у вас є вагомі підстави змінити розмір геометрії шматка, будь-ласка, займіться цим.


2
Так само простіше зняти / приховати шви між двома шматками різного розміру, якщо одна роздільна здатність кратна іншій, оскільки вони мають більше вершин. (наприклад: 32x32 та 64x64 простіше керувати, ніж 32x32 та 57x57)
Аларік

Блискуча відповідь: Прояснено багато речей. Тим більше, що багато втілення полягає в розгляді можливостей двигуна. З 3a я все ще не впевнений, коли потрібно запускати запит на відстань, дві реалізації, які я вважав звуковим процесором важким, я ще кілька досліджень з цього приводу проведу. Дякую
Каю Євген

1
@CaiusEugene: Я думаю, ви надмірно думаєте про своє визначення відстані. До відповіді в точці 3а я додав дуже дешевий, дуже базовий алгоритм, який повинен почати вас.
drxzcl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.