HMS Core 3D 流体仿真技术,打造移动端 PC 级流体动效
移动设备硬件的高速发展,让游戏行业发生翻天覆地的变化,许多酷炫的游戏效果不再局限于电脑端,玩家在移动端就能享受到场景更逼真、画质更清晰、体验更流畅的游戏服务。但由于移动设备算力不足,为了实现真实感的水体效果,很多游戏厂商采用预计算的方法减少实时仿真的计算开销,但水体场景在移动端的流体效果仍然不佳。
真实感水体的模拟一直是图形学和游戏开发领域的难点问题,对硬件算力要求也很高,因此大多数真实的水体模拟场景只出现在 PC 和主机游戏中。为了解决移动端水体流动真实感的问题,提升开发者应用开发的效率,HMS Core 图形引擎服务(Scene Kit)推出了 3D 流体仿真技术,有效解决 3D 流体动效在移动设备上的实时性和功耗的问题。
图 1
3D 流体仿真技术
图 2 欧拉描述与拉格朗日描述
模拟真实的流体效果需要大量的粒子或者网格,数量可达到十万、百万级别,但使用 CPU 串行计算的方式仿真需要几秒才能完成一帧数据的计算,无法满足实时性要求。而 GPU 在高性能并行计算领域有着巨大优势,因此在 HMS Core 图形引擎服务中,我们利用 GPU 加速技术在移动设备上实现流体仿真。
不过,仅通过 GPU 硬件加速不能完全满足移动设备上流体实时仿真的要求,还需要提升 GPU 的运行效率,以及减少仿真的计算量,从而降低 GPU 的负载以及带宽的使用,避免高负荷高带宽运行导致的设备发烫等体验问题。在流体运动的两种描述方法中,拉格朗日方法由于粒子状态受周围其它粒子的影响,计算时需要先搜索邻域粒子,这个过程对并行计算不够友好,难以发挥并行计算的优势。而欧拉描述中的每个网格状态数据的计算过程都是相同的,更适合并行计算。因此为了提升 GPU 的并行效率,HMS Core 图形引擎服务采用欧拉方法进行流体仿真。
采用欧拉方法构建流体模型,先将仿真区域划分成均匀的网格,构造出流体的速度场、密度场等数据。如图 3 所示。
图 3 红点表示密度、压强数据的存储位置,红色箭头表示速度场数据
黑色网格是密度场网格,速度场网格在密度场网格基础上沿 x、y 方向进行半个网格偏移(蓝色网格),密度存储在密度场网格中心点,速度场数据存储在密度场网格顶点上,同时也是速度场网格中心点,这种形式可以很方便的实现中心差分计算,实际计算时需要将速度场按维度拆分。再引入有向距离场(SDF)数据描述流体的边界,实现流体与边界的碰撞效果。如图 4 所示。
图 4 密度场网格,棕色区域表示固体边界,蓝色区域表示流体,白色区域表示空气。
在流体模型构建完成后,再利用前面提到的纳维-斯托克斯(NS)方程进行仿真计算,计算过程包括求解重力、压强、粘度、对流 4 步,分别对应公式(1)中等号右边的四项。
压强和粘度求解过程复杂,通过大量优化将求解过程简化为线性方程组的求解,从而降低计算复杂度,减少计算量。方程组求解采用快速收敛的解法,同时进行精度取舍从而降低计算开销。数据存储格式的优化,也达到降低 GPU 带宽使用、提高 GPU cache 命中率的效果。
求解对流项时,需要考虑流体与固体边界的碰撞,图形引擎服务采用一种统一建模的方式描述空气、流体、固体网格,如图 5 所示。
图 5 红色表示在边界外部,灰色区域表示边界,绿色区域表示边界内部
这样在计算时可以统一处理全部网格,无需对流体、固体区域分别计算,可以减少计算逻辑,提升 GPU 线程的运行效率。
通过以上多种技术方法,HMS Core 图形引擎服务实现了 GPU 运行效率的提升以及流体仿真计算量的降低,从而在移动设备上实现了较低功耗的 3D 流体实时仿真。再结合图形渲染的其他能力,最终在移动设备上能够实现 3D 流体的流动、飞溅、反射、折射等效果,让用户手机不发烫,还能拥有实时流畅的流体体验。
3D 流体仿真技术来自华为 2012 实验室,通过 HMS Core 图形引擎服务向开发者开放。HMS Core 图形引擎服务致力于为开发者提供高性能、低功耗的引擎服务,帮助开发者制作高品质的 3D 应用,赋能更多应用走入数字世界。
其他更多关于 HMS Core 图形引擎服务的信息,请访问 developer.huawei.com/consumer/cn/hms/huawei-scenekit/?ha_source=hmswm
评论