OpenHarmony开发者论坛
标题:
【技术分享】《解限机》中的虚拟几何体技术
[打印本页]
作者:
ditouzoulu
时间:
2024-1-7 20:42
标题:
【技术分享】《解限机》中的虚拟几何体技术
[md]在2023年Unity技术开放日广州站中,珠海西山居引擎平台技术总监黄锦寿分享了《Mecha BREAK》(即《解限机》)中的虚拟几何体(Virtual Geometry)等GPU Driven相关功能的开发与落地。2024年1月2日,团结引擎官方开放了Beta版本的虚拟几何体功能。
本文为黄锦寿演讲内容分享。
**原标题:**
《“Mecha BREAK”中的Virtual Geometry-powered by fusion》
**视频链接:**[
https://www.bilibili.com/video/B ... fadbb842b16dac5ca39
](
https://www.bilibili.com/video/B ... fadbb842b16dac5ca39
)
**团结引擎虚拟几何体官方文档:**
[
https://docs.unity.cn/cn/tuanjie ... irtualGeometry.html
](
https://docs.unity.cn/cn/tuanjie ... irtualGeometry.html
)
1. **游戏特点**
![image.png](
https://forums-obs.openharmony.c ... qzai7il3ioowc3e.png
"image.png")
![](file:///C:\Users\BIANZH~1\AppData\Local\Temp\ksohtml18060\wps29.jpg)第三人称TPS对战;
3v3/6v6/大世界战场,多种玩法;
实时弹道演算与丰富的场景建筑破坏;
独特个性化的机甲;
高自由度机甲涂装自定义。
1. **定制开发Virtual Geometry的原因**![](file:///C:\Users\BIANZH~1\AppData\Local\Temp\ksohtml18060\wps30.jpg)
![image.png](
https://forums-obs.openharmony.c ... 9xzz5ff8qr72zm8.png
"image.png")
大世界,超大地图,场景复杂;
细节丰富,模型数量多、精度高;
战斗复杂,特效华丽,大量子弹实时弹道演算,精准碰撞检测;
高精度模型需要制作多级LOD模型,美术资源制作工作量大、周期长。
1. **Virtual Geometry的好处**
![image.png](
https://forums-obs.openharmony.c ... 0kvzjpqolo2jllm.png
"image.png")
只需制作高精度模型;
充分利用GPU的并行算力,释放CPU;
减少内存使用(模型数据只存在显存中);
支持同场景数亿个三角面;
支持Mesh Streaming实时流式加载,类似于virtual texture;
支持植被系统;
支持骨骼动画模型(Skinned Mesh);
支持HDRP、URP;
支持多平台(PC、Android、IOS、Xbox、PS5)。
1. **超高精度手办级模型表现**
![image.png](
https://forums-obs.openharmony.c ... 1iylo2mozmggl1d.png
"image.png")
![image.png](
https://forums-obs.openharmony.c ... aab1s4sg1d43wbt.png
"image.png")
支持涂装系统,玩家可高自由度定制涂装效果;
LOD切换,不会产生明显跳变。
1. **基于VG实现的可交互植被**
![image.png](
https://forums-obs.openharmony.c ... s7qsaxgoao9vgx6.png
"image.png")
远处使用Imposter,近处是实体模型;
可交互、可破坏;
使用GPU进行碰撞检测。
1. **VG骨骼动画模型**
![image.png](
https://forums-obs.openharmony.c ... fq077q3fojq0u0z.png
"image.png")
![image.png](
https://forums-obs.openharmony.c ... 8n43p54q4nf37zp.png
"image.png")
跟传统的GPU Skinning不一样,不需要把动作预烘焙到Texture;
支持机甲换装,涂装系统;
支持各种动作系统(动作融合、IK、Rig);
多线程更新骨骼动画数据上传GPU;
一次DrawCall绘制所有不同的蒙皮动画模型。
1. **一次Drawcall绘制不同Mesh不同动作不同类型的骨骼动画模型**
![image.png](
https://forums-obs.openharmony.c ... jlytw8vk8jhyhje.png
"image.png")
相同的材质Shader;
Structured Buffer(骨骼数据、材质参数...);
TextureArray或Texture Atlas(纹理 法线...);
Vertex Shader中计算蒙皮动画。
1. **VG骨骼动画模型**
![image.png](
https://forums-obs.openharmony.c ... yyj6e200zzizy6x.png
"image.png")
同屏渲染200个随机动作不同Mesh的骨骼动画模型,普通模型帧率为40FPS,VG模型为90多FPS。
1. **同场景数亿个三角面**
![image.png](
https://forums-obs.openharmony.c ... jolnvbomo0brlr0.png
"image.png")
高密度场景,上万个建筑与植物;
超高精度模型,单棵树375万面;
当前区域模型总三角面数超十亿。
1. **VG的调试模式**
![image.png](
https://forums-obs.openharmony.c ... qn8emfgzgigaeft.png
"image.png")
![image.png](
https://forums-obs.openharmony.c ... xc81cc2pw4az8xa.png
"image.png")
包括Triangle、Cluster、Material ID、MipLevel、Max MipLevel、Distance等模式。
1. **Virtual Geometry的实现原理**
![image.png](
https://forums-obs.openharmony.c ... zop24zcooi1ptmo.png
"image.png")
1)模型切分Cluster,生成LOD
2)完整的GPU场景(包括:数据上传、裁剪剔除、LOD计算、排序、渲染):
Instance裁剪(视锥裁剪、遮挡剔除、距离裁剪、屏幕像素占比裁剪);
Cluster级别的裁剪剔除(视锥裁剪、遮挡剔除);
在裁剪过程计算每个可见Cluster当前的LOD值;
加载所需要LOD级别的Cluster数据并更新到GPU显存;
对所有可见Cluster按材质进行归类排序渲染。
1. **模型切分Cluster**
![image.png](
https://forums-obs.openharmony.c ... 2k5h28v287hszty.png
"image.png")
![image.png](
https://forums-obs.openharmony.c ... jyijhpf4iyiaapa.png
"image.png")
![image.png](
https://forums-obs.openharmony.c ... lesgsyyu9zsz5pj.png
"image.png")
1)原始Mesh作为LOD0切分Cluster
2)把切分出来的Cluster平均分成N组
3)对每组锁边进行减面到原来的一半作为LOD1
4)每组重新划分Cluster
5)循环以上步骤,直到只有一个Cluster作为最后一级LOD
切分原则:切出来的Cluster面积尽量接近。
1. **切分Cluster效果演示**
![image.png](
https://forums-obs.openharmony.c ... pat661totctyzfv.png
"image.png")
通过切分算法对Cluster做演示,每个不同的色块对应一个子的mesh,即一个cluster。每个cluster里面有其包围盒数据,用于后续GPU管线中的裁剪。
1. **VG与普通Mesh效果对比**
![image.png](
https://forums-obs.openharmony.c ... nu01uvn6hgj07jf.png
"image.png")
![image.png](
https://forums-obs.openharmony.c ... 2jb9q2c9s5zzhcz.png
"image.png")
VG模型裁剪时,以cluster而非单个模型为单位进行裁剪,可大大降低渲染压力,从而提升效率。
1. **Virtual Geometry的模型数据压缩率**
![image.png](
https://forums-obs.openharmony.c ... 9rzzz0mmzzc6c06.png
"image.png")
以25W面左右的模型为例,原始Mesh内存14.5M,FBX文件大小9.47MB;VG Mesh(含14级LOD)Page文件大小6.10MB;
磁盘占用空间,压缩率为65%,加上LOD Mesh的话,压缩率预估低于50%;
VG模型不占用内存,只存在显存当中,大大释放内存压力。
1. **GPU场景流程图**
![image.png](
https://forums-obs.openharmony.c ... v3anpuhzl82cu0k.png
"image.png")
GPUScene Thread类似于渲染线程,Main Thread发起上传数据、数据更新等命令,交给线程做一些数据预处理,从GPU裁剪完,回读回来决定哪些page信息加载到显存中。最下面是GPU计算,包括数据解压、裁剪、排序、渲染均在GPU中完成,CPU仅需要把模型Instance数据添加到GPU中,整个计算线程是多线程的,主线程不会被阻塞。
1. **Virtual Geometry的显存使用量**
![image.png](
https://forums-obs.openharmony.c ... xx32i3ukhikl3uo.png
"image.png")
整个VG系统大概需要300M的显存;
单场景大概能节省900M的Mesh内存。
1. **VG场景与普通场景的性能数据对比**
![image.png](
https://forums-obs.openharmony.c ... kfrwmkmdurwemwe.png
"image.png")
场景模型面数增加一倍;
CPU耗时降低,GPU利用率增加;
FPS大幅提高。
1. **移动平台的VG**
![image.png](
https://forums-obs.openharmony.c ... abyxkcxa9nwyxx5.png
"image.png")
虚拟几何体已支持IOS(Metal)和Android(Vulkan),甚至可以在Xbox和PS5上运行。
1. **最初构想VG版本VGBox**
![image.png](
https://forums-obs.openharmony.c ... 3bw8v3vrool53vf.png
"image.png")
最初版本设想,模型可无限细分,每级别按一半递减,支持镜头裁剪和遮蔽裁剪。
[/md]
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5