Version: 1.0
语言 : 中文
在自定义渲染管线中创建简单渲染循环
摄像机

虚拟几何体

团结引擎为您提供了虚拟几何体的强大功能。注意当前此功能处于试验性版本。

什么是虚拟几何体?

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

虚拟几何体的优势

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

如何使用?

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

如何开启VG
如何开启VG
选项 描述
Virtual Geometry (Experimental) 启用虚拟几何体系统
Keep Geometry Buffer 始终保留顶点&索引缓冲,即使模型资产勾选了Virtual Geometry

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

模型资产的导入

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

ModelImpterVG
ModelImpterVG

您也可以通过AssetPostprocessor来订制您的导入设置。

下表列出了影响虚拟几何体构建的选项:

选项 描述
Virtual Geometry 开启后此模型会构建虚拟几何体数据
Allow VG Switch 如果您想在运行时动态开关使用此模型的MeshRenderer的Virtual Geometry选项,请打开此选项
Position Precision 构建虚拟几何体数据时,顶点数据的精度
Normal Precision 构建虚拟几何体数据时,法线数据的精度
Tangant Precision 构建虚拟几何体数据时,切线数据的精度

因为虚拟几何体数据不支持在CPU端修改,所以当Virtual Geometry打开后,Read/Write选项会失效;反之,当Read/Write选项选中后,Virtual Geometry会失效。因此如果您想在运行时脚本中修改模型的顶点信息的话,请确保打开Read/Write, 并关闭Virtual Geometry选项。 同时,虚拟几何体也不支持勾选Keep Quads。

注意:在运行时,手动创建的模型(非复制)是不支持虚拟几何体的。

在MeshRenderer上启用虚拟几何体

目前只能在MeshRenderer上启用虚拟几何体功能。在MeshRenderer中有独立的开关可以让您选择是否在当前物体上开启虚拟几何体,以及虚拟几何体阴影。

MeshRenderer中开启VG
MeshRenderer中开启VG

虚拟几何体阴影可以使用虚拟几何体技术来实时的渲染您的级联阴影。

当启用虚拟几何体后,这个MeshRenderer将会以集群的方式渲染,而不再以Instance为单位渲染。

MeshRenderer中开启VG
MeshRenderer中开启VG

当不开启虚拟几何体时,此MeshRendereer会以传统方式渲染;某些情况下,其所使用的材质不支持虚拟几何体,比如alpha clip材质,则您有必要关闭Virtual Geometry选项以正确的渲染对象。

在Shader Graph中启用虚拟几何体

您可以通过下图的开关让Shader Graph支持虚拟几何体,请注意只有Lit材质可以支持虚拟几何体

ShaderGraph中开启VG
ShaderGraph中开启VG

在Shader Graph中,虚拟几何体可以和虚拟贴图配合使用。这可以使团结引擎更高效的渲染您的场景,并降低贴图的显存占用。

与其他系统的关系

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

兼容性

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

适配的平台:

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

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

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

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

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

错误排查

为了带来更多灵活性,我们并没有把模型的Virtual Geometry选项和MeshRenderer的Virtual Geometry强行绑定在一起。 但这也可能会引起意外的错误:比如当这些选项开关被错误的配置时。 当MeshRenderer的Virtual Geometry和模型的Virtual Geometry选项不匹配时,会产生下图的一个警告:

MeshRenderer的VG警告
MeshRenderer的VG警告

此时请确保MeshRenderer的Virtual Geometry和Mesh的Virtual Geometry是相互匹配的。 如果您希望某个模型即以虚拟几何体的方式使用,又以非虚拟几何体的方式使用,请确保此模型勾选上Allow VG Switch。

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

MismatchTool
MismatchTool
在自定义渲染管线中创建简单渲染循环
摄像机