7

HMS Core 3D流体仿真技术,打造移动端PC级流体动效 - HMSCore技术团队

 2 years ago
source link: https://www.cnblogs.com/hmscore/p/17005380.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

移动设备硬件的高速发展,让游戏行业发生翻天覆地的变化,许多酷炫的游戏效果不再局限于电脑端,玩家在移动端就能享受到场景更逼真、画质更清晰、体验更流畅的游戏服务。但由于移动设备算力不足,为了实现真实感的水体效果,很多游戏厂商采用预计算的方法减少实时仿真的计算开销,但水体场景在移动端的流体效果仍然不佳。

真实感水体的模拟一直是图形学和游戏开发领域的难点问题,对硬件算力要求也很高,因此大多数真实的水体模拟场景只出现在PC和主机游戏中。为了解决移动端水体流动真实感的问题,提升开发者应用开发的效率,HMS Core图形引擎服务(Scene Kit)推出了3D流体仿真技术,有效解决3D流体动效在移动设备上的实时性和功耗的问题。

up-8e0f6d7fd33e1355369b79e67094e4ab576.gif

3D流体仿真技术

流体力学中流体的运动可以用偏微分方程表示,该方程称为纳维-斯托克斯(NS)方程,如公式(1)所示

█((∂ u ⃗)/∂t=g ⃗-1/ρ ∇p +ν∇⋅∇u ⃗ -u ⃗⋅∇u ⃗#

(1) )该方程描述了流体动量变化与流体内部的压力(1/ρ ∇p)、粘滞力(ν∇⋅∇u ⃗)以及重力( g ⃗)之间的关系。流体力学中对流体运动有拉格朗日和欧拉两种描述方法,拉格朗日描述用粒子方式对流体建模,每个粒子上携带流体的状态信息在空间中流动;欧拉描述把仿真区域划为空间中的网格,每个网格上存储流过该位置的流体的状态信息。如图2所示。

2396482-20221226113653805-1411580639.png

图2 欧拉描述与拉格朗日描述

模拟真实的流体效果需要大量的粒子或者网格,数量可达到十万、百万级别,但使用CPU串行计算的方式仿真需要几秒才能完成一帧数据的计算,无法满足实时性要求。而GPU在高性能并行计算领域有着巨大优势,因此在HMS Core图形引擎服务中,我们利用GPU加速技术在移动设备上实现流体仿真。

不过,仅通过GPU硬件加速不能完全满足移动设备上流体实时仿真的要求,还需要提升GPU的运行效率,以及减少仿真的计算量,从而降低GPU的负载以及带宽的使用,避免高负荷高带宽运行导致的设备发烫等体验问题。在流体运动的两种描述方法中,拉格朗日方法由于粒子状态受周围其它粒子的影响,计算时需要先搜索邻域粒子,这个过程对并行计算不够友好,难以发挥并行计算的优势。而欧拉描述中的每个网格状态数据的计算过程都是相同的,更适合并行计算。因此为了提升GPU的并行效率,HMS Core图形引擎服务采用欧拉方法进行流体仿真。

采用欧拉方法构建流体模型,先将仿真区域划分成均匀的网格,构造出流体的速度场、密度场等数据。如图3所示。

2396482-20221226113655646-920003726.png

图3 红点表示密度、压强数据的存储位置,红色箭头表示速度场数据

黑色网格是密度场网格,速度场网格在密度场网格基础上沿x、y方向进行半个网格偏移(蓝色网格),密度存储在密度场网格中心点,速度场数据存储在密度场网格顶点上,同时也是速度场网格中心点,这种形式可以很方便的实现中心差分计算,实际计算时需要将速度场按维度拆分。再引入有向距离场(SDF)数据描述流体的边界,实现流体与边界的碰撞效果。如图4所示。

2396482-20221226113658679-1830419556.png

图4 密度场网格,棕色区域表示固体边界,蓝色区域表示流体,白色区域表示空气。

在流体模型构建完成后,再利用前面提到的纳维-斯托克斯(NS)方程进行仿真计算,计算过程包括求解重力、压强、粘度、对流4步,分别对应公式(1)中等号右边的四项。

压强和粘度求解过程复杂,通过大量优化将求解过程简化为线性方程组的求解,从而降低计算复杂度,减少计算量。方程组求解采用快速收敛的解法,同时进行精度取舍从而降低计算开销。数据存储格式的优化,也达到降低GPU带宽使用、提高GPU cache命中率的效果。

求解对流项时,需要考虑流体与固体边界的碰撞,图形引擎服务采用一种统一建模的方式描述空气、流体、固体网格,如图5所示。

2396482-20221226113700249-2121704532.png

图5红色表示在边界外部,灰色区域表示边界,绿色区域表示边界内部

这样在计算时可以统一处理全部网格,无需对流体、固体区域分别计算,可以减少计算逻辑,提升GPU线程的运行效率。

通过以上多种技术方法,HMS Core图形引擎服务实现了GPU运行效率的提升以及流体仿真计算量的降低,从而在移动设备上实现了较低功耗的3D流体实时仿真。再结合图形渲染的其他能力,最终在移动设备上能够实现3D流体的流动、飞溅、反射、折射等效果,让用户手机不发烫,还能拥有实时流畅的流体体验。

3D流体仿真技术来自华为2012实验室,通过HMS Core图形引擎服务向开发者开放。HMS Core图形引擎服务致力于为开发者提供高性能、低功耗的引擎服务,帮助开发者制作高品质的3D应用,赋能更多应用走入数字世界。

其他更多关于HMS Core图形引擎服务的信息,请访问华为开发者联盟-HMS Core图形引擎服务官网

了解更多详情>>

访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解 HMS Core 最新技术资讯~


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK