地形优化
景观地形优化#
Landscape Terrain 的性能取决于其操作背后的数据流:仅在不再需要时加载和销毁相机此刻可见区域的图形数据。未优化的流媒体设置会在相机移动时导致明显的区域加载。
图形数据的整体生命周期可以这样想:
- 系统根据距离、地形密度限制和流设置确定当前在视口中可见的图块、它们的空间大小和最高可用 mip 级别。
- 请求的基础纹理图块所需的图形数据从 .lmap 资产以128×128 像素的块加载,并缓存在 RAM(CPU 缓存)中,以用于相交计算和物理。
- 获取的数据会上传到 GPU 并在必要时缓存在视频内存中(GPU 缓存)。
- 几个 Landscape Layer Maps(Albedo, Height 和 Mask 纹理)的数据根据混合设置.
- 基础纹理与细节(如果有的话)。
- 三个 Landscape Terrain 组件(Albedo, Normal 和 Height)中每一个的最终纹理都被写入虚拟纹理中,替换最旧的块。
- 结果在视口中渲染,并适当考虑了自适应硬件细分和置换。
- 当不再需要时,纹理会被缓存中的较新数据替换。
剖析#
使用 Landscape Terrain 对象的项目中的相机行为起着重要作用。如果所有纹理都适合视频内存,则静态相机意味着单个数据加载。当活动相机显着改变其位置和方向,同时揭示未加载区域时,流式传输可能会严重影响性能。因此,应根据目标平台的最终相机集和屏幕分辨率来考虑和调整性能和内存消耗。
为了方便分析,您可以通过 Tracker 为相机移动设置动画并运行动画进行测试。
建议使用 Microprofile 工具对 Landscape Terrain 对象的性能进行详细深入的估计。
通过使用 Rendering Performance Profiler,您可以估计内存消耗。
硬件建议#
流式传输意味着从磁盘存储连续加载数据。如果您的项目需要大尺寸(数公里宽)的高度详细景观,建议考虑使用 SSD,因为较慢的 HDD 可能无法提供足够的吞吐能力。
在那一点上,多核处理器在这里有一个优势,可以让您在没有瓶颈的情况下分配负载。
景观层#
定义当前地形外观的不同 Landscape Layer Maps 的数量和密度是一个重要因素——具有高分辨率纹理的多个混合层可能会导致性能显着下降。在大多数情况下,在光栅图形编辑器中将多个纹理组合成一个是合理的。
Landscape Layer Map 的 Current Data Density 值是根据其空间大小和使用的基础纹理的分辨率计算的。很难错过一个像样的高细节景观需要一个非常大分辨率的纹理图块集。
此外,还考虑了图层的可见性——如果大的 Landscape Layer Map 与其他图层重叠(具有更高的 Order 值),则只会加载和渲染其图形数据。
Order 值较高的那个与其他的重叠,只有它的数据会被加载和可视化。
流式传输基于使用先前加载的几何图形来定义地形的可见区域。在世界启动时没有加载几何体,因此系统会查找启用了 Culling 标志的 Landscape Layer Map 并加载该层的初步低级数据。如果您的世界包含多个图层,其中一个代表地形的基本形状,而其他用作放置在基本图层边界内的插图,并且与它的高度差很小,建议您禁用 Culling插入并为基础层启用它。这是在世界启动时减少 CPU 负载的方法。
瓷砖加载#
Landscape Terrain 系统每帧都会检查要加载和更新哪些图块。增加 Tiles Update Per Frame 参数以确保按时更新所有必要的图块。但是,如果这个值太大,可能会导致数据流时性能下降。
图形数据块的加载速度取决于 Tiles Load Per Frame 值。较高的值意味着更快的多线程切片加载,但更消耗性能的数据流。请注意,将此值设置为高于 Tiles Update Per Frame 是没有意义的。
因此,在调整这些参数时有必要进行权衡。
使用 Landscape Terrain VT Streaming 帮助程序(或 render_show_landscape_terrain_vt_streaming 1 控制台命令)启用正在流式传输的切片的可视化。在此模式下,彩色区域显示当前以较低分辨率渲染的图块,直到加载和渲染最高 mip 级别。彩色瓷砖消失得越快越好。
缓存#
Cache 设置的默认值适用于大多数情况。
如果您使用修改图层图画笔编辑器或者您的项目意味着运行时地形修改,增加 GPU Cache Size 限制和 GPU Cache Life Time 以获得更好的性能。
在优化 CPU 端执行的交叉和碰撞检测时,增加 CPU Cache Size 以获得更好的性能。
运行时修改#
当某些东西改变了 Landscape Terrain 的加载区域时,受影响的图块将在考虑到这些变化的情况下重新流式传输。
增加 Tiles Reload Per Frame 参数(每帧重新加载的切片数)以更快地提交更改。
但是,请注意不要超过系统的带宽,同时重新加载过多的图块;否则,性能可能会下降很多。因此,监控层的流设置和动态并避免导致许多图块重新加载的大区域的每帧更改非常重要。
更多详情,请参阅使其运行时部分。
细节#
Landscape Terrain 使您最多可以添加1024细节一个面具,可以创建一个非常详细和多样化的景观外观。在优化方面,尽量减少细节和纹理的数量是加快渲染速度的一种方式。
细节纹理在世界启动时加载并保存在显存中,以便在渲染时与地形地形的基础纹理混合。您可以通过调整以下参数为所有细节材质的相应纹理指定较低的分辨率:
虚拟纹理#
Landscape Terrain 的瓦片的最终纹理被写入虚拟纹理组件(Albedo, Normal 和 Height)。增加 Texture Memory Size 值以确保虚拟纹理提供足够的容量来存储加载的高细节纹理块。
由于尺寸较小,虚拟纹理需要较少的视频内存,但无法提供足够的容量来存储所有需要的数据,从而导致性能不佳、细节水平低以及由于连续重新加载瓷砖而导致景观地形表面快速闪烁。
渲染#
Landscape Terrain 表面的多边形会根据虚拟纹理的高度图组件在运行中自适应地细分并移位。根据与相机的距离,多边形网格被分成不同密度的多个细节层次。 Geometry 设置为渲染优化提供了很大的空间。
注意以下参数:
- 使用较低的 Geometry Progression 值,在远处生成的多边形更少。
- 通过配置 Geometry Polygon Size 参数,您可以在细节级别过高的情况下定义多边形的最小空间大小。
- Geometry Subpixel Reduction 参数确定多边形大小(在屏幕空间中)与在视口中看到的区域的最小比率。此参数使您能够快速减少多边形数量或简单地删除几乎不可见的太小多边形,以提高性能。
- 设置较低的 Visibility Distance 以放弃渲染太远的多边形。
您可以通过增加 Texel Size 参数来降低 Landscape Terrain 的反照率、法线和高度纹理的最大允许细节级别。
降低 Target Resolution(Landscape Terrain 渲染器的屏幕缓冲区的分辨率)以牺牲视觉质量来获得更高的性能。
您还可以降低以倾斜视角 (Detail Level By Angle) 面向相机的多边形的细节级别,以优化流加载和内存消耗。
在不同的距离处使用不同的 mip 级别的景观纹理。切换到 Low 或 Medium Texture Filtering 质量以提高性能,但代价是相邻 mipmap 级别之间的边缘略微可见。
剔除优化#
Landscape Terrain 表面的多边形经过平截头体剔除优化。如果一个多边形掉出相机平截头体(即它的屏幕位置在视口边界之外),它会被剔除以进行渲染。您可以启用 Aggressive Frustum Culling 模式,这意味着对要渲染的多边形有更严格的要求,因此性能更高。
调整 Culling 设置以获得更多优化:
- 减小 Culling Frustum Padding 以减小视锥体的大小。
- 增加 Culling Back Face 阈值以剔除更多面向相机倾斜角度的多边形。
- 增加 Culling Oblique Frustum 乘数以剔除斜截头体平面之外的更多多边形。
全局地形优化#
terrain_global_base 材质为微调地形几何优化、阴影和 LOD 混合提供了几个参数:
- Subpixel Polygons Reduction 参数确定多边形大小(在屏幕空间中)与在视口中看到的区域的最小比率。此参数允许您删除几乎不可见的太小多边形,以提高性能。
- Back Face Culling 参数用于剔除背面转向相机的曲面细分补丁。可以显着减少多边形的数量(例如剔除大山的背面)并提高性能。
- Frustum Culling Padding 参数用于控制对视锥体之外的细分面片的剔除。
- Shadow Offset 参数可以调整阴影的外观,以防低多边形 LOD 在不应该有阴影的区域在高多边形 LOD 上投射阴影。
- LOD Padding 参数可用于调整地形 LOD 之间的平滑过渡并提高性能。
如果您的地形不需要插图,您可以禁用此选项以提高性能。为此,只需取消选中 States 选项卡中的 Use Insets。
您也可以使用截锥体剔除优化来影响性能:在 States 选项卡中启用 Fast Frustum Culling 选项。此选项会增加剔除多边形的数量。