Поводження з проективним згладжуванням у тіньовому картографуванні


15

Я співуюся з простим процедурним 3D-моделюванням, щоб зробити маленькі будівлі для 3D-друку. Приклад:

Будівля


Щоб зробити моделі більш зрозумілими на екрані, я реалізував базове тіньове картографування для одного спрямованого світла. Оскільки моя сцена не змінюється, я просто відображаю карту тіней один раз, використовуючи вікно, орієнтоване на осі сцени, щоб зрозуміти, якими мають бути межі тіньової карти. Тіні та межі виглядають так, ніби я маю всі матриці правильно, але прийти трохи ближче виглядає жахливо:

Крупним планом вежі

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

Я зламав піксельний шейдер, щоб показати межі тіньового текселя:

Показані межі Текселя

У мене білінеарне фільтрування текстури (без цього я отримую серйозні тіньові прищі). На жаль, і моя спроба PCF теж не вдалася - це виглядає так само нарвано:

введіть тут опис зображення

Ось єдиний зразок з вимкненою білінеарною фільтрацією:

введіть тут опис зображення

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

Редагувати: Додавання крупного плану білінеарної фільтрації, опублікування порівняння тіней, просто щоб показати, що я отримую. Погані тіньові прищі з’являються через внутрішні краї; Я моделюю зі складеними віртуальними блоками і не виконую належну операцію об'єднання. З мого читання, реалізація булевих операцій над багатогранниками не є тривіальною, але також дозволить мені реалізувати статичні об'єми тіней, а також очистити деякі програми для 3D-друку.

Білінеарне фільтрування

Відповіді:


10

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

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

Деякі основні прийоми згладжування краю тіні:

  • очевидно, PCF, але чи рекомендується поєднувати вашу реалізацію PCF із вбудованою апаратною PCF (в Opengl - за допомогою sampler2DShadow). Це призведе до менших ітерацій циклу з вашого боку та дешевшого PCF,
  • блокованість ребер може бути замінена на шум за допомогою обертового диска Пуассона. Зразки, використані для вибірки з тіньової карти, обертаються випадковим чином з кожною ітерацією циклу PCF.

Ви також можете дослідити методи вирівнювання краю, такі як:

  • візуалізація тіньової карти в застосований MSAA фреймбуфер,
  • подальше підвищення PCF за допомогою інтерполяції ,
  • збільшення кількості зразків з тимчасовою сумішшю .

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

Інші більш досконалі методи тіньових карт включають:

  • Експоненціальні картки тіней та картки тіней для варіацій - у більшості випадків вони не страждають від прищів тіней і пропонують гладкі краї без блокади, але коштують деяких легких протікаючих ситуацій,
  • Експоненціальна карта варіаційних тіней - напевно, найдосконаліша техніка двовимірного картографування тіней на глибині, поєднує в собі велику плавність VSM та усуває витоки світла, удвічі зменшуючи витрату пам’яті,
  • Відсотки ближче м'яких тіней - основна техніка покращення традиційних карт тіней з різним розміром півтіні,
  • Multiview Shadow Maps - кілька тіньових карт певної техніки, розташованих на світлі області, для обчислення реалістичних м'яких тіней з різною величиною півтіні,
  • Карти глибоких тіней - для посилення об'ємного розсіювання тіней,
  • Промінь у реальному часі простежував тіні - можливо, майбутнє.

Ви не провалилися з PCF, це виглядає так :)

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


Частина цього коментаря дякує вам за вашу відповідь, тому я просто подумав, що повідомляю вас, оскільки звідси ви не отримаєте повідомлення.
трихоплакс

Так, я це бачив, але дякую.
нартекс

1

Ви сказали, що "... білінеарне фільтрування в текстурі ...". Здається, ви інтерполюєте значення глибини тіньової карти. Правильний спосіб використання інтерполяції з тіньовою картою - це застосувати її до результатів тіньових тестів (наскільки я пам’ятаю, OpenGL це підтримує). Можна навіть поєднати інтерполяцію результатів тіньових тестів з PCF, що дасть набагато кращі результати. Однак, як ви могли помітити, псевдонім - це чума, яка завжди проводить тіньове картографування :)

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


Дуже дякую за відповіді! Для отримання результатів, які я шукаю, можливо, буде доречно перейти на тіньові томи. Посилання кодового потоку, що надається в розділі "інтерполяція", дуже корисна - дякую!
Даніель М Гессел
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.