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.

Підробка глобального освітлення

Навіщо фальшиве глобальне освітлення?

Godot надає декілька методів глобального освітлення (GI), усі зі своїми перевагами та недоліками. Тим не менш, залишається можливість уникнути використання будь-якої техніки GI і замість цього використовувати підхід ручної роботи. Є кілька причин для використання «ручного» підходу до глобального освітлення замість VoxelGI, SDFGI або запечених карт світла:

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

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

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

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

Дивись також

Не впевнені, чи підробка глобального освітлення за допомогою вогнів відповідає вашим потребам? Перегляньте Яку техніку глобального освітлення слід використовувати? для порівняння методів GI, доступних у Godot 4.

Підробка глобального освітлення DirectionalLight3D

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

Ми можемо підробити це, додавши другий вузол DirectionalLight3D із такими змінами:

  • Поверніть світло на 180 градусів. Це дозволяє йому представляти освітлення, що відбивається головним вузлом DirectionalLight3D.

  • Установіть Тіні на Вимк.. Це зменшує навантаження на продуктивність додаткового світла, а також дозволяє затіненим ділянкам отримувати дещо освітлення (це те, що ми тут хочемо).

  • Встановіть Енергія на 10-40% від початкового значення. Немає «ідеального» значення, тому експериментуйте з різними значеннями енергії залежно від освітлення та типових кольорів матеріалу.

  • Встановіть Specular на 0.0. Непряме освітлення не повинно випромінювати видимих дзеркальних пелюсток, тому нам потрібно повністю вимкнути дзеркальне освітлення для вторинного світла.

Примітка

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

Це можна вирішити, плавно зменшуючи енергію вторинного DirectionalLight3D під час входу в приміщення (і роблячи навпаки, коли виходите з приміщення). Наприклад, цього можна досягти за допомогою вузла Area3D і AnimationPlayer.

Підробка позиційного світла глобального освітлення

Можна застосувати той самий підхід, що й DirectionalLight3D, для позиційних вогнів (OmniLight3D і SpotLight3D). Однак для цього знадобиться більше ручної роботи, оскільки цю операцію потрібно повторити для кожного позиційного світлового вузла в сцені, щоб виглядати добре.

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

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

У додатковому вузлі OmniLight3D виконайте такі зміни:

  • Збільште Діапазон світла на 25-50%. Це дозволяє вторинному світлу освітлювати те, що раніше не було освітлено вихідним світлом.

  • Установіть Тіні на Вимк.. Це зменшує навантаження на продуктивність додаткового світла, а також дозволяє затіненим ділянкам отримувати дещо освітлення (це те, що ми тут хочемо).

  • Встановіть Енергія на 10-40% від початкового значення. Не існує «ідеального» значення, тому експериментуйте з різними значеннями енергії залежно від освітлення та його оточення.

  • Встановіть для Specular значення 0. Непряме освітлення не повинно випромінювати видимих дзеркальних пелюсток, тому нам потрібно повністю вимкнути дзеркальне освітлення для вторинного світла.

Для SpotLight3D можна використати той самий прийом. У цьому випадку вторинний OmniLight3D має бути розміщений таким чином, щоб відбивати те місце, куди відбиватиметься найбільше світла. Зазвичай це близько до основного місця удару SpotLight3D.

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

../../../_images/faking_global_illumination_comparison.webp