团结引擎之虚拟几何体


前言

虚拟几何体是一套基于GPU Driven Render Pipeline的系统。虚拟几何体数据与传统的模型的关系类似于虚拟纹理。 通过一套内置的虚拟几何体数据,它可以支持大量的高质量、高面数模型,为次时代画质提供了有力支撑。您不在需要担心多边形给您的项目带来的困扰,也不需要关心所需的batching技术, 统统交给虚拟几何体就可以了。
在这里插入图片描述


一、虚拟几何体的优势

  1. 基于GPU驱动的渲染管线,这不仅可以降低CPU的开销,也可以更高效的使用GPU来渲染
  2. 场景支持海量的多边形
  3. 精细的GPU剔除
  4. 由于是虚拟的,所以几何体数据可以流式加载
  5. 内存和显存不再受限于模型的面数
  6. 相比于传统的LOD,其有自适应LOD算法并有自然的过度

二、与其他系统的关系

  • 静态合批:虚拟几何体不参与静态合批。我们也推荐您尽量使用虚拟几何体而不是静态合批
  • 动态合批:虚拟几何体不参与动态合批。我们也推荐您尽量使用虚拟几何体而不是动态合批。
  • GPU Instancing: 除非有必要,我们推荐更多的使用虚拟几何体。
  • SRP batching: 虚拟几何体不参与SRP batching。

三、兼容性

当前虚拟几何体只能在团结引擎的HDRP管线中使用。 HDRP中适配虚拟几何体的材质是有限制的,目前支持Lit.shader, LayeredLit.shader以及Shader Graph。
适配的平台:

  • Windows (DX11, DX12, Vulkan)
  • Linux (Vulkan)

以下几种情况虚拟几何体是失效的:

  • HDRP使用前向渲染管线
  • 物体使用了半透明材质
  • 物体使用了非MeshRenderer组件的其他Renderer组件

以下的API可以在满足条件(模型开启了Virtual Geometry)下支持虚拟几何体:

  • Graphics.RenderMesh()
  • Graphics.DrawMesh()
  • Graphics.RenderMeshInstanced()
  • Graphics.DrawMeshInstanced()

四、如何使用

如果您打开一个新的项目工程,虚拟几何体是默认关闭的。您需要手动开启它。通过选择Edit->Project Settings…->Graphics打开Graphics Settings,找到并开启Virtual Geometry (Experimental)选项;在编辑器重启后,虚拟几何体功能就被开启了。
在这里插入图片描述

在这里插入图片描述
在开启虚拟几何体功能后,您项目中的所有模型都会被重新导入,并构建虚拟几何体所需的数据,这可能会增加您第一次导入项目的时间。

模型资产的导入

当开启虚拟几何体功能后,模型导入时会默认构建虚拟几何体数据,除非这个模型使用了半透明或alpha clip的材质。 您可以通过model impoter来设置您的虚拟几何体的配置:

在这里插入图片描述
下表列出了影响虚拟几何体构建的选项:
在这里插入图片描述

在MeshRenderer上启用虚拟几何体

目前只能在MeshRenderer上启用虚拟几何体功能。在MeshRenderer中有独立的开关可以让您选择是否在当前物体上开启虚拟几何体,以及虚拟几何体阴影。
在这里插入图片描述
虚拟几何体阴影可以使用虚拟几何体技术来实时的渲染您的级联阴影。

当启用虚拟几何体后,这个MeshRenderer将会以集群的方式渲染,而不再以Instance为单位渲染。
在这里插入图片描述

五、错误排查

为了带来更多灵活性,我们并没有把模型的Virtual Geometry选项和MeshRenderer的Virtual Geometry强行绑定在一起。 但这也可能会引起意外的错误:比如当这些选项开关被错误的配置时。 当MeshRenderer的Virtual Geometry和模型的Virtual Geometry选项不匹配时,会产生下图的一个警告:
在这里插入图片描述
此时请确保MeshRenderer的Virtual Geometry和Mesh的Virtual Geometry是相互匹配的。 如果您希望某个模型即以虚拟几何体的方式使用,又以非虚拟几何体的方式使用,请确保此模型勾选上Allow VG Switch。

我们也提供了一个排查此问题的工具Virtual Geometry Mismatch,用于在场景中批量查找MeshRenderer的Virtual Geometry和模型的不匹配的情况,您可以根据具体需求进行快速修正。

在LODGroup上启用虚拟几何体

您可以启用LOD Group组件的Virtual Geometry选项,此时Virtual Geometry Mesh将使用自适应LOD算法实现自然的过度,低级别的Mesh Renderer不会被渲染。
在这里插入图片描述

当启用LODGroup组件后,该组件中所有 使用Virtual Geometry Mesh的Mesh Renderer 的Virtual Geometry选项将会与LODGroup的设置保持一致,不允许单独编辑。

注意 :您可能会遇到Virtual Geometry选项与LODGroup不一致的情况,可能的原因是该MeshRenderer使用了不支持Virtual Geometry的材质,如半透明材质。
在这里插入图片描述

当LODGroup内的MeshRenderer中,存在使用Virtual Geometry Mesh但未开启Virtual Geometry选项的情况时,Virtual Geometry Mismatch工具中将会列出该LODGroup组件所在的物体以及这类MeshRenderer子项,您可以根据具体需求进行修正。

注意 :使用开启Virtual Geometry的Mesh是使用虚拟几何体渲染的前提,因此Mesh未开启Virtual Geometry的LOD MeshRenderer不受LODGroup VG的限制。

四、实践检验真理

我在场景中放入超过1万以上的构件,总三角面片达到11亿以上,在未开启启Virtual Geometry时,场景运行帧数FPS在1.5左右,巨卡的状态。当开启Virtual Geometry时,场景运行帧数FPS在50~60左右,还是很流畅的。

未开启Virtual Geometry:
在这里插入图片描述
开启Virtual Geometry:
在这里插入图片描述


👉壁纸分享

在这里插入图片描述
在这里插入图片描述

总结

基于团结引擎还有很多新功能,下期我将着重讲解下光照和纹理在团结引擎里面如何详细使用。
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熬夜敲代码的小N

你的鼓励是对我最大的支持,么么

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值