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.

3D згладжування

Дивись також

Godot також підтримує згладжування у 2D-рендерінгу. Це описано на сторінці 2D згладжування.

Вступ

Через обмежену роздільну здатність сцени, відтворені в 3D, можуть мати артефакти накладення. Ці артефакти зазвичай проявляються як ефект «сходів» на краях поверхні (згладжування країв) і як мерехтіння та/або блискітки на відбивних поверхнях (дзеркальне згладжування).

У наведеному нижче прикладі ви можете помітити, як краї мають блоковий вигляд. Рослинність також мерехтить, а тонкі лінії на верхній частині коробки майже зникли:

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

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

Щоб боротися з цим, у Godot можна використовувати різні методи згладжування. Вони детально описані нижче.

Дивись також

Ви можете порівняти алгоритми згладжування в дії за допомогою демонстраційного проекту 3D згладжування.

Багатовибіркове згладжування (MSAA)

Це доступно в усіх рендерерах.

Ця техніка є «історичним» способом боротьби з псевдонімами. MSAA дуже ефективний на ребрах геометрії (особливо на вищих рівнях). MSAA не створює жодної розмитості.

MSAA доступний у 3 рівнях: 2×, 4×, 8×. Вищі рівні більш ефективні для згладжування країв, але є значно більш вимогливими. В іграх із сучасною графікою настійно рекомендується дотримуватися 2× або 4× MSAA, оскільки 8× MSAA зазвичай надто вимогливий.

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

Щоб пом’якшити накладання альфа-ножичних матеріалів, альфа-згладжування (також називається альфа-покриття) можна ввімкнути для певних матеріалів у властивостях StandardMaterial3D або ORMMaterial3D. Альфа-до покриття має помірні витрати на продуктивність, але він ефективний для зменшення накладень на прозорих матеріалах без будь-якої розмитості.

Щоб зробити дзеркальне накладення менш помітним, використовуйте Обмежувач шорсткості екранного простору, який увімкнено за замовчуванням.

MSAA можна ввімкнути в налаштуваннях проекту, змінивши значення параметра Rendering > Anti Aliasing > Quality > MSAA 3D. Важливо змінити значення параметра MSAA 3D, а не MSAA 2D, оскільки це абсолютно окремі налаштування.

Порівняння між відсутністю згладжування (ліворуч) і різними рівнями MSAA (праворуч). Зверніть увагу, що альфа-згладжування тут не використовується:

../../_images/antialiasing_msaa_2x1.webp ../../_images/antialiasing_msaa_4x1.webp ../../_images/antialiasing_msaa_8x1.webp

Часове згладжування (TAA)

Це доступно лише у засобах візуалізації Forward+, а не для мобільних і сумісних рендерів.

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

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

TAA створює невелике розмиття, якщо ввімкнено в нерухомих сценах, але цей ефект розмиття стає більш помітним, коли камера рухається. Іншим недоліком TAA є те, що він може демонструвати артефакти ореолу за рухомими об’єктами. Візуалізація з вищою частотою кадрів дозволить TAA зближуватися швидше, отже, роблячи ці ореоли менш помітними.

Тимчасове згладжування можна ввімкнути в налаштуваннях проекту, змінивши значення параметра Rendering > Anti Aliasing > Quality > TAA.

Порівняння між без згладжування (ліворуч) і TAA (праворуч):

../../_images/antialiasing_taa.webp

AMD FidelityFX Super resolution 2.2 (FSR2)

Це доступно лише у засобах візуалізації Forward+, а не для мобільних і сумісних рендерів.

Починаючи з Godot 4.2, існує вбудована підтримка`AMD FidelityFX Super Resolution <https://www.amd.com/en/products/graphics/technologies/fidelityfx/super-resolution.html>`__ 2.2. Це upscaling method, сумісний з усіма останніми графічними процесорами будь-якого виробника. FSR2 зазвичай призначений для підвищення продуктивності шляхом зниження внутрішньої роздільної здатності 3D-рендерінгу, а потім збільшення до вихідної роздільної здатності.

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

Використання FSR2 із рідною роздільною здатністю є більш вимогливим, ніж використання TAA із рідною роздільною здатністю, тому його використання рекомендується, лише якщо у вас є значний ресурс GPU. З іншого боку, FSR2 забезпечує краще покриття згладжування з меншою розмитістю порівняно з TAA, особливо в русі.

Порівняння між відсутністю згладжування (ліворуч) і FSR2 у рідній роздільній здатності (праворуч):

../../_images/antialiasing_fsr2_native.webp

Примітка

За замовчуванням для параметра проекту FSR Sharpness встановлено значення 0,2 (більше значення призводить до меншої різкості). Для порівняння підвищення різкості FSR було вимкнено шляхом встановлення значення 2.0 на знімку вище.

Швидке наближене згладжування (FXAA)

Це доступно лише в програмах візуалізації Forward+ і Mobile, а не в системі візуалізації Compatibility.

Швидке наближене згладжування — це рішення згладжування після обробки. Він працює швидше, ніж будь-який інший метод згладжування, а також підтримує прозорість згладжування. Однак, оскільки йому не вистачає тимчасової інформації, це не допоможе проти дзеркального псевдоніму.

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

FXAA створює помірну кількість розмиття, коли ввімкнено (більше, ніж TAA, коли камера нерухома, але менше, ніж TAA, коли камера рухається).

FXAA можна ввімкнути в налаштуваннях проекту, змінивши значення параметра Rendering > Anti Aliasing > Quality > Screen Space AA на FXAA.

Порівняння між без згладжування (ліворуч) і FXAA (праворуч):

../../_images/antialiasing_fxaa.webp

Морфологічне згладжування субпікселів (SMAA 1x)

Це доступно лише в програмах візуалізації Forward+ і Mobile, а не в системі візуалізації Compatibility.

Субпіксельне морфологічне антиаліасинг – це рішення для пост-обробки згладжування. Воно працює трохи повільніше, ніж FXAA, але створює менше розмиття. Це дуже корисно, коли роздільна здатність екрана 1080p або нижче. Як і FXAA, SMAA 1x не має часової інформації і тому не дуже добре зможе протидіяти дзеркальному аліасингу.

Використовуйте SMAA 1x, якщо ви не можете дозволити собі MSAA, але вважаєте FXAA занадто розмитим.

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

SMAA 1x можна ввімкнути в налаштуваннях проєкту, змінивши значення параметра Rendering > Anti Aliasing > Quality > Screen Space AA на SMAA.

Порівняння між без згладжування (ліворуч) та SMAA 1x (праворуч):

../../_images/antialiasing_smaa.webp

Надвибіркове згладжування (SSAA)

Це доступно в усіх рендерерах.

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

Недоліком SSAA є його надзвичайно висока вартість. Ця вартість зазвичай ускладнює використання SSAA для ігрових цілей, але ви все одно можете знайти суперсемплінг корисним для offline rendering.

Згладжування суперсемплінгу виконується шляхом збільшення значення розширеного налаштування проекту Rendering > Scaling 3D > Scale вище 1.0, при цьому для Rendering > Scaling 3D > Mode встановлено значення Bilinear (значення за замовчуванням). Оскільки коефіцієнт масштабування визначається для кожної осі, коефіцієнт масштабування 1.5 призведе до 2.25× SSAA, тоді як коефіцієнт масштабування 2.0 призведе до 4× SSAA. Оскільки Godot використовує власну білінійну фільтрацію обладнання для виконання даунсемплінгу, результат виглядатиме чіткішим при цілочисельних коефіцієнтах масштабування (а саме 2.0).

Порівняння між відсутністю згладжування (ліворуч) і різними рівнями SSAA (праворуч):

../../_images/antialiasing_ssaa_2.25x.webp ../../_images/antialiasing_ssaa_4x.webp

Попередження

Supersampling також має високі вимоги до оперативної пам’яті відео, оскільки він має відтворюватися в цільовій роздільній здатності, а потім зменшувати до розміру вікна. Наприклад, відображення проекту в 3840×2160 (роздільна здатність 4K) із 4× SSAA вимагатиме візуалізації сцени у 7680×4320 (роздільна здатність 8K), що в 4 рази більше пікселів.

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

Обмежувач шорсткості екранного простору

Це доступно лише в програмах візуалізації Forward+ і Mobile, а не в системі візуалізації Compatibility.

Це не метод згладжування країв, але спосіб зменшення дзеркального згладжування в 3D.

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

Обмежувач шорсткості екранного простору ввімкнено за замовчуванням; це не вимагає ручного налаштування. Це має невеликий вплив на продуктивність, тому подумайте про його відключення, якщо на ваш проект не впливає сильно дзеркальний псевдонім. Його можна вимкнути за допомогою параметра проекту Відтворення > Якість > Фільтри екранного простору > Обмеження шорсткості екранного простору.

Обмежувач шорсткості текстури при імпорті

Як і обмежувач шорсткості екранного простору, це не метод згладжування країв, але спосіб зменшення дзеркального згладжування в 3D.

Обмеження шорсткості під час імпорту працює, вказуючи карту нормалей, яка використовується як орієнтир для обмеження шорсткості. Для цього виберіть карту шорсткості в док-станції FileSystem, перейдіть до док-станції Імпорт і встановіть Шорсткість > Режим для каналу кольорів, у якому зберігається карта шорсткості (зазвичай Зелений), а потім установіть шлях до карти нормалей матеріалу. Не забудьте натиснути Повторний імпорт у нижній частині панелі імпорту після встановлення шляху до карти нормалей.

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

Яку техніку згладжування слід використовувати?

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

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

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

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

Godot дозволяє одночасно використовувати кілька методів згладжування. Зазвичай це непотрібно, але воно може забезпечити кращі візуальні ефекти на графічних процесорах високого класу або для non-real-time rendering не в реальному часі. Наприклад, щоб рухомі краї виглядали краще, коли ввімкнено TAA, ви також можете одночасно ввімкнути MSAA.

Порівняння згладжування

Особливість

MSAA

TAA

FSR2

FXAA

SMAA 1x

SSAA

SSRL

Згладжування країв

🟢 Так

🟢 Так

🟢 Так

🟢 Так

🟢 Так

🟢 Так

🔴 Ні

Дзеркальне згладжування

🟡 Деякі

🟢 Так

🟢 Так

🟡 Деякі

🟡 Деякі

🟢 Так

🟢 Так

Згладжування прозорості

🟡 Деякі [1]

🟢 Так [2]

🟢 Так [2]

🟢 Так

🟢 Так

🟢 Так

🔴 Ні

Додано розмиття

🟢 Жодного

🟡 Деякі

🟡 Деякі

🟡 Деякі

🟢 Низький

🟡 Деякі [3]

🟢 Жодного

Привиди артефактів

🟢 Жодного

🔴 Так

🔴 Так

🟢 Жодного

🟢 Жодного

🟢 Жодного

🟢 Жодного

Вартість продуктивності

🟡 Середній

🟡 Середній

🔴 Високий

🟢 Дуже низький

🟢 Низький

🔴 Дуже висока

🟢 Низький

вперед+

✔️ Так

✔️ Так

✔️ Так

✔️ Так

✔️ Так

✔️ Так

✔️ Так

Мобільний

✔️ Так

❌ Ні

❌ Ні

✔️ Так

✔️ Так

✔️ Так

✔️ Так

Сумісність

✔️ Так

❌ Ні

❌ Ні

❌ Ні

❌ Ні

✔️ Так

❌ Ні