当前位置: 首页 > 后端技术 > Java

HMSCore3D流体模拟技术打造移动PC级流体动力效果

时间:2023-04-02 00:14:50 Java

移动设备硬件的快速发展,给游戏行业带来了翻天覆地的变化。享受场景更逼真、画质更清晰、体验更流畅的游戏服务。但是由于移动设备的计算能力不足,为了达到逼真的水景效果,很多游戏厂商采用预计算的方式来降低实时模拟的计算开销,但是水景在移动端的流水效果是还是不好。逼真的水体模拟一直是图形和游戏开发领域的难题,对硬件计算能力也有很高的要求。因此,大多数真实的水体模拟场景只出现在PC和主机游戏中。为解决移动端水流的真实感问题,提高开发者应用开发效率,HMSCore图形引擎服务(SceneKit)推出3D流体模拟技术,可有效解决水流的实时性和实时性问题。移动设备上3D流体动力学效果的功能问题。消费问题。三维流体模拟技术流体力学中流体的运动可以用一个偏微分方程表示,称为纳维-斯托克斯(NS)方程,如公式(1)所示█((?u?)/?t=g?-1/ρ?p+ν???u?-u???u?#(1))这个方程描述了流体动量变化与流体内压(1/ρ?p)、粘度之间的关系力(ν???u?)和重力(g?)之间的关系。在流体力学中,有两种描述流体运动的方法,拉格朗日法和欧拉法。拉格朗日以粒子的形式描述流体建模,每个粒子携带流体状态信息并在空间中流动;欧拉描述模拟区域在空间上被划分为网格,每个网格存储流体流经该位置的状态信息。如图2所示。图2欧拉描述和拉格朗日描述模拟真实的流体效果需要大量的粒子或网格,数量可以达到10万或数百万,但使用CPU串行计算完成一帧模拟需要几秒钟数据的计算不能满足实时性要求。GPU在高性能并行计算领域有很大的优势,所以在HMSCore图形引擎服务中,我们利用GPU加速技术,在移动设备上实现流体模拟。然而,仅靠GPU硬件加速并不能完全满足移动设备上实时流体模拟的要求。还需要提高GPU的运行效率,降低模拟的计算负荷,从而降低GPU的负荷和带宽的使用,避免高负荷高带宽运行。由此产生的设备发热等体验问题。在流体运动的两种描述方法中,拉格朗日方法需要先搜索相邻粒子,因为粒子的状态会受到周围其他粒子的影响。这个过程对并行计算不友好,难以发挥并行计算的优势。但是欧拉描述的每一个网格状态数据的计算过程是相同的,更适合并行计算。因此,为了提高GPU的并行效率,HMSCore图形引擎服务采用欧拉法进行流体模拟。流体模型是使用Euler方法构建的。首先将模拟区域划分成均匀的网格,构建流体的速度场、密度场等数据。如图3所示。图3.红点代表密度和压力数据的存储位置。红色箭头代表速度场数据。黑色网格是密度场网格。Shift(蓝色网格),密度存储在密度场网格的中心点,速度场数据存储在密度场网格的顶点,也是速度场网格的中心点。这种形式可以方便地实现中心差计算,实际计算时需要对速度场进行维数分割。然后引入定向距离场(SDF)数据来描述流体的边界,实现流体与边界的碰撞效果。如图4所示。图4密度场网格,棕色区域代表固体边界,蓝色区域代表流体,白色区域代表空气。流体模型构建完成后,采用上述纳维-斯托克斯(NS)方程进行仿真计算。计算过程包括求解重力、压力、粘性、对流四个步骤,对应式(1)中等号右边的四项。压力和粘度的求解过程比较复杂。通过大量的优化,将求解过程简化为求解线性方程组,从而降低了计算复杂度和计算量。方程组的求解采用快速收敛的求解方法,同时兼顾精度,降低计算成本。数据存储格式的优化也达到了降低GPU带宽占用,提高GPU缓存命中率的效果。在求解对流项时,需要考虑流体与固体边界的碰撞。图形引擎服务使用统一的建模方法来描述空气、流体和固体网格,如图5所示。图5中,红色区域表示边界,灰色区域表示边界,绿色区域表示边界内。这样在计算时可以统一处理所有的网格,不需要分别计算流体和固体区域,可以减少计算逻辑,提高GPU线程的运行效率。通过以上多种技术手段,HMSCore图形引擎服务实现了GPU运行效率的提升和流体模拟计算量的减少,从而在移动设备上以更低的功耗实现3D流体的实时模拟。结合图形渲染的其他能力,最终可以在移动设备上实现3D流体流动、飞溅、反射、折射等效果,让用户的手机不发热,也能拥有实时流畅的体验流畅的体验。3D流体模拟技术来自华为2012实验室,通过HMSCore图形引擎服务向开发者开放。HMSCore图形引擎服务致力于为开发者提供高性能、低功耗的引擎服务,帮助开发者打造高质量的3D应用,让更多的应用进入数字世界。更多HMSCore图形引擎服务信息,请访问华为开发者联盟-HMSCore图形引擎服务官网。更多详情>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMSCore最新技术资讯~