[行业动态] 【技术分享】《解限机》中的虚拟几何体技术

ditouzoulu 显示全部楼层 发表于 2024-1-7 20:42:30

在2023年Unity技术开放日广州站中,珠海西山居引擎平台技术总监黄锦寿分享了《Mecha BREAK》(即《解限机》)中的虚拟几何体(Virtual Geometry)等GPU Driven相关功能的开发与落地。2024年1月2日,团结引擎官方开放了Beta版本的虚拟几何体功能。

本文为黄锦寿演讲内容分享。

原标题:

《“Mecha BREAK”中的Virtual Geometry-powered by fusion》

视频链接:https://www.bilibili.com/video/BV1tg4y1k7hM/?spm_id_from=333.788&vd_source=d137f59271b4afadbb842b16dac5ca39

团结引擎虚拟几何体官方文档:

https://docs.unity.cn/cn/tuanjiemanual/Manual/VirtualGeometry.html

  1. 游戏特点

image.png

第三人称TPS对战;

3v3/6v6/大世界战场,多种玩法;

实时弹道演算与丰富的场景建筑破坏;

独特个性化的机甲;

高自由度机甲涂装自定义。

  1. 定制开发Virtual Geometry的原因

image.png

大世界,超大地图,场景复杂;

细节丰富,模型数量多、精度高;

战斗复杂,特效华丽,大量子弹实时弹道演算,精准碰撞检测;

高精度模型需要制作多级LOD模型,美术资源制作工作量大、周期长。

  1. Virtual Geometry的好处

image.png

只需制作高精度模型;

充分利用GPU的并行算力,释放CPU;

减少内存使用(模型数据只存在显存中);

支持同场景数亿个三角面;

支持Mesh Streaming实时流式加载,类似于virtual texture;

支持植被系统;

支持骨骼动画模型(Skinned Mesh);

支持HDRP、URP;

支持多平台(PC、Android、IOS、Xbox、PS5)。

  1. 超高精度手办级模型表现

image.png

image.png

支持涂装系统,玩家可高自由度定制涂装效果;

LOD切换,不会产生明显跳变。

  1. 基于VG实现的可交互植被

image.png

远处使用Imposter,近处是实体模型;

可交互、可破坏;

使用GPU进行碰撞检测。

  1. VG骨骼动画模型

image.png

image.png

跟传统的GPU Skinning不一样,不需要把动作预烘焙到Texture;

支持机甲换装,涂装系统;

支持各种动作系统(动作融合、IK、Rig);

多线程更新骨骼动画数据上传GPU;

一次DrawCall绘制所有不同的蒙皮动画模型。

  1. 一次Drawcall绘制不同Mesh不同动作不同类型的骨骼动画模型

image.png

相同的材质Shader;

Structured Buffer(骨骼数据、材质参数...);

TextureArray或Texture Atlas(纹理 法线...);

Vertex Shader中计算蒙皮动画。

  1. VG骨骼动画模型

image.png

同屏渲染200个随机动作不同Mesh的骨骼动画模型,普通模型帧率为40FPS,VG模型为90多FPS。

  1. 同场景数亿个三角面

image.png

高密度场景,上万个建筑与植物;

超高精度模型,单棵树375万面;

当前区域模型总三角面数超十亿。

  1. VG的调试模式

image.png

image.png

包括Triangle、Cluster、Material ID、MipLevel、Max MipLevel、Distance等模式。

  1. Virtual Geometry的实现原理

image.png

1)模型切分Cluster,生成LOD

2)完整的GPU场景(包括:数据上传、裁剪剔除、LOD计算、排序、渲染):

Instance裁剪(视锥裁剪、遮挡剔除、距离裁剪、屏幕像素占比裁剪);

Cluster级别的裁剪剔除(视锥裁剪、遮挡剔除);

在裁剪过程计算每个可见Cluster当前的LOD值;

加载所需要LOD级别的Cluster数据并更新到GPU显存;

对所有可见Cluster按材质进行归类排序渲染。

  1. 模型切分Cluster

image.png

image.png

image.png

1)原始Mesh作为LOD0切分Cluster

2)把切分出来的Cluster平均分成N组

3)对每组锁边进行减面到原来的一半作为LOD1

4)每组重新划分Cluster

5)循环以上步骤,直到只有一个Cluster作为最后一级LOD

切分原则:切出来的Cluster面积尽量接近。

  1. 切分Cluster效果演示

image.png

通过切分算法对Cluster做演示,每个不同的色块对应一个子的mesh,即一个cluster。每个cluster里面有其包围盒数据,用于后续GPU管线中的裁剪。

  1. VG与普通Mesh效果对比

image.png

image.png

VG模型裁剪时,以cluster而非单个模型为单位进行裁剪,可大大降低渲染压力,从而提升效率。

  1. Virtual Geometry的模型数据压缩率

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

GPUScene Thread类似于渲染线程,Main Thread发起上传数据、数据更新等命令,交给线程做一些数据预处理,从GPU裁剪完,回读回来决定哪些page信息加载到显存中。最下面是GPU计算,包括数据解压、裁剪、排序、渲染均在GPU中完成,CPU仅需要把模型Instance数据添加到GPU中,整个计算线程是多线程的,主线程不会被阻塞。

  1. Virtual Geometry的显存使用量

image.png

整个VG系统大概需要300M的显存;

单场景大概能节省900M的Mesh内存。

  1. VG场景与普通场景的性能数据对比

image.png

场景模型面数增加一倍;

CPU耗时降低,GPU利用率增加;

FPS大幅提高。

  1. 移动平台的VG

image.png

虚拟几何体已支持IOS(Metal)和Android(Vulkan),甚至可以在Xbox和PS5上运行。

  1. 最初构想VG版本VGBox

image.png

最初版本设想,模型可无限细分,每级别按一半递减,支持镜头裁剪和遮蔽裁剪。

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部