RecursiveFrog 发表于 2022-2-26 05:58

Unity模拟流体之「NVIDIA Flex for Unity」

1.可以模拟流体和软体的插件

最近项目需要调查模拟流体的功能,但我也想知道如何实际做到这一点。然而,当时我发现NVIDIA免费提供了一个很棒的插件。一款名为“NVIDIA Flex for Unity”的插件。 去年发布的,可以模拟流体、软体、布料等的运动。 现在已经发布了1.0 Beta版,这次我安装试了一下。
2.让流体出现

安装 NVIDIA Flex for Unity 并尝试使流体出现。从新创建中,在层次结构中创建一个平面作为舞台和一个立方体作为流体。然后,在Cube上,从Inspector栏中添加Add Component-> NVIDIA-> Flex-> Flex Soft Actor和Add Component-> NVIDIA-> Flex-> Flex Fluid Renderer到该组件。 我认为 Soft Actor 是一个表达柔体的脚本,而 Flex Fluid Renderer 是一个表达流体外观的脚本。将 FlexContainer 设置为添加的 Flex Soft Actor 的 Container,并将 New FlexSoft Asset 设置为 Soft Asset。 下图显示了设置状态。 FlexContainer 可以更改柔体的流体和柔软度等参数,FlexSoft Asset 可以更改要建模的粒子数量。 不要忘记检查 Flex Soft Actor 的Fluid。


可以从资源创建中创建新 FlexSoft 资源集。 如下图所示。


另外,我尝试了 FlexContainer,如下图所示。


开始游戏!



您可以看到 Cube 如何弹出和流动。

让我们仔细看看实际进行了什么样的计算。 当我检查 Flex Soft Actor 的绘制粒子时很容易理解。


可以看到液滴中有多个粒子。 构成立方体的粒子会弹出并表现得像流体!接下来,尝试加强颗粒之间的结合力。 我将 FlexContainer 的 Cohesion 从 0.01 乘以 50 到 0.5。


于是


由于粒子之间的结合力很强,因此可以认为它们就像粘液一样不会扩散。通过以这种方式调整参数,您可以重现各种流体的行为。
3.流体和刚体的组合

接下来,我想看看流体和刚体组合的行为。
最终的图像就像是海上的一艘船。
首先,像上次一样,在舞台的一侧做一堵墙,像水池一样储存液体。 它看起来像下图。 没有特别困难的设定。


它有点像果冻,但你可以看到容器是如何装满水的。在这里放下一个物体。 该对象使用 Add Component 将 Flex Solid Actor 组件化为立方体。 设置的 FlexSolidAsset 设置如下。


开始游戏


看起来像那样。
我不明白的是为什么它会漂浮在流体上,因为没有地方可以设置粒子的密度。 即使我增加了物体的粒子数,它也会漂浮,那么是否有一个参数可以在某处确定物体的质量?
4.让我们移动物体!

不知何故,我能够重现一个漂浮在水面上的物体,所以我想添加一些游戏元素。 这一次,我们将挑战使用箭头键移动对象的行为。
但是,我只是像以前一样将我在网上搜索到的脚本组件到对象中。
似乎有多种方法可以移动对象。 似乎有强制移动位置(通过键输入量移动位置)和向对象施加力(向键输入施加力以移动对象)的典型。 后者似乎表现得更接近实际现象,所以这次我将用后者移动物体。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{
    Rigidbody rb;
    float speed = 10.0f;

    // Use this for initialization
    void Start()
    {
      rb = GetComponent<Rigidbody>();
    }
    // Update is called once per frame
    void FixedUpdate()
    {
      float x = Input.GetAxis("Horizontal") * speed;
      float z = Input.GetAxis("Vertical") * speed;
      rb.AddForce(x, 0, z);
    }
}
我不知道这有多难,但它似乎为刚体提供了速度(加速度)。 刚体被添加到从添加组件创建的对象(立方体)。 再者,由于上面的Script也是一个组件,所以最终变成了Cube的内容,如下图所示。


启动! 在物体落在舞台上后尝试按键输入。 首先没有液体。
接下来,让我们添加流体。


我什至能够在流体上移动物体。
但是,如您所见,如果您继续键入密钥,您将“顺利”穿过墙壁。
感觉就像“你要去哪里?”
嗯,我不知道为什么到目前为止会发生这种情况。 我会研究一段时间。
这就是为什么这次我会在这里结束。
5.概括

这一次,我使用 Unity 来模拟流体的行为。
通过我今天所做的建模,我能够在没有太多处理重量的情况下移动它。
能够免费做这么有趣的事情真是太好了。
我很期待这个插件在未来的商业版本。
页: [1]
查看完整版本: Unity模拟流体之「NVIDIA Flex for Unity」