Water Body
Water body 可以对不同的液体进行物理模拟密度和粘性行为.它还对水下物体上的适当浮力和波浪动力学建模为双向互动被计算。水模拟在视觉上令人愉悦且速度足够快,因此可以在游戏环境中使用;然而,如果网格又大又密,它会变得非常昂贵。
Water body 可以分配给以下类型的对象:
- Water Mesh 对象
- Dynamic Mesh 对象
也可以看看#
- 关于 Water Mesh 的文章
- BodyWater 类
- 演示物理学的视频教程的片段使用 Water body 模拟各种类型的液体
网格要求#
网格仿真模型#
Water body 被建模为二维网格,点粒子位于网格的顶点。粒子运动被限制在两个方向:它可以向上提升或向下拖动。在改变其位置的情况下,粒子获得影响相邻粒子的速度,从而描述每个物理场的 Water body 网格时间步长.因此,当物理物体与水接触或直接为粒子分配新速度时,就会产生波。
流动性#
流动性定义了水(或任何其他液体)的粘度:它决定了它飞溅和影响波浪形成的难易程度。它乘以水粒子将速度向量传递给相邻粒子的速度。
- 值越高,水越粘稠,物体(例如糖浆)引起的波浪越小。
-
低值提供更高的表面波(例如自来水)。
注意不要设置太高或太低的值,因为这可能会导致模拟不稳定和水爆炸。要恢复稳定性,请尝试调整 Interaction。
密度#
物体在水中的物理行为#
双向动态交互提供了物理和视觉上令人信服的模拟,当它们干扰流体时来自物理体的波。想象一艘移动的船在它后面形成尾波,或者一个角色在水中移动时产生涟漪(见图以上)。
与对象的交互#
浸入水(或任何其他液体)中的物理对象具有自己的速度矢量。另一方面,所有被这个物体覆盖或包围的水粒子,都有自己的积分速度矢量,近似于水的状态。 Interaction 值是一个系数,它确定对象的速度对水粒子速度的影响程度,从而产生波浪。
- 通过 0 的最小值,物体不会对水面产生干扰。
-
值越大水面的扰动越强,在移动的物体浪变得更高。
太高的值可能会把水吹起来,因为能量守恒定律不会约束系统!尝试减少减震值以恢复稳定。
线性阻尼和角阻尼#
进入水中的物体预计会减慢速度,因为水的阻力大于空气中的阻力。阻尼值与 Interaction 系数相反:
Linear Damping 定义了在受周围水粒子速度影响时,水下物体的线速度随时间降低了多少。同样,Angular Damping 定义了对象旋转的逐渐减少。线性和角阻尼力在施加之前都会累积。
- 通过 0 的最小值,物体的运动不受水的阻碍。结果,水中没有波浪。
-
较高的值会使线速度或角速度的阻尼更加强烈,并且物体在进入水中时会减慢速度。在这种情况下,随着系统能量的增加,来自物体的波变得更加明显。
如果值非常高,水可能会爆炸。尝试降低 Interaction 值以重新获得稳定性。
粒子发射#
当物体落入水中时,可以在水面上产生小水滴、飞溅或气泡的额外视觉效果。要启用此效果,请执行以下步骤:
- 通过单击主菜单中的 Create -> Effect -> Particle system 创建 Particle system 效果统一编辑器.
- 转到 Parameters 窗口。
- 在 Dynamic 部分,选择火花发射器通过选择 Emitter -> Spark 来生成粒子。
- 使 Particle system 成为孩子Water Mesh 对象。
只有当物体第一次接触水面时才会生成粒子,而已经淹没的物体将漂浮而不生成它们。
水边界#
以下与水边界相关的参数可以在游戏环境中创建不同类型的盆地。这些参数为设置大型天然湖泊和小型水池的水的物理行为提供了灵活性。
深度#
Depth 决定了波浪的大小:在深水(如大海)中会形成大浪,而在浅水(如水池)中只会产生轻微的波纹:
- 最小值为 0 时,对象不会在水中产生波浪。
- 较高的值会导致移动对象产生较高的波。
与地面的交叉点#
Intersection 的水与底层地形可能是必要的,例如,估计实际深度的水盆。 要启用地面交叉,请执行以下步骤:
- 使 Water Mesh 或 Dynamic Mesh 对象成为 Terrain 或 Static Mesh 的子节点
- 选中 Parameters 窗口 → Physics 选项卡 → Body 部分中的 Intersection 框。
相交以下列方式实现:光线从水网格表面向下追踪,直到 Depth 距离。如果一条射线与父节点相交,则将获得的深度用于计算;否则预设深度值用来。
交叉点也向上追踪以检查水是否在地形下并且不需要渲染它。
吸收#
Absorption 是一个选项,可以创建有限盆地的效果,或者相反,创建没有明显边界的开放水面。
- 如果启用Absorption ,则波浪沿网格周长分散。在这种情况下,网格边缘的水位将逐渐下降到零水位。
- 如果禁用,则模拟来自墙壁的反冲:到达水边时的波浪被反射并以相反的方向返回。
优化仿真#
更新每一帧远离相机的大量物体,这些物体几乎无法区分或观察为质量是一种资源浪费。
为了提高性能并避免过度负载,可以进行水模拟更新了降低的帧率.当 Water body 超出 Update Distance Limit 参数指定的区域时,不执行物理计算,但对象保留其浮力。
下面给出的一组帧速率使您能够指定在对象可见、仅其阴影可见或根本不可见时应更新水模拟的频率。
此功能使用默认设置启用,可确保最佳性能,并且可以在 UnigineEditor 中或通过 API 在运行时针对每个对象进行调整。
指定水体#
通过将 Water body 分配给对象统一编辑器执行以下步骤:
- 打开 World Hierarchy 窗口。
-
选择 Water Mesh 或 Dynamic Mesh 对象以将 Water body 分配给。
确保对象的网格满足要求! -
转到 Parameters 窗口中的 Physics 选项卡并分配一个物理身体通过选择 Body -> Water 到选定的对象。
- 如有必要,设置主体名称并更改其他参数。