top of page

Ще трішки кращий SSAO [Update]

Недавно помітив, що в Unity URP контактне затемнення зроблемо правильно - створення маски, котра потім використовуєтсья для блокування лише відбитого світла, а не прямого. Проте, воно все ще виглядає не прородньо. Що нагадало мені про ще один корисний прийом. Знизу ви побачите демонстрацію екранного затемнення в Savage Turret.

Зображення з Екранним Контактним Затемненням чомусь має яскравіші елементи, ніж зораження без затемнення. Це тому, що контактне затемнення, у моємо пайплайні, також змінює Attenuation коефіцієнт. В результаті сонячне світло падає на поверхні "в екранному затемнені" навіть якщо ця поверхня не дивиться на сонце.

Раціоналізація наступна:

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


Маска контактного затемнення

В звичайний день тижня SSAO або HBAO (Horizon Based Ambient Occlusion) нададуть деякої глибини ігровим моделям. Але для тренованого ока будуть виглядати як чорні плями поверх зображення, які хочеться зменшувати допоки ефект не зникне повністю.

Проте життя дає всьому другий шанс, і екранно-просторове контактне затемнення може радувати вас і в еру Unreal Engine Lumen.

Зазвичай для генерування контактних тіней використовують глибину: речі, котрі далеко від камери, є "глибшими". Фільтр шукає в цій глибині "щилини" - регіони, котрі є глибшими за сусідні. Потім ці "щілини" і стають нашою маскою для затінення.

Саме це зробив і я, жодних іновацій, скопіював та додав. Ну майже... Головною відмінністю є другий крок...


Спочатку вкрутимо ефект на максимум, щоб ми точно розуміли про що йде мова.


Це без затемнення:


З затемненням:


Жахливо, чи не так?

Тепер я поміняю кут падіння сонячних променів щоб ОСВІТИТИ різницю між традиційним підходом і цим:

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

[Update] Наразі воно стає навіть яскравішим (Коефіцієнт втрати яскравості в залежності від кута зменьшується. Тобто ми все слідуємо Закону Збереження Енергії).


Переваги

Окрім більш правильного освітлення, ще однією перевагою є можливість використання маски контактних тіней щоб зменшити відбите світло. На зеркальних обєктах я "ховаю" відбиття якщо кількість затемнення більша певно межі:

Без котактних тіней:


Щоб порівняння було максимально обєктивним, вимнемо також запечене світло, котре частково дублює ефект контактних тіней. З Контактними тінями (без запеченого світла):

Без контактних тіней:


Підсумок

Та й таке.


Всі інші статті у блозі писав англійською. Стало цікаво скільки людей побачить статтю якщо напишу рідною соловїною.


Comments


bottom of page