大数跨境
0
0

团结引擎虚拟几何体(Virtual Geometry)移动端正式上线

团结引擎虚拟几何体(Virtual Geometry)移动端正式上线 Unity官方平台
2025-11-12
5
导读:上亿面片量级的影视级实时渲染能力进入移动端

团结 1.7.3 版本中,虚拟几何体(Virtual Geometry, VG)功能正式支持 URP 渲染管线,以及包括 Android、iOS 在内的移动端设备。将上亿面片量级的影视级实时渲染能力从 PC 端带入到了移动端,旨在为移动端的次世代画质飞跃奠定坚实的技术基础。

以下场景为虚拟几何体示例场景,四个视角分别代表了渲染结果、ClusterID、TriangleID、InstanceID。这个场景的三角形面数规模在 10 亿左右,可以从 TriangleID 的视图下看到,场景中三角面十分密集。在经典的渲染管线中,实时渲染如此庞大数量的三角面几乎是不可能完成的事情。然而在虚拟几何体技术的加持下,在移动设备渲染如此精细的场景也成为了可能。

下面两图展示了此场景运行在 iphone13 (苹果A15芯片)上的状态,其中第二张图为场景中三角面的示意图。在此视角下有一个 12×13 的雕像阵列,其中每个雕像都是有 400 万面的扫描资产。那么在这个视角下,总计同屏实时渲染了超过 6 亿个三角面 [注1]。而在这样的中端机型上,可以以 30 帧的帧率稳定渲染这个画面。

值得一提的是,这个示例场景中不仅只包含超高面数的模型。场景中包含了超过 10000 个物体,超过 100 个的不同材质,其中包括了 alpha clip 材质。场景中添加了数十个点光源,并且使用了光照探针、光照贴图等全局光照方案。并且也添加了粒子特效、后处理等渲染效果。这并非仅仅只是一个只用于展示多面数渲染的场景,而是一个包含了众多应用场景的真实用例。

移动端虚拟几何体性能分析


  帧率对比


由于在较重的场景中无法运行经典的渲染管线,所以我们使用了如下所示的简单退化场景来对开启/关闭虚拟几何体的帧率进行对比。场景中依旧是扫描资产的雕像,每个雕像有 400 万面,共有 13 个雕像。视频上/下部分分别代表开启/关闭虚拟几何体的情况。在 iphone13 上开启虚拟几何体来渲染这些高模时,可以稳定在 60 帧进行渲染。然而关闭虚拟几何体,只使用普通的延迟渲染管线进行渲染时,帧率大约只有 10 帧左右。通过这个简单的场景,我们可以直观感受到虚拟几何体技术给移动设备上渲染高面数模型的能力带来的巨大提升。

  Draw Call 数目与显存占用对比

使用虚拟几何体技术可以大幅度降低在复杂场景下所需要的 Draw Call 数量以及显存占用。对于开始的示例场景,当关闭VG时,场景总共需要 5.5k 个 Draw Call 才能完成绘制,这里 Draw Call 数量较多是因为场景中有大量物体以及大量材质。场景总体需要大约 6GB 的显存占用,这里主要是因为场景中高面数模型数据占据显存 [注2]

关闭 VG 时,渲染参数

而当开启 VG 时,普通 Draw Call 只需要 625 个 [注3],VG 相关的 Draw Call 仅需 472 个,整体 Draw Call 数量降低约 80%。虚拟几何体管线区别于经典的延迟渲染管线,GBuffer 的渲染从逐物体进行变为逐材质进行。几何信息只需极少量 Draw Call 即可完成 Visibility Buffer 的绘制(在此场景下,仅需 6 次 Draw Call),而后逐材质进行 GBuffer 的绘制,Draw Call 数量与场景中材质数量正相关(此场景下需 466 次 Draw Call),但总体会远小于经典渲染管线逐物体绘制的 Draw Call 数目。同时,场景总体占用的显存为 1.15 GB,也降低约 80%。这是由于虚拟几何体采用流式传输的方式进行数据传输,真正被需要的几何数据才会被读取并传输到显存之中,这能保证稳定且不会超越设定上限的显存占用大小。

开启 VG 时,渲染参数

除了整体的 Draw Call 数目,对于一些部分的 Draw Call 也有特殊的优化。比如在阴影的绘制部分:使用包含 4 个 Cascade 的 CSM 阴影。当关闭 VG,使用 SRP Batcher 的阴影绘制时,需要 16 个 SRP Batch,大约包含共 4800 次 Draw Call 才能完成阴影的绘制。

关闭 VG 时,阴影渲染 Draw Call

而当开启 VG 时,仅需要 6 次 Draw Call 就能完成全部阴影的绘制,这无疑是一个巨大的提升。

开启 VG 时,阴影渲染 Draw Call

  功耗情况


依旧是在最初的示例场景中,在 iphone 13 上进行持续 1 小时的功耗测试。最终功耗大约稳定在 3W 左右,设备温度稳定在 41℃ 左右。在一小时的持续时间内,帧率基本保持完全稳定。

在 Android 上,整体表现与在 iOS 上类似。在搭载了天玑 9300 芯片的 Android 设备上进行功耗测试。最终功耗大约稳定在 2W 左右,设备温度稳定在 36℃ 左右。在持续时间内,有一小段时间的低帧率。在大多时间帧率都保持稳定。

  移动端虚拟几何体优化


为了适配移动端虚拟几何体,基于移动端硬件的特性,我们使用了多个优化方案:

1.基于移动端硬件的特性,虚拟几何体推出了模型数据固定压缩比例的编码方案。相较于原有的可变压缩比例编码方案降低约 45% 的 ALU 开销。使得在 GPU 上实现更高效的解码计算,显著降低移动端 GPU 运算压力。

2.可变压缩比例方案在一定情况下可能增加包体大小。为了优化数据大小,我们推出了针对模型数据的层级剔除。用户可手动调整模型留存的层级比例,平衡数据大小与模型精度。对于高精度模型,可以优化超过 90% 的数据占用大小。

最大程度留存以及低程度留存层级比例时,渲染表现对比以及数据大小对比

3.为了平衡画面表现与性能,我们推出了 Rendering Detail Bias 的选项。用户可手动调节此值,使画面倾向于选择更加精细或粗糙的渲染层级。调节此值最多可使场景降低约 75% 的渲染面数,进一步提高渲染效率。

Rendering Detail Bias = 0

Rendering Detail Bias = 3

4.针对移动端的虚拟几何体,重新定制了阴影贴图、GPU 驱动的反射探针等实现,进一步提高性能。

快速上手


使用移动端的虚拟几何体非常简单,只需要简单几步即可完成。

1.创建 URP 工程,在 Edit -> Project Settings -> Graphics 中开启虚拟几何体总开关;

2.导入模型资产,在 Model Importer 中开启模型的 VG 开关;

3.放入开启了 VG 的模型到 Scene 中,并编辑一个您理想中的场景;

4.像普通工程一样进行出包,即可在移动设备上使用虚拟几何体了。

在实践中,为了获得更好的性能,我们还需要针对虚拟几何体进行一些特殊的设置,包括前文提到的固定压缩比例设置、模型层级剔除设置、渲染细节偏移设置等。

详情可见官方文档中对设置的详细说明。

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


⚠️注意事项


1.虚拟几何体移动端当前仅支持 iPhone 8(A11芯片)及之后推出的 A 系列芯片和 M 系列芯片的苹果移动设备、装配天玑 9200 及之后推出的 9000 系天玑芯片和骁龙 8 Gen2 及之后推出的8系骁龙芯片的安卓移动设备;

2.对于更早期的芯片,大多对 SSBO cache 以及 Compute Shader 的支持不完善,会导致带宽瓶颈或计算效率低下。故而暂时不建议使用虚拟几何体。所以对于低端机型,推荐回退使用 LOD Group;

3.移动端上 Budget Memory 在根据 Quality 的设置申请后,不会扩充大小,如果出现部分物体无法绘制情况,可尝试增加 Budget Memory 中 Persistent Buffer 大小。

🚀未来展望


未来,团结引擎的 VG Mobile 功能将持续强化,致力于为开发者提供更好、更全面的服务,包括但不限于:

  • 支持更多芯片,更多移动端机型。

  • 对开源鸿蒙系统的支持。

  • 持续的性能优化。

  • 优化工作流。


[注]

1.同屏渲染 6 亿面指当前画面中,所有模型共有 6 亿数量级的三角面。在经过虚拟几何体的减面后,实际绘制的三角面会小于此值。

2.由于关闭 VG 后,示例场景过重导致无法正常在移动设备上运行。这里展示的数据是在 PC 上的数据。对于 Draw Call 数目和显存占用而言,PC 上与在移动端上结果相近。

3.场景中还存在非 VG 的 Draw Call 是因为场景中存在少量不支持 VG 的材质。


长按关注

Unity 官方微信

第一时间了解Unity引擎动向,学习进阶开发技能


 每一个“点赞”、“在看”,都是我们前进的动力 


 点击“阅读原文”,了解 Unity 中国的产品与服务! 


【声明】内容源于网络
0
0
Unity官方平台
Unity中国官方平台,时刻更新品牌最新动向,分享前沿的技术文章和开发案例、活动等相关信息。
内容 4030
粉丝 0
Unity官方平台 Unity中国官方平台,时刻更新品牌最新动向,分享前沿的技术文章和开发案例、活动等相关信息。
总阅读2.0k
粉丝0
内容4.0k