Water Body
Water body позволяет физическое моделирование жидкостей различных плотность а также вязкое поведение . Он также моделирует соответствующую выталкивающую силу на подводных объектах и динамику волн как двустороннее взаимодействие рассчитывается. Симуляция воды визуально приятна и достаточно быстра, поэтому ее можно использовать в игровой среде; однако, если сетка большая и плотная, она может стать довольно дорогой.
Water body можно присвоить следующим типам объектов:
- Water Mesh объект
- Dynamic Mesh объект
Смотрите также#
- Статья на Water Mesh
- BodyWater класс
- Фрагмент видеоурока по физике, демонстрирующий использование Water body для моделирования различных типов жидкостей
Требования к сетке#
Сетка, которой назначен Water body, должна соответствовать приведенным требованиям. здесь . Требования к сетке одинаковы для обоих Динамическая сетка а также Водная сетка объекты.
Сеточная имитационная модель#
Water body моделируется как двумерная сетка с точечными частицами, расположенными в вершинах сетки. Движение частицы ограничено двумя направлениями: ее можно поднять вверх или потянуть вниз. В случае изменения своего положения частица приобретает скорость, которая влияет на соседние частицы и, таким образом, описывает сетку Water body для каждой физики. шаг времени . Таким образом, волны генерируются, когда физические тела вступают в контакт с водой или частице прямо приписывается новая скорость.
Ликвидность#
Жидкость определяет вязкость воды (или любой другой жидкости): она определяет, насколько легко она разбрызгивается и влияет на формирование волн. Он умножает скорость, с которой частицы воды передают векторы скорости соседним.
- Чем выше значение, тем более вязкая вода и тем меньше волны, поднимаемые объектами (например, сиропом).
-
Низкие значения обеспечивают более высокие поверхностные волны (например, водопроводная вода).
Будьте осторожны, не устанавливайте слишком высокие или слишком низкие значения, потому что это может привести к нестабильному моделированию и взрыву воды. Чтобы восстановить стабильность, попробуйте настроить Interaction.
Плотность#
Плотность воды определяет плавучесть объектов по принципу Архимеда. Исходя из объема погруженной части форма и его масса, сила плавучести приложена к его центр массы и толкает объект вверх, при этом средняя нормаль сетки покрывается затопленными точками формы.
- При минимальном значении 0 объекты не будут плавать в воде, а скорее будут проваливаться сквозь нее без какого-либо сопротивления.
- Более высокие значения увеличивают выталкивающую силу. При слишком высоком значении погруженные объекты начинают выталкиваться в воздух.
Физическое поведение объектов в воде#
Двустороннее динамическое взаимодействие обеспечивает как физически, так и визуально убедительное моделирование волн от физических тел, когда они возмущают жидкость. Представьте движущуюся лодку, которая образует за собой кильватерную волну, или персонажа, создающего рябь при движении в воде (см. Рисунок выше ).
Взаимодействие с объектами#
Физический объект, погруженный в воду (или любую другую жидкость), имеет собственный вектор скорости. С другой стороны, все частицы воды, которые покрыты этим физическим телом или окружают его, имеют свой собственный интегрированный вектор скорости, который приблизительно соответствует состоянию воды. Значение Interaction - это коэффициент, определяющий, насколько скорость объекта влияет на скорости частиц воды и, таким образом, генерирует волны.
- При минимальном значении 0 объект не вызывает возмущений на поверхности воды.
-
Более высокие значения делают возмущение водной поверхности более интенсивным, а волны от движущихся объектов становятся сильнее.
Слишком высокие значения могут взорвать воду, поскольку закон сохранения энергии не ограничивает систему! Попробуйте уменьшить демпфирование ценности для восстановления стабильности.
Линейное демпфирование и угловое демпфирование#
Ожидается, что объекты, попадающие в воду, будут замедляться, поскольку сопротивление воды выше, чем сопротивление воздуха. Значения демпфирования работают наоборот по сравнению с коэффициентом Interaction:
Linear Damping определяет, насколько линейная скорость погруженного объекта уменьшается с течением времени под влиянием скоростей окружающих частиц воды. Точно так же Angular Damping определяет постепенное уменьшение поворота объекта. Как линейные, так и угловые демпфирующие силы накапливаются перед приложением.
- При минимальном значении 0 вода не препятствует движению объектов. В результате на воде нет волн.
-
Более высокие значения делают затухание линейных или угловых скоростей более интенсивным, и объекты замедляются быстрее, когда они попадают в воду. Волны от объектов в этом случае становятся более выраженными по мере увеличения энергии системы.
Вода может взорваться, если значения будут очень высокими. Попробуйте уменьшить значение Interaction, чтобы восстановить стабильность.
Эмиссия частиц#
Возможно создание дополнительного визуального эффекта мелких капель, брызг или пузырьков на воде при падении в нее предметов. Чтобы включить этот эффект, выполните следующие действия:
- Создайте эффект Particle system, щелкнув Create -> Effect -> Particle system в главном меню UnigineEditor .
- Перейдите в окно Parameters.
- В разделе Dynamic выберите Излучатель искры для создания частиц, выбрав Emitter -> Spark.
- Сделайте Particle system a ребенок объекта Water Mesh.
Частицы будут генерироваться только тогда, когда объект впервые коснется поверхности воды, в то время как уже погруженные тела будут плавать, не создавая их.
Водные границы#
Следующие параметры, относящиеся к водным границам, позволяют создавать бассейны разных типов в игровой среде. Эти параметры обеспечивают гибкость в настройке физического поведения воды для больших естественных озер и небольших бассейнов.
Глубина#
Depth определяет размер волн: высокие волны образуются в глубоких водах (например, в море), тогда как на мелководье (например, в бассейне) возникает лишь небольшая рябь:
- При минимальном значении 0 объекты не поднимают волн в воде.
- Более высокие значения приводят к более высоким волнам, создаваемым движущимися объектами.
Пересечение с землей#
Intersection воды с подстилающей поверхностью может потребоваться, например, для оценки фактического глубина водного бассейна. Чтобы включить пересечение земли, выполните следующие действия:
- Сделайте объект Water Mesh или Dynamic Mesh дочерним узлом Terrain или Static Mesh
- Установите флажок Intersection в окне Parameters → вкладка Physics → раздел Body.
Пересечение реализовано следующим образом: лучи трассируются вниз от поверхности водной сетки до расстояния Depth. Если луч пересекает родительский узел, полученная глубина используется в расчетах; в противном случае заданное значение глубины используется.
Пересечение также прослеживается вверх, чтобы проверить, находится ли вода под землей и нет необходимости ее отображать.
Абсорбция#
Absorption - это опция, которая создает эффект либо ограниченного бассейна, либо, наоборот, открытой водной поверхности, не имеющей обозначенных границ.
- Если Absorption включен , волны рассеиваются по периметру меша. В этом случае уровень воды по краям сетки будет постепенно опускаться до нулевого уровня.
- Если отключено , имитируется обратный поток от стены: волна, достигая края воды, отражается и возвращается в обратном направлении.
Оптимизация моделирования#
Обновление каждого кадра огромного количества объектов, расположенных далеко от камеры, которые трудно различить или наблюдать как массу, является пустой тратой ресурсов.
Чтобы улучшить производительность и избежать чрезмерной нагрузки, имитация воды может быть обновлено с уменьшенной частотой кадров . Когда Water body находится за пределами области, указанной параметром Update Distance Limit, физические вычисления не выполняются, хотя объекты сохраняют свою плавучесть.
Приведенный ниже набор частот кадров позволяет указать, как часто моделирование воды должно обновляться, когда объект виден, когда видна только его тень или когда он не виден вообще.
Эта функция включена с настройками по умолчанию, обеспечивающими оптимальную производительность, и может быть настроена для каждого объекта в UnigineEditor или через API во время выполнения.
Назначение водного объекта#
Чтобы присвоить объекту Water body через UnigineEditor выполните следующие действия:
- Откройте окно World Hierarchy.
-
Выберите объект Water Mesh или Dynamic Mesh, которому нужно присвоить Water body.
Убедитесь, что сетка объекта соответствует требования ! -
Перейдите на вкладку Physics в окне Parameters и назначьте физический тело к выбранному объекту, выбрав Body -> Water.
- Задайте название тела и при необходимости измените другие параметры.