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