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.

Використання SoftBody3D

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

Міркування щодо фізичного двигуна

Підтримка м'яких тіл у Jolt Physics, як правило, надійніша порівняно з GodotPhysics3D. Ви можете перемикатися між фізичними рушіями, змінивши Physics > 3D > Physics Engine у налаштуваннях проекту. Проекти, створені в Godot 4.6 та пізніших версіях, використовують Jolt Physics за замовчуванням, але існуючі проекти доведеться перемикати вручну.

Крім того, фізична інтерполяція наразі не впливає на м’які тіла. Якщо ви хочете, щоб симуляція м’яких тіл виглядала плавнішою за вищої частоти кадрів, вам доведеться збільшити налаштування проекту Фізика > Загальні > Фізика: кількість тактів за секунду, що призводить до зниження продуктивності.

Базове налаштування

Вузол SoftBody3D використовується для симуляції м'яких тіл. На відміну від інших вузлів фізичних тіл, таких як RigidBody3D або StaticBody3D, він не має дочірнього вузла CollisionShape3D або MeshInstance3D. Натомість форма зіткнення походить від сітки, призначеної вузлу. Ця сітка також безпосередньо використовується для рендерингу, а це означає, що вам не потрібно створювати жодних дочірніх вузлів для функціональної, видимої конфігурації.

Ми створимо стрибучий куб, щоб продемонструвати налаштування м’якого тіла.

Створіть нову сцену з кореневим вузлом Node3D. Потім створіть вузол SoftBody3D. Додайте BoxMesh до властивості Mesh вузла в інспекторі та збільште розбиття сітки для симуляції.

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

Налаштування властивостей BoxMesh в інспекторі

Налаштування властивостей BoxMesh в інспекторі

Тепер встановіть параметри, щоб отримати потрібний тип м’якого тіла. Намагайтеся підтримувати Точність моделювання вище 5; інакше м’яке тіло може зруйнуватися.

Налаштування властивостей симуляції SoftBody3D в інспекторі

Налаштування властивостей симуляції SoftBody3D в інспекторі

Примітка

Обережно поводьтеся з деякими параметрами, оскільки деякі значення можуть призвести до дивних результатів. Наприклад, якщо форма не повністю закрита, а тиск встановлено на значення більше за 0.0, м’яке тіло літатиме, як поліетиленовий пакет під сильним вітром.

Запустіть сцену, щоб переглянути симуляцію. Ось приклад того, як вона має виглядати:

Порада

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

Або ж ви можете збільшити налаштування проекту Фізика > Загальні > Фізика, кількість тактів за секунду, що також вплине на якість моделювання м’якого тіла.

Симуляція плаща

Давайте зробимо плащ у демо-версії Platformer 3D.

Примітка

Ви можете завантажити демоверсію Platformer 3D на GitHub або бібліотеці ресурсів <https://godotengine.org/asset-library/asset/2748>`_.

Відкрийте сцену player/player.tscn, додайте вузол SoftBody3D під кореневим вузлом, а потім призначте йому ресурс PlaneMesh у властивості Mesh.

Відкрийте властивості PlaneMesh та встановіть розмір на (0.5, 1.0), потім встановіть Subdivide Width та Subdivide Depth на 5. Налаштуйте положення та обертання вузла SoftBody3D так, щоб площина здавалася близькою до спини персонажа. У вас має вийти щось подібне:

Розділення PlaneMesh та розміщення його на спині персонажа

Розділення PlaneMesh та розміщення його на спині персонажа

Порада

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

Додайте вузол BoneAttachment3D під вузлом скелета та виберіть кістку шиї, щоб прикріпити плащ до скелета персонажа.

Примітка

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

Не переміщуйте вузол SoftBody3D під вузлом BoneAttachment3D наразі. Натомість, ми налаштуємо його закріплені точки так, щоб вони слідували за вузлом BoneAttachment3D.

Налаштування вузла BoneAttachment3D в інспекторі

Налаштування вузла BoneAttachment3D в інспекторі

Щоб створити закріплені точки, виберіть верхні вершини у вузлі SoftBody3D. Закріплена точка відображається синім кольором у вікні перегляду 3D-редактора:

Закріплення точок SoftBody3D в інспекторі

Закріплення точок SoftBody3D в інспекторі

Закріплені з'єднання можна знайти в розділі Вкладення SoftBody3D, який знаходиться в розділі Зіткнення, який потрібно розгорнути спочатку. Виберіть вузол BoneAttachment3D як Просторовий шлях приєднання для кожного закріпленого з'єднання. Закріплені з'єднання тепер прикріплені до шиї..

Порада

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

Зверніть увагу, що вам, можливо, доведеться зняти вибір, а потім знову вибрати вузол SoftBody3D, щоб з’явився розділ Вкладення.

Налаштування закріплених точок для приєднання до вузла BoneAttachment3D в інспекторі SoftBody3D

Налаштування закріплених точок для приєднання до вузла BoneAttachment3D в інспекторі SoftBody3D

Останній крок – уникнути обрізання, додавши CharacterBody3D Player (кореневий вузол сцени) до властивості Parent Collision Ignore SoftBody3D.

Налаштування винятку зіткнення в інспекторі SoftBody3D

Налаштування винятку зіткнення в інспекторі SoftBody3D

Розіграйте сцену, і плащ повинен правильно імітувати.

Кінцевий результат запуску головної сцени проєкту

Кінцевий результат запуску головної сцени проєкту

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

Примітка

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

Використання імпортованих сіток

Опція Зберегти у файл у діалоговому вікні Додаткові параметри імпорту дозволяє зберегти сітку в окремий файл ресурсів, який потім можна приєднати до вузлів SoftBody3D.

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

Див. Імпорт конфігурації та Рівень деталізації сітки (LOD) для отримання додаткової інформації.