This page has been translated automatically.
Видеоуроки
Interface
Essentials
Advanced
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Professional (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Landscape Tool
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World Nodes
Звуковые объекты
Объекты поиска пути
Players
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Materials and Shaders
Rebuilding the Engine Tools
GUI
Двойная точность координат
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Сэмплы материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Tutorials
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

Water Body

Water body позволяет имитировать физическое поведение жидкостей различной плотности и вязкости. Оно также моделирует соответствующую выталкивающую силу для погруженных в воду объектов и динамику волн при расчете двустороннего взаимодействия. Симуляция воды хорошо выглядит и достаточно быстро работает, поэтому ее можно использовать в игровой среде; однако, если меш большой и плотный, использование воды может быть затратным.

Water body можно присвоить следующим типам объектов:

Примечание
Если используется произвольный меш, у воды не будет соответствующего затенения, но все физические свойства сохранятся.

Смотрите также#

Требования к мешу#

Меш, на который назначается Water body, должен соответствовать требованиям, приведенным здесь . Требования к мешу одинаковы как для Dynamic Mesh, так и для Water Mesh.

Имитационная модель сетки#

Water body моделируется как двумерная сетка с точечными частицами, расположенными в вершинах меша. Движение частицы ограничено двумя направлениями: ее можно поднять вверх или потянуть вниз. В случае изменения своего положения частица приобретает скорость, которая влияет на соседние частицы и, таким образом, описывает сетку Water body на каждом временном шаге физики. Таким образом, волны генерируются, когда физические тела вступают в контакт с водой или частице напрямую задается новая скорость.

Изменения сетки воды во время симуляции физики

Liquidity#

Параметр Liquidity определяет вязкость воды (или любой другой жидкости): он определяет, насколько легко вода разбрызгивается, и влияет на формирование волн. Он умножает скорость, с которой частицы воды передают векторы скорости соседним частицам.

  • Чем выше значение, тем более вязкая вода и тем меньше волны, поднимаемые объектами (например, сиропом).
  • Низкие значения обеспечивают более высокие поверхностные волны (например, водопроводная вода).

    Примечание
    Будьте осторожны, не устанавливайте слишком высокие или слишком низкие значения, потому что это может привести к нестабильному поведению воды. Чтобы восстановить стабильность, попробуйте настроить параметр Interaction.

Density#

Параметр Density воды определяет плавучесть объектов по закону Архимеда. Исходя из объема погруженной части формы и ее массы, сила плавучести прилагается к ее центру массы и толкает объект вверх, при этом средняя нормаль сетки покрывается точками погруженной формы.

  • При минимальном значении 0 объекты не будут плавать в воде, а скорее будут проваливаться сквозь нее без какого-либо сопротивления.
  • Более высокие значения увеличивают выталкивающую силу. При слишком высоком значении погруженные объекты начинают выталкиваться в воздух.

Физическое поведение объектов в воде#

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

Взаимодействие с объектами#

Физический объект, погруженный в воду (или любую другую жидкость), имеет собственный вектор скорости. С другой стороны, все частицы воды, которые покрыты этим физическим телом или окружают его, имеют свой собственный интегрированный вектор скорости, который приблизительно соответствует состоянию воды. Значение Interaction - это коэффициент, определяющий, насколько скорость объекта влияет на скорости частиц воды и, таким образом, генерирует волны.

  • При минимальном значении 0 объект не вызывает возмущений на поверхности воды.
  • Более высокие значения делают возмущение водной поверхности более интенсивным, а волны от движущихся объектов становятся сильнее.

    Примечание
    Слишком высокие значения могут вызвать нестабильное поведение воды, поскольку закон сохранения энергии не ограничивает систему! Попробуйте уменьшить значения гашения колебаний для восстановления стабильности.

Линейное и угловое гашение колебаний#

Ожидается, что объекты, попадающие в воду, будут замедляться, поскольку сопротивление воды выше, чем сопротивление воздуха. Значения демпфирования работают наоборот по сравнению с коэффициентом Interaction:

Linear Damping определяет, насколько линейная скорость погруженного объекта уменьшается с течением времени под влиянием скоростей окружающих частиц воды. Точно так же Angular Damping определяет постепенное уменьшение поворота объекта. Как линейные, так и угловые демпфирующие силы накапливаются перед приложением.

  • При минимальном значении 0 вода не препятствует движению объектов. В результате на воде нет волн.
  • Более высокие значения делают затухание линейных или угловых скоростей более интенсивным, и объекты замедляются быстрее, когда они попадают в воду. Волны от объектов в этом случае становятся более выраженными по мере увеличения энергии системы.

    Примечание
    Вода может повести себя нестабильно, если значения будут очень высокими. Попробуйте уменьшить значение Interaction, чтобы восстановить стабильность.

Эмиссия частиц#

Возможно создание дополнительного визуального эффекта мелких капель, брызг или пузырьков на воде при падении в нее предметов. Чтобы включить этот эффект, выполните следующие действия:

  1. Создайте эффект Particle system, щелкнув Create -> Effect -> Particle system в главном меню UnigineEditor .
  2. Перейдите в окно Parameters.
  3. В разделе Dynamic выберите Spark Emitter для создания частиц, выбрав Emitter -> Spark.
  4. Сделайте Particle system a дочерним элементом объекта Water Mesh.

Частицы будут генерироваться только тогда, когда объект впервые коснется поверхности воды, в то время как уже погруженные тела будут плавать, не создавая их.

Эффект водяных брызг

Границы водного пространства#

Следующие параметры, относящиеся к границам водного пространства, позволяют создавать резервуары разных типов в игровой среде. Эти параметры обеспечивают гибкость в настройке физического поведения воды для больших естественных озер и небольших бассейнов.

Глубина#

Depth определяет размер волн: высокие волны образуются в глубоких водах (например, в море), тогда как на мелководье (например, в бассейне) возникает лишь небольшая рябь:

  • При минимальном значении 0 объекты не образуют волн в воде.
  • Более высокие значения приводят к более высоким волнам, создаваемым движущимися объектами.

Пересечение с землей#

Intersection воды с подстилающей поверхностью может потребоваться, например, для оценки фактической глубины водного бассейна. Чтобы включить пересечение с землей, выполните следующие действия:

  1. Сделайте объект Water Mesh или Dynamic Mesh дочерней нодой объекта Terrain или Static Mesh
  2. Включите флаг Intersection в окне Parameters → вкладка Physics → раздел Body.

Пересечение реализовано следующим образом: лучи трассируются вниз от поверхности Water Mesh до расстояния Depth. Если луч пересекает родительскую ноду, полученная глубина используется в расчетах; в противном случае используется заданное значение глубины.

Пересечение также прослеживается вверх, чтобы проверить, находится ли вода под землей и нет необходимости ее отображать.

Абсорбция#

Absorption - это опция, которая создает эффект либо ограниченного бассейна, либо, наоборот, открытой водной поверхности, не имеющей обозначенных границ.

  • Если Absorption включен , волны рассеиваются по периметру меша. В этом случае уровень воды по краям меша будет постепенно опускаться до нулевого уровня.
  • Если отключено , имитируется обратный поток от стены: волна, достигая края воды, отражается и возвращается в обратном направлении.

Абсорбция Water body: включено (слева) и отключено (справа)

Оптимизация симуляции#

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

Чтобы улучшить производительность и избежать чрезмерной нагрузки, имитация воды может обновляться с уменьшенной частотой кадров . Когда Water body находится за пределами области, указанной параметром Update Distance Limit, физические вычисления не выполняются, хотя объекты сохраняют свою плавучесть.

Приведенный ниже набор частот кадров позволяет указать, как часто симуляция воды должна обновляться, когда объект виден, когда видна только его тень или когда он не виден вообще.

Вкладка Parameters -> Physics → раздел Periodic Update
FPS When Object Is Rendered To Viewport Значение частоты обновления для случая, когда объект отображается в области просмотра.
FPS When Only Object Shadows Are Rendered Значение частоты обновления, когда сам объект находится за пределами области просмотра, и только его тень отображается в области просмотра.
FPS When Object Is Not Rendered At All Значение частоты обновления, когда объект и его тень не отображаются в области просмотра.
Update Distance Limit Расстояние от камеры, до которого необходимо обновить объект.
Примечание
Эти значения не фиксированы, движок может регулировать их в любое время для обеспечения наилучшей производительности.

Эта функция включена с настройками по умолчанию, обеспечивающими оптимальную производительность, и может быть настроена для каждого объекта в UnigineEditor или через API во время выполнения.

Внимание
Имейте в виду, что использование пониженной частоты кадров обновления для объекта должно быть тщательно продумано в логике вашего приложения, так как это может привести к различным проблемам с рендерингом Skinned Mesh и Dynamic Mesh (мерцание из-за несовпадения объектов внутри Water body).

Назначение водного объекта#

Чтобы присвоить объекту Water body через UnigineEditor выполните следующие действия:

  1. Откройте окно World Hierarchy.
  2. Выберите объект Water Mesh или Dynamic Mesh, которому нужно присвоить Water body.

    Примечание
    Убедитесь, что меш объекта соответствует требования !
  3. Перейдите на вкладку Physics в окне Parameters и назначьте физический тело к выбранному объекту, выбрав Body -> Water.

    Adding a body

  4. Задайте название тела и при необходимости измените другие параметры.
Последнее обновление: 07.04.2022
Build: ()