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.
Checking the stable version of the documentation...
3D світло та тіні
Вступ
Джерела світла випромінюють світло, яке змішується з матеріалами і дає видимий результат. Світло в сцені може виходити з декількох типів джерел:
Від самого матеріалу, у вигляді кольору випромінювання (хоча це не впливає на сусідні об’єкти, якщо не ввімкнено непряме освітлення запеченого або екранного простору).
Світлові вузли: DirectionalLight3D, OmniLight3D і SpotLight3D.
Навколишнє освітлення в Environment або Зонди відображень.
Глобальне освітлення (LightmapGI, VoxelGI або SDFGI).
Колір випромінювання є властивістю матеріалу. Ви можете прочитати більше про це в посібнику Standard Material 3D і ORM Material 3D.
Дивись також
Ви можете порівняти різні типи світла в дії за допомогою демонстраційного проекту 3D Lights and Shadows <https://github.com/godotengine/godot-demo-projects/tree/master/3d/lights_and_shadows>`__.
Вузли світла
Існує три типи світлових вузлів: DirectionalLight3D, class_OmniLight3D і class_SpotLight3D. Давайте розглянемо загальні параметри світильників:
Кожна властивість має певну функцію:
Колір: Основний колір випромінюваного світла.
Енергія: Коефіцієнт енергії. Це корисно для насиченого світла або роботи з Освітлення з високим динамічним діапазоном.
Непряма енергія: Вторинний множник, який використовується з непрямим світлом (світло відбивається). Це працює з Використання глобального освітлення Lightmap, VoxelGI або SDFGI.
Об'ємна енергія туману: Вторинний помножувач, який використовується з об’ємним туманом. Це діє лише тоді, коли ввімкнено об’ємний туман.
Негативний: Світло стає субтрактивним, а не додатковим. Іноді корисно вручну компенсувати деякі темні кути.
Specular: Впливає на інтенсивність дзеркальної плями в об’єктах, на які впливає це світло. При нульовому рівні це світло стає чистим розсіяним світлом.
Режим запікання: Встановлює режим запікання для світла. Дивіться Використання глобального освітлення Lightmap.
Cull Mask: це світло впливатиме на об’єкти, які знаходяться у вибраних шарах нижче. Зауважте, що об’єкти, вимкнені за допомогою цієї маски відбракування, усе одно відкидають тіні. Якщо ви не хочете, щоб вимкнені об’єкти відкидали тінь, налаштуйте властивість Cast Shadow у GeometryInstance3D до потрібного значення.
Дивись також
Перегляньте Блоки фізичного освітлення та камери, якщо ви бажаєте використовувати реальні одиниці для налаштування інтенсивності освітлення та колірної температури.
Обмеження кількості легких
Використовуючи рендерер Forward+, Godot використовує підхід кластеризації для освітлення в реальному часі. Можна додати скільки завгодно світильників (за умови, що це дозволяє продуктивність). Проте все ще існує обмеження за замовчуванням у 512 згрупованих елементів, які можуть бути присутніми в поточному поданні камери. Кластерним елементом є всесвітній світильник, прожектор, decal або reflection probe. Цей ліміт можна збільшити, налаштувавши Max Clustered Elements в Project Settings > Rendering > Limits > Cluster Builder.
Під час використання Mobile Renderer існує обмеження 8 OmniLights + 8 SpotLights на ресурс сітки. Існує також обмеження в 256 OmniLights + 256 SpotLights, які можна відобразити в поточному поданні камери. Наразі ці обмеження не можна змінити.
У разі використання рендерера сумісності можна відобразити до 8 OmniLights + 8 SpotLights на один ресурс сітки. Цей ліміт можна збільшити в розширених налаштуваннях проекту, налаштувавши Max Renderable Elements та/або Max Lights per Object у Відтворення > Обмеження > OpenGL за рахунок зниження продуктивності та довшого часу компіляції шейдера. Ліміт також можна зменшити, щоб скоротити час компіляції шейдера та трохи підвищити продуктивність.
За допомогою всіх методів візуалізації одночасно може бути видно до 8 DirectionalLights. Проте кожен додатковий DirectionalLight із увімкненими тінями зменшить ефективну роздільну здатність тіні кожного DirectionalLight. Це пояснюється тим, що атлас спрямованої тіні спільний для всіх джерел світла.
Якщо ліміт візуалізації перевищено, під час руху камери почнуть з’являтися та зникати вогні, що може відволікати увагу. Увімкнення Distance Fade на світлових вузлах може допомогти зменшити цю проблему, а також підвищити продуктивність. Розбиття сіток на менші частини також може допомогти, особливо для геометрії рівнів (що також покращує ефективність відсіву).
Якщо вам потрібно відобразити більше світла, ніж можливо в даному рендерері, подумайте про використання baked lightmaps з режимом запікання світла Статичний. Це дає змогу повністю запекти світло, що також значно пришвидшує їх рендеринг. Ви також можете використовувати емісійні матеріали з будь-якою технікою global illumination як заміну світлових вузлів, які випромінюють світло на велику площу.
Відображення тіней
Світло може при потребі відкидати тіні. Це дає йому більшого реалізму (світло не досягає прихованих областей), але збільшує навантаження на продуктивність. Існує список загальних параметрів тіні для кожного світла:
Увімкнено: поставте прапорець, щоб увімкнути відображення тіней у цьому освітленні.
Непрозорість: закриті області затемнюються цим коефіцієнтом непрозорості. За замовчуванням тіні повністю непрозорі, але це можна змінити, щоб зробити тіні напівпрозорими для даного освітлення.
Зміщення: якщо цей параметр занизький, відбувається самозатінення. Коли занадто високо, тіні відокремлюються від роликів. Виберіть те, що вам найкраще підходить.
Нормальне зміщення: Якщо цей параметр занизький, відбувається самозатінення. Коли занадто високо, тіні від коліщаток виглядають неправильно. Виберіть те, що вам найкраще підходить.
Зміщення коефіцієнта пропускання: Якщо цей параметр занизький, відбувається самозатінення матеріалів, для яких увімкнено коефіцієнт пропускання. Якщо значення занадто високе, тіні не впливатимуть на матеріали, у яких постійно ввімкнено пропускання. Виберіть те, що вам найкраще підходить.
Зворотне відбраковане обличчя: Деякі сцени працюють краще, коли відображення тіней рендериться з перевернутим видаленням обличчя.
Розмиття: збільшує радіус розмиття тіні для цього світла. Це працює як із традиційним відображенням тіні, так і з тінями, що зміцнюють контакт (світла з Кутовою відстанню або Розміром, які перевищують
0,0). Вищі значення призводять до м’якших тіней, які також виглядатимуть більш стабільними у часі для рухомих об’єктів. Недоліком збільшення розмиття тіні є те, що це зробить зернистий візерунок, який використовується для фільтрації, більш помітним. Дивіться також Режим тіньового фільтра.Маска заклинача: Тіні відкидаються лише об’єктами в цих шарах. Зверніть увагу, що ця маска не впливає на те, на які об’єкти відкидаються тіні.
Налаштування тіньового зміщення
Нижче наведено зображення того, як виглядає упередження налаштування. Значення за замовчуванням працюють у більшості випадків, але загалом це залежить від розміру та складності геометрії.
Якщо Shadow Bias або Shadow Normal Bias встановлено надто низько для даного освітлення, тінь буде «розмазано» по об’єктах. Це призведе до того, що передбачуваний вигляд світла буде затемнений, і це називається тіньові прищі:
З іншого боку, якщо Shadow Bias або Shadow Normal Bias встановлено занадто високо для певного освітлення, тінь може виглядати від’єднаною від об’єкта. Це називається пітер-панінг:
Загалом перевага надається збільшенню Нормального зміщення тіні, аніж збільшення Зміщення тіні. Збільшення Shadow Normal Bias не спричиняє стільки жорстокості, як збільшення Shadow Bias, але воно все одно може ефективно вирішити більшість проблем із тіньовими прищами. Недоліком збільшення Звичайного зсуву тіні є те, що воно може зробити тіні для певних об’єктів тоншими.
Будь-які проблеми зі зміщенням можна виправити, increasing the shadow map resolution ціною зниження продуктивності.
Примітка
Налаштовувати параметри відображення тіней – це ціле мистецтво – не існує налаштувань, які б підходили всім. Щоб отримати найкращі візуальні ефекти, вам може знадобитися використовувати різні значення зміщення тіні для кожного світла.
Примітка щодо змін зовнішнього вигляду: увімкнувши тіні на світлі, майте на увазі, що зовнішній вигляд світла може змінитися порівняно з тим, коли воно відтворюється без тіней у сумісному рендерері. Через обмеження старіших мобільних пристроїв тіні реалізуються за допомогою підходу багатопрохідної візуалізації, тому світло з тінями відтворюється в просторі sRGB замість лінійного простору. Ця зміна простору візуалізації іноді може кардинально змінити зовнішній вигляд світла. Щоб отримати подібний вигляд до незатіненого світла, вам може знадобитися відрегулювати налаштування енергії світла.
Спрямоване світло
Найпоширеніший тип світла, являє собою дуже далеке джерело світла (наприклад, Сонце). Це також найлегше світло для обчислення і його слід використовувати всюди де можливо (хоча у нього не найлегше для обчислення відображення тіней, але про це пізніше).
Спрямоване світло моделює нескінченну кількість паралельних світлових променів, що охоплюють всю сцену. Спрямований світловий вузол представлений великою стрілкою, яка вказує напрямок світлових променів. При цьому положення вузла зовсім не впливає на освітлення і він може бути де завгодно.
Кожне обличчя, на лицьову сторону якого потрапляють промені світла, освітлюється, а інші залишаються темними. На відміну від більшості інших типів світла, спрямоване світло не має певних параметрів.
Спрямоване світло також пропонує властивість Кутової відстані, яка визначає кутовий розмір світла в градусах. Збільшення цього значення вище 0.0 зробить тіні м'якшими на більших відстанях від джерела світла, а також вплине на вигляд сонця в процедурних матеріалах неба. Це називається контактно-зміцнювальною тінню (також відомою як PCSS).
Для довідки, кутова відстань Сонця від Землі становить приблизно 0,5. Цей тип тіні є дорогим, тому перевірте рекомендації в Рекомендації PCSS, якщо встановлюєте це значення вище 0.0 для світла з увімкненими тінями.
Відображення тіней для спрямованого світла
Щоб обчислити карти тіней, сцена рендериться (тільки глибина) з ортогональної точки зору, яка охоплює всю сцену (або до максимальної відстані). Однак у цьому підході є проблема, оскільки об’єкти, розташовані ближче до камери, отримують тіні з низькою роздільною здатністю, які можуть здаватися блоковими.
Щоб виправити це, використовується техніка під назвою Паралельно розділені тіньові карти (PSSM). Це розбиває кут зору на 2 або 4 області. Кожна область отримує власну карту тіней. Це дозволяє невеликим ділянкам поблизу глядача мати таку саму роздільну здатність тіні, що й величезна віддалена область. Якщо для DirectionalLight3D увімкнено тіні, режимом тіні за замовчуванням є PSSM із 4 розділеннями. У сценаріях, коли об’єкт достатньо великий, щоб з’явитися в усіх чотирьох розділах, це призводить до збільшення кількості викликів малювання. Зокрема, такий об’єкт буде відрендерено п’ять разів: один раз для кожного з чотирьох розділень тіні та один раз для остаточного рендерингу сцени. Це може вплинути на продуктивність, розуміння цієї поведінки важливо для оптимізації вашої сцени та керування очікуваннями продуктивності.
В результаті тіні стають детальнішими і гладкішими:
Техніка PSSM керується рядом параметрів:
Кожна розділена відстань контролюється відносно дальньої відстані камери (або тіні Максимальна відстань, якщо більше 0.0). 0.0 - це положення очей, а 1.0 - це те, де тінь закінчується на відстані. Розколи є проміжними. Значення за замовчуванням, як правило, працюють добре, але трішки налаштувати перше розділення є звичайним, щоб надати більше деталей близьким об’єктам (як персонаж у грі від третьої особи).
Завжди встановлюйте тінь Максимальна відстань відповідно до потреб сцени. Менша максимальна відстань призведе до кращого вигляду тіней і кращої продуктивності, оскільки менше об’єктів потрібно буде включити до візуалізації тіней. Ви також можете налаштувати Початок зникнення, щоб контролювати, наскільки агресивним має бути згасання тіні на відстані. Для сцен, де Максимальна відстань повністю охоплює сцену в будь-якому заданому положенні камери, ви можете збільшити Початок згасання до 1.0, щоб запобігти згасанню тіні на відстані. Цього не слід робити в сценах, де Максимальна відстань не покриває сцену повністю, оскільки тінь буде здаватися раптово обрізаною на відстані.
Іноді перехід між розділенням і наступним може виглядати погано. Щоб виправити це, можна ввімкнути опцію Blend Splits, яка приносить шкоду деталізації та продуктивності в обмін на плавніші переходи:
Параметр Тінь > Нормальне зміщення можна використовувати для виправлення особливих випадків самозатінення, коли об’єкти перпендикулярні до світла. Єдиний недолік - це робить тінь трохи тоншою. Подумайте про збільшення параметра Тінь > Нормальне зміщення, перш ніж збільшувати Тінь > Зсув у більшості ситуацій.
Нарешті, Розмір млинця — це властивість, яку можна налаштувати, щоб виправити відсутні тіні під час використання великих об’єктів із нерозділеними сітками. Змінюйте це значення, лише якщо ви помітили відсутні тіні, які не пов’язані з проблемами зміщення тіней.
Світло навсібіч
Світло навсібіч це точка, яка випромінює світло сферично на всі сторони в межах вказаного радіуса.
У реальному житті загасання світла є зворотною функцією, а це означає, що світла навсібіч не мають радіуса. Це проблема, тому що це означає, що обчислення декількох джерел такого світла, стане вимогливим.
Щоб вирішити цю проблему, введено параметр Діапазон разом із функцією ослаблення.
Ці два параметри дозволяють налаштувати візуальну роботу світла і знайти естетично приємні результати.
Параметр Size також доступний в OmniLight3D. Збільшення цього значення змусить світло зникати повільніше, а тіні виглядатимуть розмитішими на великій відстані від заклинателя. Це можна використовувати для імітації місцевого освітлення певною мірою. Це називається тінню контактного зміцнення (також відома як PCSS). Цей тип тіні є дорогим, тому перевірте рекомендації в Рекомендації PCSS, якщо встановлюєте це значення вище 0.0 для світла з увімкненими тінями.
Відображення тіней світла навсібіч
Відображення тіней світла навсібіч відносно просте. Основною проблемою, яку необхідно розглянути, є алгоритм, який використовується для візуалізації.
Омні-тіні можна відобразити як Подвійний параболоїд або Куб. Подвійний параболоїд відтворюється швидко, але може спричиняти деформації, тоді як Куб є правильнішим, але повільнішим. За замовчуванням використовується Куб, але подумайте про зміну його на Подвійний параболоїд для джерел світла, де він не має великого візуального впливу.
Якщо об’єкти, які відображаються, здебільшого неправильні та поділені, зазвичай достатньо подвійного параболоїда. У будь-якому випадку, оскільки ці тіні зберігаються в атласі тіней (детальніше про це в кінці), це може не вплинути на продуктивність для більшості сцен.
Всесвітники з увімкненими тінями можуть використовувати проектори. Текстура проектора помножить колір світла на колір у певній точці текстури. Як наслідок, світло зазвичай виглядає темнішим після призначення текстури проектора; ви можете збільшити Енергію, щоб компенсувати це.
Текстури проектора Omni Light вимагають спеціального відображення панорами на 360°, подібного до текстур class_PanoramaSkyMaterial.
З наведеною нижче текстурою проектора можна отримати такий результат:
Порада
Якщо ви придбали омні-проектори у формі кубичних зображень, ви можете використати цей веб-інструмент перетворення для їх перетворення до одного панорамного зображення.
Обмежене світло
Точкові світильники схожі на всесвітні, за винятком того, що вони випромінюють світло лише в конус (або "обрізаний" напрямок). Вони корисні для імітації ліхтариків, автомобільних фар, відбивачів, прожекторів тощо. Цей тип світла також послаблюється в напрямку, протилежному напрямку, куди він спрямований.
Точкові світильники мають ті самі Діапазон, Згасання та Розмір, що й OmniLight3D, і додають два додаткові параметри:
Кут: Кут апертури світла.
Зменшення кута: Послаблення конуса, яке допомагає пом’якшити межі конуса.
Відображення тіней від обмеженого світла
Точкові світла мають ті ж параметри для мапування тіней, що й омні-світла. Рендеринг точкових мап тіней значно швидший порівняно з омні-світлами, оскільки потрібно відрендерити лише одну текстуру тіні (замість рендерингу 6 граней або 2 у режимі подвійного параболоїда).
Точкові світильники з увімкненими тінями можуть використовувати проектори. Текстура проектора помножить колір світла на колір у певній точці текстури. Як наслідок, світло зазвичай виглядає темнішим після призначення текстури проектора; ви можете збільшити Енергію, щоб компенсувати це.
На відміну від проекторів omni light, текстура проектора з точковим світлом не потребує спеціального формату, щоб виглядати правильно. Його буде зіставлено подібно до decal.
З наведеною нижче текстурою проектора можна отримати такий результат:
Примітка
Прожектори з широкими кутами матимуть тіні нижчої якості, ніж прожектори з вузькими кутами, оскільки карта тіней поширюється на більшу поверхню. При кутах більше 89 градусів точкові світлі тіні повністю перестануть працювати. Якщо вам потрібні тіні для ширшого світла, використовуйте натомість універсальне світло.
Area light
Sometimes, you want lighting to come from a large area instead of a single point. Area lights are useful for simulating soft, diffuse lighting, such as light coming from a window or a lit billboard. This type of light is expensive to render in real-time, so it should be used sparingly, especially when shadows are enabled.
Godot provides the AreaLight3D node for this purpose, which emits light from a rectangular area. The node only emits light and has no other visual representation in the scene. The screenshots below use a class_Sprite3D node as a child of the area light for visualization purposes.
Area lights can also cast shadows, with variable penumbra simulated using
PCSS by default. The size
of this penumbra can be controlled with the Light3D Size property. This
effect can be quite demanding, so it can be turned off by setting Size to
0.0.
Примітка
Shadows cast by an area light may look incorrect if the object casting shadows doesn't have enough subdivisions and it's very close to the area light. This is the same limitation as Dual Paraboloid shadow mode on an omni light.
Примітка
Since area lights are difficult to simulate in a real-time rasterized renderer, they come with a number of limitations.
For small light sources, you will likely get better results when using point lights. Shadows from area lights are crude approximations, as they are calculated as if they were point lights, and may appear to be distorted at the edges. To get a better result, make sure the meshes in the light's range are sufficiently subdivided.
Area lights suffer from light leaking on the backside of geometry closely in front of them at grazing angles, so be careful with where you place them.
Lastly, not all material features are fully supported; area lights are practically limited to Lambertian diffuse and GGX specular shading, while anisotropic materials will appear as if isotropic. Vertex shading is also not implemented for area lights.
Area lights emit light in a rectangular area defined by the Area > Size
property (not to be confused with the generic Light3D Size property). To get
a physically accurate result, you should resize this area to match the size of
the real-life light source you are trying to simulate. For example, if you are
simulating a 1-meter neon tube that is 10 centimeters wide, set the area
size to (1, 0.1) and adjust the energy accordingly.
By default, the light's energy is normalized: the larger the area, the weaker the light. This allows you to change the area size without needing to adjust the energy to compensate, which is useful for animation. You can disable this behavior by unchecking Area > Normalize Energy if you want the energy to be independent of the area size.
The rectangular area can optionally be textured. This can be effectively used to change the light's shape into any 2D shape, or tint it in different colors. The texture's alpha channel is treated as black (no light coming through). The area light's texture will be visible in reflections according to the surface's roughness. This behavior is different from omni/spot projectors, as it does not project the texture directly onto all diffuse lighting.
When using a textures that are transparent or black toward the edges, you might want to leave a gap of a few pixels to make sure the texture is blurred smoothly.
Примітка
Changing the area light's texture at runtime can be expensive, especially if the texture is large.
To reduce the performance impact of switching textures at runtime, make sure each dimension of an area texture is either a multiple of 128 pixels, or a power of two. This removes the need for a scaling pass, which slows down texture changes. The textures don't necessarily have to be square to be optimal. Examples of optimal texture sizes include 32×64, 128×128, and 256×384.
Textured area lights are not supported in the Compatibility renderer.
Атлас тіней
На відміну від спрямованих світильників, які мають власну текстуру тіні, універсальні та точкові світильники призначаються для слотів атласу тіней. Цей атлас можна налаштувати в розширених параметрах проекту (Відтворення > Світло та тіні > Позиційна тінь).
Роздільна здатність стосується всього тіньового атласу. Цей атлас поділений на чотири квадранти:
Кожен квадрант може бути розділений на частини будь-якої кількості карт відображення тіней; нижче наведено поділ за замовчуванням:
Тіньовий атлас розподіляє простір таким чином:
Найбільший розмір карти тіней (якщо не використовується підрозділ) представляє світло розміром з екран (або більше).
Підрозділи (менші карти) представляють тіні для вогнів, які знаходяться далі від поля зору та пропорційно менші.
Кожен кадр, наступна процедура виконується для кожного світла:
Перевіряється, чи є світло на полі правильного розміру. Якщо ні, світло перемальовується наново і переміщується на більше/менше поле.
Перевіряється, чи змінився будь-який об'єкт, що впливає на відображення тіні. Якщо так, то знову перемальовується світло.
Якщо нічого з перерахованого не сталося, нічого не робиться, і тінь залишається без змін.
Якщо слоти в квадранті заповнені, вогні повертаються до менших слотів залежно від розміру та відстані. Якщо всі слоти в усіх квадрантах заповнені, деякі світильники не зможуть відобразити тіні, навіть якщо на них увімкнено тіні.
Стратегія розподілу тіней за замовчуванням дозволяє відтворювати до 88 джерел світла з увімкненими тінями в кутку камери (4 + 4 + 16 + 64):
Перший і найбільш детальний квадрант може зберігати 4 тіні.
Другий квадрант може зберігати 4 інші тіні.
Третій квадрант може зберігати 16 тіней з меншою кількістю деталей.
Четвертий і найменш деталізований квадрант може зберігати 64 тіні з ще меншою кількістю деталей.
Використання більшої кількості тіней на квадрант дозволяє підтримувати більшу кількість світла з увімкненими тінями, а також покращує продуктивність (оскільки тіні відображатимуться з нижчою роздільною здатністю для кожного світла). Однак збільшення кількості тіней на квадрант відбувається за рахунок зниження якості тіней.
У деяких випадках ви можете використовувати іншу стратегію розподілу. Наприклад, у грі «згори вниз», де всі вогні приблизно однакового розміру, ви можете налаштувати всі квадранти на однакові підрозділи, щоб усі вогні мали тіні однакового рівня якості.
Баланс продуктивності та якості
Візуалізація тіні є важливою темою для продуктивності 3D-рендерінгу. Тут важливо зробити правильний вибір, щоб уникнути створення вузьких місць.
Параметри якості спрямованої тіні можна змінити під час виконання, викликавши відповідні методи class_RenderingServer.
Позиційні (універсальні/точкові) налаштування якості тіні можна змінити під час виконання в корені class_Viewport.
Розмір карти тіней
Висока роздільна здатність тіней призводить до більш різких тіней, але зі значною вартістю продуктивності. Слід також зазначити, що різкіші тіні не завжди є більш реалістичними. У більшості випадків для графічних процесорів нижчого класу слід залишити значення за замовчуванням 4096 або зменшити його до 2048.
Якщо позиційні тіні стають надто розмитими після зменшення розміру карти тіней, ви можете протидіяти цьому, налаштувавши квадранти shadow atlas, щоб вони містили менше тіней. Це дозволить відобразити кожну тінь із вищою роздільною здатністю.
Режим тіньового фільтра
Тут можна вибрати кілька параметрів якості карти тіней. За замовчуванням М’який низький — це хороший баланс між продуктивністю та якістю для сцен із детальними текстурами, оскільки деталізація текстури допоможе зробити малюнок згладжування менш помітним.
Однак у проектах із менш деталізованими текстурами візерунок згладжування тіні може бути більш помітним. Щоб приховати цей шаблон, ви можете або ввімкнути Часове згладжування (TAA), AMD FidelityFX Super resolution 2.2 (FSR2), Швидке наближене згладжування (FXAA), або збільшити якість тіньового фільтра до Soft Medium або вище.
Налаштування М’який, дуже низький автоматично зменшить розмиття тіні, щоб зробити артефакти з низької кількості зразків менш помітними. І навпаки, параметри Soft High і Soft Ultra автоматично збільшать розмиття тіні, щоб краще використовувати збільшену кількість зразків.
16-біт проти 32-біт
За замовчуванням Godot використовує 16-бітні текстури глибини для візуалізації карти тіней. Це рекомендовано в більшості випадків, оскільки воно працює краще без помітної різниці в якості.
Якщо 16 біт вимкнено, замість нього використовуватимуться 32-бітні текстури глибини. Це може призвести до зменшення артефактів у великих сценах і великому освітленні з увімкненими тінями. Однак різниця часто ледве помітна, але це може мати значні витрати на продуктивність.
Відстань світла/тіні зникає
OmniLight3D і SpotLight3D пропонують кілька властивостей для приховування віддаленого світла. Це може значно покращити продуктивність у великих сценах із десятками чи більше джерел світла.
Увімкнено: контролює, чи ввімкнено згасання відстані (форма LOD). Світло гасне над Початком + Довжиною, після чого його буде відбраковано та взагалі не надсилатиметься до шейдера. Використовуйте це, щоб зменшити кількість активних джерел світла в сцені та таким чином покращити продуктивність.
Початок: Відстань від камери, на якій світло починає згасати (у 3D-одиницях).
Тінь: відстань від камери, на якій тінь починає зникати (у 3D-одиницях). Це можна використовувати, щоб швидше зникати тіні порівняно зі світлом, що ще більше покращує продуктивність. Доступно, лише якщо для світла ввімкнено тіні.
Довжина: відстань, на якій зникають світло й тінь (у 3D-одиницях). Світло повільно стає більш прозорим на цій відстані і стає зовсім невидимим у кінці. Вищі значення призводять до більш плавного переходу згасання, що більше підходить, коли камера рухається швидко.
Рекомендації PCSS
М’які тіні (PCSS) забезпечують більш реалістичне відображення тіні, причому розмір півтіні змінюється залежно від відстані між заливником і поверхнею, на яку потрапляє тінь. Це пов’язано з високою вартістю продуктивності, особливо для спрямованого світла.
Щоб уникнути проблем із продуктивністю, рекомендується:
Використовуйте лише декілька джерел світла з увімкненими тінями PCSS у певний час. Ефект, як правило, найбільш помітний на великих яскравих лампах. Додаткові джерела світла, які є слабкішими, зазвичай не отримують особливої користі від використання тіней PCSS.
Надайте налаштування для користувачів, щоб вимкнути тіні PCSS. Для спрямованих вогнів це можна зробити, встановивши властивість
light_angular_distanceDirectionalLight3D на0.0у сценарії. Для позиційних вогнів це можна зробити, встановивши властивістьlight_sizeOmniLight3D або SpotLight3D на0.0у сценарії.
Режим фільтра проектора
Спосіб візуалізації проекторів також впливає на продуктивність. Розширене налаштування проекту Візуалізація > Текстури > Світлові проектори > Фільтр дозволяє керувати фільтрацією текстур проектора. Найближчий/лінійний не використовує mip-карти, що робить їх рендеринг швидшим. Однак на відстані проектори виглядатимуть зернистими. Найближчі/лінійні Mipmaps виглядатимуть гладкішими на відстані, але проектори виглядатимуть розмитими, якщо дивитися під похилими кутами. Цю проблему можна вирішити за допомогою Найближчого/Лінійного анізотропного відображення Mipmaps, який є найякіснішим, але й найдорожчим режимом.
Якщо ваш проект має стиль піксельного мистецтва, спробуйте встановити для фільтра одне зі значень Найближчий, щоб проектори використовували фільтрацію найближчих сусідів. В іншому випадку дотримуйтесь Linear.