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...
Использование SoftBody3D
Мягкие тела (или soft-body dynamics) моделируют движение, изменение формы и другие физические свойства деформируемых объектов. Например, это можно использовать для имитации ткани или создания более реалистичных персонажей.
Соображения по физическому движку
Поддержка мягких тел в Jolt Physics обычно более надёжна по сравнению с GodotPhysics3D. Вы можете переключить физические движки, изменив Physics > 3D > Physics Engine в настройках проекта. Проекты, созданные в Godot 4.6 и новее, используют Jolt Physics по умолчанию, но существующие проекты придётся переключать вручную.
Кроме того, физическая интерполяция в настоящее время не влияет на мягкие тела. Если вы хотите, чтобы симуляция мягких тел выглядела более плавно при высокой частоте кадров, вам придётся увеличить настройку проекта Physics > Common > Physics Ticks per Second, что сказывается на производительности.
Базовая настройка
Для симуляции мягких тел используется узел SoftBody3D. В отличие от других физических тел, таких как RigidBody3D или StaticBody3D, он не имеет дочерних узлов CollisionShape3D или MeshInstance3D. Вместо этого форма столкновения выводится из сетки, назначенной узлу. Эта сетка также используется для рендеринга, что означает, что вам не нужно создавать никаких дочерних узлов для рабочей и видимой настройки.
Мы создадим упругий куб, чтобы продемонстрировать устройство мягкого тела.
Создайте новую сцену с корневым узлом Node3D. Затем создайте узел SoftBody3D. Добавьте BoxMesh в свойство Mesh узла в инспекторе и увеличьте подразделение сетки для симуляции.
Уровень подразделения определяет точность деформации: более высокие значения позволяют выполнять более мелкие и детальные деформации за счёт производительности. В этом примере мы установим его равным 3 по каждой оси:
Настройка свойств BoxMesh в инспекторе
Теперь задайте параметры, чтобы получить желаемый тип мягкого тела. Старайтесь поддерживать Simulation Precision выше 5; в противном случае мягкое тело может разрушиться.
Настройка свойств симуляции SoftBody3D в инспекторе
Примечание
Обращайтесь с некоторыми параметрами осторожно, так как некоторые значения могут привести к странным результатам. Например, если форма не полностью замкнута, а давление установлено больше 0.0, мягкое тело будет летать, как полиэтиленовый пакет при сильном ветре.
Запустите сцену, чтобы увидеть симуляцию. Вот пример того, как это должно выглядеть:
Совет
Чтобы улучшить результат симуляции, увеличьте Simulation Precision. Это может дать значительное улучшение за счёт производительности.
В качестве альтернативы можно увеличить настройку проекта Physics > Common > Physics Ticks per Second, которая также повлияет на качество симуляции мягких тел.
Моделирование плаща
Давайте создадим плащ в демонстрационном проекте Platformer 3D.
Примечание
Вы можете загрузить демонстрационный проект Platformer 3D на GitHub или в библиотеке ресурсов.
Откройте сцену player/player.tscn, добавьте узел SoftBody3D под корневым узлом, затем назначьте ему ресурс PlaneMesh в свойстве Mesh.
Откройте свойства PlaneMesh и установите размер (0.5, 1.0), затем установите Subdivide Width и Subdivide Depth на 5. Отрегулируйте положение и поворот узла SoftBody3D так, чтобы плоскость находилась близко к спине персонажа. В итоге должно получиться что-то вроде этого:
Подразделение PlaneMesh и размещение его на спине персонажа
Совет
Подразделение создаёт более тесселированную сетку для лучшей симуляции. Однако более высокие уровни подразделения влияют на производительность. Постарайтесь найти баланс между производительностью и качеством. Это зависит от количества одновременно активных симуляций мягких тел, а также от расстояния между камерой и мягким телом.
Добавьте узел BoneAttachment3D под узлом скелета и выберите кость шеи, чтобы прикрепить плащ к скелету персонажа.
Примечание
Узел BoneAttachment3D используется для прикрепления объектов к кости арматуры. Прикреплённый объект будет следовать за движением кости. Например, таким образом можно прикрепить оружие, которое держит персонаж.
Не перемещайте узел SoftBody3D под узел BoneAttachment3D. Вместо этого мы настроим его закреплённые точки так, чтобы они следовали за узлом BoneAttachment3D.
Настройка узла BoneAttachment3D в инспекторе
Чтобы создать закреплённые точки, выберите верхние вершины в узле SoftBody3D. Закреплённая точка отображается синим цветом в окне 3D-редактора:
Закрепление точек SoftBody3D в инспекторе
Закреплённые суставы можно найти в разделе Attachments SoftBody3D, который находится в разделе Collision, который необходимо сначала развернуть. Выберите узел BoneAttachment3D в качестве Spatial Attachment Path для каждого закреплённого сустава. Теперь закреплённые суставы прикреплены к шее.
Совет
Чтобы быстрее назначить свойства, вы можете перетащить узел BoneAttachment3D из дока дерева сцены в поле свойства Spatial Attachment Path.
Обратите внимание, что для отображения раздела Attachments может потребоваться снять выделение с узла SoftBody3D, а затем выделить его снова.
Настройка закреплённых точек для прикрепления к узлу BoneAttachment3D в инспекторе SoftBody3D
Последний шаг — избежать клиппирования, добавив CharacterBody3D Player (корневой узел сцены) в свойство Parent Collision Ignore SoftBody3D.
Настройка исключения столкновений в инспекторе SoftBody3D
Воспроизведите сцену, и плащ должен симулироваться правильно.
Конечный результат при запуске основной сцены проекта
Это охватывает основные настройки симуляции мягкого тела. Экспериментируйте с параметрами, чтобы добиться желаемого эффекта при создании игры.
Примечание
Плащ не будет отображаться при просмотре с некоторых углов из-за отбраковки обратных граней. Чтобы решить эту проблему, вы можете отключить отбраковку обратных граней, назначив новый StandardMaterial3D и установив его режим отбраковки в Disabled. Это заставит материал отображать обе стороны плоскости.
Использование импортированных сеток
Опция Save to File в диалоговом окне Advanced Import Settings позволяет сохранить сетку в отдельный файл ресурса, который затем можно прикрепить к узлам SoftBody3D.
Возможно, вы также захотите отключить генерацию LOD или изменить параметры генерации при импорте сетки для использования с SoftBody3D. Настройки импорта по умолчанию создадут LOD, объединяющий соседние грани, которые почти плоские относительно друг друга, даже на очень близких расстояниях рендеринга. Это хорошо работает для статических сеток, но часто нежелательно для использования с SoftBody3D, если вы хотите, чтобы эти грани могли изгибаться и двигаться относительно друг друга, а не отображаться как одна плоскость.
Более подробную информацию см. в разделах Импорт конфигурации и Уровень детализации сетки (LOD).