Foliage 与植被

自动关联目录:Foliage 与植被

相关官方依据:Nanite(Nanite Foliage、Foliage 使用 WPO 的说明)、虚拟阴影贴图(Deformation and Foliage 一节)、World Partition 转换的 -FoliageTypePath 参数。

1. 定位

植被是开放世界里"数量最多、也最容易把性能打穿"的一类内容:草、灌木、树,动辄几十万实例。

一句话定位:植被的三个成本分别在绘制(实例数)、阴影(VSM 缓存作废)、时域(TSR/WPO)。只优化其中一项通常不够。

2. 三个成本

① 绘制

机制说明
实例化Foliage 用 HISM(层级实例化静态网格)承载
Nanite Foliage官方的 Nanite 植被方案:用实例化 + 蒙皮 + 体素化 + 动画 + 材质特性组合,实现大规模高密度植被,成本远低于传统方式
剔除距离每种 Foliage Type 可设剔除距离
LOD必须有完整 LOD 层级(见 静态网格与 LOD)

② 阴影(最容易被忽略)

已核实(VSM 的 Deformation and Foliage 一节):

使用 WPO(世界位置偏移)、PDO 或骨骼动画的几何会每帧作废缓存页。草和植被尤其典型。

官方给出的缓解手段:

手段说明
远处改用 Contact Shadows对草/部分植被,Contact Shadow 足以替代高分辨率阴影贴图
r.Shadow.RadiusThreshold非 Nanite 物体的 CPU 剔除阈值,控制远处小物体的阴影成本
按距离关闭形变用 Mesh LOD 在远处切换到不使用 WPO/PDO 的材质;更远处可直接关掉动态投影
Distance Field Shadows方向光在 Dynamic Shadow Distance Movable Light 之外接管非 Nanite 几何(含植被)
大型投影体用 NaniteNanite 遮挡住的作废可以跳过,非 Nanite 不行

③ 时域

  • 植被的 WPO 动画没有运动向量,会让 TSR 的表现不稳定
  • 官方在 Nanite 篇提到:植被用 WPO 问题较小,因为植被本身有孔洞、不会自遮挡

3. 与 Nanite 的关系(已核实)

项说明
Nanite Foliage官方的一套集成系统,用于大规模高密度植被,成本远低于传统方式
组件支持Nanite 网格可用于 Foliage Painter 与 Landscape Grass
形变限制Nanite 不支持 Morph Target;WPO 支持但受限(会被切成更小的簇独立剔除,必须 clamp 位移量)
建议官方明确:Nanite 网格渲染进 VSM 效率高得多,理想状态下只有 Nanite 不支持的才用非 Nanite

4. 参数与设置

设置 / CVar作用
Foliage Type 的剔除距离控制绘制距离
r.Shadow.RadiusThreshold非 Nanite 的 CPU 剔除(阴影)
r.Shadow.Virtual.*VSM 相关(见 VSM 篇)
World Position Offset Disable Distanceprimitive 属性:超过该距离不再应用 WPO
Shadow Cache Invalidation Behavior逐 primitive:Auto / Always / Rigid(抑制 WPO 引起的作废)/ Static
Displacement Fading(材质)材质侧淡出位移
-FoliageTypePath=[Path](WP 转换)关卡里嵌了 Foliage Type 时导出成资产

5. 代价与权衡

设计收益代价什么时候不该用
高密度植被画面丰富绘制 + 阴影 + 时域三重成本性能预算不足时必须降密度
WPO 风动生动每帧作废 VSM 缓存页、TSR 不稳远处必须关闭
Nanite Foliage大规模高密度可行平台限制(SM6/DX12)移动端不可用
Contact Shadow 替代极省阴影质量低(只有接触阴影)近处需要真实投影
远处关动态投影省远景没有投影大片植被的远景可接受

6. 踩坑与排查

坑现象怎么验证
铺了植被后帧率崩三重成本叠加分别关绘制/阴影/WPO 对比
阴影极慢WPO 每帧作废 VSM 缓存VSM 的 Cached Page 可视化(红一片)
远处植被还在动没按距离关 WPO设 World Position Offset Disable Distance
TSR 下植被闪烁WPO 无运动向量见 TSR 篇;控制 WPO 幅度
植被消失剔除距离过近调 Foliage Type 设置
转换 WP 后植被丢了Foliage Type 嵌在关卡里用 -FoliageTypePath 导出
草的阴影很贵大量小实例r.Shadow.RadiusThreshold + Contact Shadow
用 Nanite 但 WPO 让物体消失位移没 clamp见 Nanite 篇:必须 clamp 位移量

7. 排查顺序

1. 帧率崩?→ 先分开测:关阴影 / 关 WPO / 降密度
2. 阴影慢?→ VSM Cached Page 可视化;看是不是植被在每帧作废
3. 时域不稳?→ TSR 篇;控 WPO 幅度
4. 远景?→ Distance Field Shadows / Contact Shadow / 关动态投影
5. 数量?→ 剔除距离 + LOD

参考