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 зіткнення частинок
Оскільки частинки GPU повністю обробляються GPU, вони не мають доступу до фізичного світу гри. Якщо вам потрібні частинки для зіткнення з навколишнім середовищем, ви повинні налаштувати вузли зіткнення частинок. Їх чотири: GPUParticlesCollisionBox3D, GPUParticlesCollisionSphere3D, GPUParticlesCollisionSDF3D і GPUParticlesCollisionHeightField3D.
Загальні властивості
Загальні властивості зіткнення
Є деякі властивості, які можна знайти на всіх вузлах зіткнення. Вони розташовані в розділі GPUParticlesCollision3D інспектора.
Властивість Cull Mask контролює, на які системи частинок впливає вузол зіткнення, на основі visibility layers. Система частинок стикається з вузлом зіткнення, лише якщо принаймні один із шарів видимості системи ввімкнено в масці відбракування колайдера.
Зіткнення ящиків
Зіткнення коробок у списку вузлів
Вузли зіткнення ящиків мають форму суцільного прямокутного ящика. Ви контролюєте їх розмір за допомогою властивості Extents. Протяжність прямокутника завжди вимірює половину сторін його меж, тому значення (X=1.0,Y=1.0,Z=1.0) створює прямокутник шириною 2 метри з кожного боку. Коробкові вузли зіткнення корисні для імітації геометрії підлоги та стіни, з якою мають стикатися частинки.
Щоб створити вузол зіткнення коробок, додайте новий дочірній вузол до вашої сцени та виберіть GPUParticlesCollisionBox3D зі списку доступних вузлів. Ви можете анімувати положення прямокутника або приєднати його до рухомого вузла для більш динамічних ефектів.
Дві системи частинок стикаються з вузлом зіткнення коробки
Зіткнення сфери
Зіткнення сфер у списку вузлів
Вузли зіткнення сфери мають форму суцільної сфери. Властивість Radius керує розміром сфери. Хоча вузли зіткнення коробок не обов’язково повинні бути ідеальними кубами, вузли зіткнення сфери завжди будуть сферами. Якщо ви хочете встановити ширину незалежно від висоти, вам потрібно змінити властивість Scale у розділі Node3D.
Щоб створити сферичний вузол зіткнення, додайте до сцени новий дочірній вузол і виберіть GPUParticlesCollisionSphere3D зі списку доступних вузлів. Ви можете анімувати положення сфери або прикріпити її до рухомого вузла для більш динамічних ефектів.
Дві системи частинок стикаються з вузлом зіткнення сфери
Висотне поле зіткнення
Зіткнення полів висоти в списку вузлів
Зіткнення частинок у висотному полі дуже корисне для великих відкритих майданчиків, які потребують зіткнення з частинками. Під час виконання вузол створює поле висоти з усіх сіток у його межах, які відповідають його масці відбракування. Частинки стикаються з сіткою, яку представляє це поле висоти. Оскільки генерація поля висоти виконується динамічно, вона може стежити за камерою гравця та реагувати на зміни рівня. Різні параметри щільності поля висоти пропонують широкий діапазон регулювання продуктивності.
Щоб створити вузол зіткнення поля висоти, додайте новий дочірній вузол до вашої сцени та виберіть GPUParticlesCollisionHeightField3D зі списку доступних вузлів.
Вузол зіткнення поля висоти має форму ящика. Властивість Extents контролює його розмір. Екстенти завжди вимірюють половину сторін своїх меж, тому значення (X=1.0,Y=1.0,Z=1.0) створює прямокутник шириною 2 метри з кожного боку. Все, що знаходиться поза межами вузла, ігнорується для створення поля висоти.
Властивість Resolution контролює, наскільки детальним є поле висоти. Нижча роздільна здатність працює швидше за рахунок точності. Якщо роздільна здатність поля висоти занизька, може здатися, що частинки проникають через геометрію рівня або застрягають у повітрі під час зіткнень. Вони також можуть повністю ігнорувати деякі менші сітки.
За низької роздільної здатності зіткнення поля висоти пропускає деякі дрібніші деталі (ліворуч)
Властивість Режим оновлення контролює, коли поле висоти відтворюється з сіток у його межах. Встановіть для нього значення When Moved, щоб він оновлювався лише під час переміщення. Це добре працює та підходить для статичних сцен, які не дуже часто змінюються. Якщо вам потрібно, щоб частинки зіткнулися з динамічними об’єктами, які часто змінюють положення, ви можете вибрати Завжди, щоб оновлювати кожен кадр. Це пов’язано з витратами на продуктивність, і його слід використовувати лише за необхідності.
Примітка
Важливо пам’ятати, що коли Режим оновлення встановлено на При переміщенні, це вузол поля висоти, рух якого ініціює оновлення. Поле висоти не оновлюється, коли одна з сіток усередині нього рухається.
Якщо ввімкнено властивість Follow Camera Enabled, поле висоти слідує за поточною камерою. Він оновлюватиметься щоразу, коли камера рухається. Цю властивість можна використовувати, щоб забезпечити постійне зіткнення частинок навколо гравця, не втрачаючи при цьому продуктивності в областях, які знаходяться поза полем зору або надто далеко.
Зіткнення SDF
Примітка
Зіткнення частинок SDF підтримується лише у рендерах Forward+ та Mobile, а не в режимі Compatibility.
Зіткнення SDF у списку вузлів
Вузли зіткнення SDF створюють «поле відстані зі знаком, з яким можуть стикатися частинки. Зіткнення SDF подібне до зіткнення поля висоти, оскільки воно перетворює кілька сіток у своїх межах на єдиний об’єм зіткнення для частинок. Основна відмінність полягає в тому, що поля відстані зі знаком можуть представляти отвори, тунелі та виступи, що неможливо зробити лише за допомогою полів висоти. Накладні витрати на продуктивність більші порівняно з полями висоти, тому вони найкраще підходять для середовищ малого та середнього розміру.
Щоб створити вузол зіткнення SDF, додайте новий дочірній вузол до своєї сцени та виберіть GPUParticlesCollisionSDF3D зі списку доступних вузлів. Вузли зіткнення SDF повинні бути запечені, щоб мати будь-який вплив на частинки в рівні. Для цього натисніть кнопку на панелі інструментів вікна перегляду, коли вибрано вузол зіткнення SDF, і виберіть каталог для зберігання запечених даних. Оскільки SDF-зіткнення потрібно запікати в редакторі, воно є статичним і не може змінюватися під час виконання.
Зіткнення частинок SDF дозволяє отримати дуже детальні тривимірні форми зіткнень
Вузол колізії SDF має форму ящика. Властивість Extents контролює його розмір. Екстенти завжди вимірюють половину сторін своїх меж, тому значення (X=1.0,Y=1.0,Z=1.0) створює прямокутник шириною 2 метри з кожного боку. Все, що знаходиться поза межами вузла, ігнорується для зіткнення.
Властивість Resolution контролює, наскільки детальним є поле відстані. Нижча роздільна здатність працює швидше за рахунок точності. Якщо роздільна здатність занадто низька, може здатися, що частинки проникають через геометрію рівня або застрягають у повітрі під час зіткнень. Вони також можуть повністю ігнорувати деякі менші сітки.
Та сама площа, охоплена полем відстані зі знаком із різною роздільною здатністю: 16 (ліворуч) і 256 (праворуч)
Властивість Thickness надає товщину поля відстані, яке зазвичай порожнє всередині, щоб запобігти проникненню частинок на високих швидкостях. Якщо ви виявите, що деякі частинки не стикаються з геометрією рівня, а замість цього пролітають прямо крізь нього, спробуйте встановити для цієї властивості більше значення.
Властивість Bake Mask контролює, які сітки будуть розглядатися під час запікання SDF. Лише сітки, які рендеряться на активних шарах маски запікання, сприяють зіткненню частинок.
Вирішення проблем
Щоб зіткнення частинок працювало, visibility AABB частинки має перекриватися з AABB колайдера. Якщо здається, що зіткнення не працюють, незважаючи на налаштування коллайдерів, створіть оновлену видимість AABB, вибравши вузол GPUParticles3D і вибравши GPUParticles3D > Створити видимість AABB… у верхній частині вікна перегляду 3D-редактора.
Якщо частинки рухаються швидко, то колайдери тонкі. Для цього є два рішення:
Зробіть коллайдери товщі. Наприклад, якщо частинки не можуть опуститися нижче суцільної підлоги, ви можете зробити колайдер, що представляє підлогу, товщим, ніж його фактичне візуальне представлення. Колайдер Heightfield автоматично впорається з цим за проектом, оскільки поля Heightfield не можуть представляти зіткнення «кімната на кімнату».
Збільшено
Fixed FPSу вузлі GPUParticles3D, який частіше виконуватиме перевірки зіткнень. Це призводить до втрати продуктивності, тому не встановлюйте це значення занадто високо.