This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Режимы вывода изображения
Физика
Браузер SDK 2
Лицензирование и типы лицензий
Дополнения (Add-Ons)
Демонстрационные проекты
API Samples
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Унифицированный язык шейдеров UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
API
Animations-Related Classes
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
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

Water Body

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

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

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

Дополнительная информация#

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

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

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

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

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

Вязкость#

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

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

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

Плотность#

Параметр 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. Сделайте систему частиц дочерним элементом объекта Water Mesh.

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

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

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

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

Глубина#

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

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

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

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

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

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

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

Абсорбция#

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

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

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

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

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

Чтобы улучшить производительность и избежать чрезмерной нагрузки, имитация воды может обновляться с уменьшенной частотой кадров. Когда 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).

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

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

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

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

    Adding a body

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