HMS Core 3D流体仿真技术,打造移动端PC级流体动效
移动设备硬件的高速发展,让游戏行业发生翻天覆地的变化,许多酷炫的游戏效果不再局限于电脑端,玩家在移动端就能享受到场景更逼真、画质更清晰、体验更流畅的游戏服务。但由于移动设备算力不足,为了实现真实感的水体效果,很多游戏厂商采用预计算的方法减少实时仿真的计算开销,但水体场景在移动端的流体效果仍然不佳。
真实感水体的模拟一直是图形学和游戏开发领域的难点问题,对硬件算力要求也很高,因此大多数真实的水体模拟场景只出现在PC和主机游戏中。为了解决移动端水体流动真实感的问题,提升开发者应用开发的效率,HMS Core图形引擎服务(Scene Kit)推出了3D流体仿真技术,有效解决3D流体动效在移动设备上的实时性和功耗的问题。

3D流体仿真技术
流体力学中流体的运动可以用偏微分方程表示,该方程称为纳维-斯托克斯(NS)方程,如公式(1)所示
█((∂ u ⃗)/∂t=g ⃗-1/ρ ∇p +ν∇⋅∇u ⃗ -u ⃗⋅∇u ⃗#
(1) )该方程描述了流体动量变化与流体内部的压力(1/ρ ∇p)、粘滞力(ν∇⋅∇u ⃗)以及重力( g ⃗)之间的关系。流体力学中对流体运动有拉格朗日和欧拉两种描述方法,拉格朗日描述用粒子方式对流体建模,每个粒子上携带流体的状态信息在空间中流动;欧拉描述把仿真区域划为空间中的网格,每个网格上存储流过该位置的流体的状态信息。如图2所示。

图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图形引擎服务的信息,请访问华为开发者联盟-HMS Core图形引擎服务官网。
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
HMS Core 3D流体仿真技术,打造移动端PC级流体动效的更多相关文章
- 华为开发者大会2022:HMS Core 3D建模服务再升级,万物皆可驱动
11月4日,HDC2022华为开发者大会在东莞松山湖举办.在本次大会的HMS Core创新图形能力分论坛中,HMS Core重点介绍了其在3D技术领域的创新应用方向,其中3D建模服务展示了创新的自动骨 ...
- HMS Core图形图像技术展现最新功能和应用场景,加速构建数智生活
[2022年7月15日,杭州]HUAWEI Developer Day(华为开发者日,简称HDD)杭州站拉开帷幕.在数字经济不断发展的今天,开发者对图形图像的开发需求更加深入和多样化,从虚拟环境重构到 ...
- HMS Core挑战赛故事:鞋、街景、手办、玩具,原来这些都可以3D建模
HMS Core线上Codelabs挑战赛第3期中,开发者通过学习和运用HMS Core开发的3D建模服务,生成3D建模应用demo,再使用demo为自己身边的一个实物完成建模.在提交的作品中,小编发 ...
- 华为HMS Core携手超图为三维GIS注入新动能
6月30日,在2022(第五届)GIS软件技术大会GIS基础软件新技术板块论坛上,华为联合超图推出了基于HMS Core 3D Engine开发的高保真三维GIS插件,通过3D渲染技术助力三维GIS实 ...
- 华为在HDC2021发布全新HMS Core 6 宣布跨OS能力开放
[2021年10月22日·东莞]华为开发者大会 2021(Together)于今天正式开幕,华为在主题演讲中正式发布全新的HMS Core 6,向全球开发者开放7大领域的69个Kit和21,738个A ...
- 华为开发者大会HDC2022:HMS Core 持续创新,与开发者共创美好数智生活
11月4日,华为开发者大会HDC2022在东莞松山湖拉开帷幕.HMS Core在本次大会上带来了包括音频编辑服务的高拟真歌声合成技术.视频编辑服务的智能提取精彩瞬间功能.3D Engine超大规模数字 ...
- HMS Toolkit自动化环境配置,助您高效集成HMS Core
HMS Toolkit是一个IDE插件,提供包括应用创建.编码和转换.调测和测试.提交上架等多个端到端开发工具,借助HMS Toolkit可提升3倍以上集成开发效率,可以帮助开发者以更高的开发效率.更 ...
- HDC2021:HMS Core分析服务,数智化营销闭环方案帮助开发者实现精益增长
10.22-10.24华为开发者大会2021(Together)在东莞如期举行.本次大会上,HMS Core华为分析服务作为多平台.跨设备的一站式数据分析平台以数据驱动业务智能决策为理念,带来了数智化 ...
- HMS Core Discovery第14期直播预告~纵享丝滑剪辑,释放视频创作力
[导读] 拍摄.导入.特效.卡点.BGM-几步简单的操作,我们便可将生活的瞬间用视频记录与分享.应用前沿AI技术,提供一站式视频处理能力,帮助开发者们构建更智能.更易用.更专业的视频剪辑软件,打造视频 ...
- 放码来战!HMS Core线上Codelabs挑战赛正式开始
亲爱的开发者,在1024程序员节即将到来之际,HMS Core准备了一场线上Codelabs挑战赛,现向你发出诚挚邀请,希望你能将新奇的想法和对产品的思考融入代码,用技术与世界对话. HMS Core ...
随机推荐
- POJ2686 Traveling by Stagecoach (状压DP)
将车票的使用情况用二进制表示状态,对其进行转移即可. 但是我一开始写的代码是错误的(注释部分),看似思路是正确的,但是暗藏很大的问题. 枚举S,我们要求解的是dp[S][v],这个是从u转移过来的,不 ...
- 解决在JS中阻止定时器“重复”开启问题、Vue中定时器的使用
1.问题描述 在一些需求开发中.需要设定软件提供服务的时间段(营业时间).这时可以选择定时器来实现.可以选择让定时器每隔一段时间检测当前时间是否在服务时间.到达服务时间.进入服务状态.未到服务时间.进 ...
- 如何用webgl(three.js)搭建一个3D库房,3D仓库3D码头,3D集装箱,车辆定位,叉车定位可视化孪生系统——第十五课
序 又是快两个月没写随笔了,长时间不总结项目,不锻炼文笔,一开篇,多少都会有些生疏,不知道如何开篇,如何写下去.有点江郎才尽,黔驴技穷的感觉. 写随笔,通常三步走,第一步,搭建框架,先把你要写的内容框 ...
- $_SERVER['HTTP_USER_AGENT']:在PHP中HTTP_USER_AGENT是用来获取用户的相关信息的,包括用户使用的浏览器,操作系统等信息
在PHP中HTTP_USER_AGENT是用来获取用户的相关信息的,包括用户使用的浏览器,操作系统等信息. 我机器:操作系统:WIN7旗舰版 64操作系统 以下为各个浏览器下$_SERVER['HTT ...
- Python--网络编程学习笔记系列02 附:tcp服务端,tcp客户端
Python--网络编程学习笔记系列02 TCP和UDP的概述: udp通信模型类似于写信,不需要建立相关链接,只需要发送数据即可(现在几乎不用:不稳定,不安全) tcp通信模型类似于打电话,一定要建 ...
- 以开发之名 | bilibili会员购让IP在眼前动起来
随着ACG文化(二次元文化)影响力的不断提升,哔哩哔哩平台上衍生品消费群体不断扩大,手办行业迅速崛起.2017年,B站推出ACG衍生品消费品牌bilibili会员购,涵盖二次元手办销售等多项业务,拓展 ...
- MFC 学习笔记
MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...
- 前端常见loading动画
loading动画是前端页面加载时必不可少的元素,好看合适的加载动画会极大的提升用户体验与系统的交互效果.下面为大家提供几种简单的加载动画效果,如果帮助到你了请点赞评论. 1.无限循环的圆圈 < ...
- Mp3文件标签信息读取和写入(Kotlin)
原文:Mp3文件标签信息读取和写入(Kotlin) - Stars-One的杂货小窝 最近准备抽空完善了自己的星之小说下载器(JavaFx应用 ),发现下载下来的mp3文件没有对应的标签 也是了解可以 ...
- C#使用内存和指针方式将字节数组转换为Bitmap
/// <summary> /// 指针方式转 /// </summary> /// <param name="Width">图像的宽</ ...