This page has been translated automatically.
视频教程
界面
要领
高级
实用建议
专业(SIM)
UnigineEditor
界面概述
资源工作流程
设置和首选项
项目开发
调整节点参数
Setting Up Materials
设置属性
照明
Sandworm
使用编辑器工具执行特定任务
如何擴展編輯器功能
嵌入式节点类型
Nodes
Objects
Effects
Decals
光源
Geodetics
World Nodes
Sound Objects
Pathfinding Objects
Players
编程
基本原理
搭建开发环境
使用范例
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Plugins
File Formats
Materials and Shaders
Rebuilding the Engine Tools
GUI
双精度坐标
应用程序接口
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
创建内容
内容优化
Materials
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Tutorials
注意! 这个版本的文档是过时的,因为它描述了一个较老的SDK版本!请切换到最新SDK版本的文档。
注意! 这个版本的文档描述了一个不再受支持的旧SDK版本!请升级到最新的SDK版本。

Water Body

Water body 可以对不同的液体进行物理模拟密度粘性行为.它还对水下物体上的适当浮力和波浪动力学建模为双向互动被计算。水模拟在视觉上令人愉悦且速度足够快,因此可以在游戏环境中使用;然而,如果网格又大又密,它会变得非常昂贵。

Water body 可以分配给以下类型的对象:

注意
在任意网格的情况下,水将没有适当的阴影,但所有物理属性仍将存在。

也可以看看#

网格要求#

分配了 Water body 的网格应满足给定的要求这里.两者的网格要求相同动态网格水网对象。

网格仿真模型#

Water body 被建模为二维网格,点粒子位于网格的顶点。粒子运动被限制在两个方向:它可以向上提升或向下拖动。在改变其位置的情况下,粒子获得影响相邻粒子的速度,从而描述每个物理场的 Water body 网格时间步长.因此,当物理物体与水接触或直接为粒子分配新速度时,就会产生波。

物理模拟过程中的水网变化

流动性#

流动性定义了水(或任何其他液体)的粘度:它决定了它飞溅和影响波浪形成的难易程度。它乘以水粒子将速度向量传递给相邻粒子的速度。

  • 值越高,水越粘稠,物体(例如糖浆)引起的波浪越小。
  • 低值提供更高的表面波(例如自来水)。

    注意
    注意不要设置太高或太低的值,因为这可能会导致模拟不稳定和水爆炸。要恢复稳定性,请尝试调整 Interaction

密度#

根据阿基米德原理,水的密度决定了物体的浮力。根据淹没部分的体积形状和它的质量,浮力被施加到它的质心并向上推动对象,其中被淹没的形状点覆盖的网格的平均法线。

  • 通过 0 的最小值,物体不会漂浮在水中,而是在没有任何阻力的情况下通过它。
  • 较高的值会增加浮力。如果设置得太高,浸入的物体开始被推出到空中。

物体在水中的物理行为#

双向动态交互提供了物理和视觉上令人信服的模拟,当它们干扰流体时来自物理体的波。想象一艘移动的船在它后面形成尾波,或者一个角色在水中移动时产生涟漪(见图以上)。

与对象的交互#

浸入水(或任何其他液体)中的物理对象具有自己的速度矢量。另一方面,所有被这个物体覆盖或包围的水粒子,都有自己的积分速度矢量,近似于水的状态。 Interaction 值是一个系数,它确定对象的速度对水粒子速度的影响程度,从而产生波浪。

  • 通过 0 的最小值,物体不会对水面产生干扰。
  • 越大水面的扰动越强,在移动的物体浪变得更高。

    注意
    太高的值可能会把水吹起来,因为能量守恒定律不会约束系统!尝试减少减震值以恢复稳定。

线性阻尼和角阻尼#

进入水中的物体预计会减慢速度,因为水的阻力大于空气中的阻力。阻尼值与 Interaction 系数相反:

Linear Damping 定义了在受周围水粒子速度影响时,水下物体的线速度随时间降低了多少。同样,Angular Damping 定义了对象旋转的逐渐减少。线性和角阻尼力在施加之前都会累积。

  • 通过 0 的最小值,物体的运动不受水的阻碍。结果,水中没有波浪。
  • 较高的值会使线速度或角速度的阻尼更加强烈,并且物体在进入水中时会减慢速度。在这种情况下,随着系统能量的增加,来自物体的波变得更加明显。

    注意
    如果值非常高,水可能会爆炸。尝试降低 Interaction 值以重新获得稳定性。

粒子发射#

当物体落入水中时,可以在水面上产生小水滴、飞溅或气泡的额外视觉效果。要启用此效果,请执行以下步骤:

  1. 通过单击主菜单中的 Create -> Effect -> Particle system 创建 Particle system 效果统一编辑器.
  2. 转到 Parameters 窗口。
  3. Dynamic 部分,选择火花发射器通过选择 Emitter -> Spark 来生成粒子。
  4. 使 Particle system 成为孩子Water Mesh 对象。

只有当物体第一次接触水面时才会生成粒子,而已经淹没的物体将漂浮而不生成它们。

水溅效果

水边界#

以下与水边界相关的参数可以在游戏环境中创建不同类型的盆地。这些参数为设置大型天然湖泊和小型水池的水的物理行为提供了灵活性。

深度#

Depth 决定了波浪的大小:在深水(如大海)中会形成大浪,而在浅水(如水池)中只会产生轻微的波纹:

  • 最小值为 0 时,对象不会在水中产生波浪。
  • 较高的值会导致移动对象产生较高的波。

与地面的交叉点#

Intersection 的水与底层地形可能是必要的,例如,估计实际深度的水盆。 要启用地面交叉,请执行以下步骤:

  1. 使 Water MeshDynamic Mesh 对象成为 TerrainStatic Mesh节点
  2. 选中 Parameters 窗口 → Physics 选项卡 → Body 部分中的 Intersection 框。

相交以下列方式实现:光线从水网格表面向下追踪,直到 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 MeshDynamic Mesh(由于 Water body 内的对象未对齐而导致闪烁)的各种问题。

指定水体#

通过将 Water body 分配给对象统一编辑器执行以下步骤:

  1. 打开 World Hierarchy 窗口。
  2. 选择 Water MeshDynamic Mesh 对象以将 Water body 分配给。

    注意
    确保对象的网格满足要求
  3. 转到 Parameters 窗口中的 Physics 选项卡并分配一个物理身体通过选择 Body -> Water 到选定的对象。

    Adding a body

  4. 如有必要,设置主体名称并更改其他参数。
最新更新: 2022-12-14
Build: ()