[UE学习笔记][基于源码] 运行时网格 PMC / DMC / RMC

UE学习笔记基于源码 运行时网格 PMC / DMC / RMC

基于 UE 5.7 引擎源码

理清 UProceduralMeshComponent / UDynamicMeshComponent / URealtimeMeshComponent 三者的定位、数据结构、能力对比,回答"运行时构造 / 修改 mesh 该选谁"。


选型

  • PMC :低频构造、万级以下顶点的程序化 mesh、Debug 可视化、原型;不适合大顶点量或高频更新(API 强制整段重传 TArray<FVector> + 单顶点 152 B + 无 LOD / Nanite / GPUScene)
  • DMC :需要拓扑算法的几何编辑(CSG / Remesh / Sculpt / UV 重算等);拓扑不变时配合 FastNotifyPositionsUpdated / FastNotifyTriangleVerticesUpdated 也可做高频属性更新。不适合大量独立 actor 各持一份(每实例都背一套邻接 + Overlay,内存吃紧;无 LOD / Nanite / GPUScene)
  • RMC :高频生成 / 更新的大体量 mesh(体素地形 / Marching Cubes / 城市 Tile / 动态海洋等);不做几何拓扑编辑------RealtimeMeshAlgo 只提供渲染数据辅助算法(切线、polygon group 重排),需要 CSG / Remesh / Sculpt 先用 DMC 算几何再喂 RMC

横向对比

表中 + = 支持,- = 不支持,++ = 该组件的招牌强项。

维度 PMC DMC RMC
来源 引擎 引擎 第三方
支持版本 UE4+ UE5+ UE5+
数据结构 AoS 索引+邻接 SoA + Section
局部更新 - + ++
LOD - - +
Nanite - - +
GPUScene 友好 - - +
多线程构建 - + +
Async Collision Cooking + + +
几何算法 - ++ -
生产可用 - + +

细节

PMC

  • 数据结构 :FProcMeshVertex AoS 排布------每个顶点含双精度位置 + 法线 + 4 通道 UV + 颜色 + 切线

DMC

  • 数据结构 :FDynamicMesh3 = 索引网格(顶点 / 三角形数组)+ 完整邻接表(每顶点边一环 + 每边双侧三角形)+ 法线 / UV / Color 各自 Overlay;邻接结构使拓扑算法 O(degree) 而非 O(N)
  • 局部更新 :拓扑变化用 NotifyMeshUpdated(重建 RenderProxy);属性变化用 FastNotifyColorsUpdated / FastNotifyPositionsUpdated / FastNotifyUVsUpdated / FastNotifyTriangleVerticesUpdated(指定三角形子集),更新现有 RenderProxy buffer 而不重建
  • 几何算法 :GeometryProcessing 模块群(含 MeshModelingTools 等)提供 CSG(布尔)/ Remesh / Sculpt / UV Layout / 简化 / 切割等拓扑级算法,配 EditMesh(Lambda) 调用

RMC

  • 数据结构 :4 层 RealtimeMesh -> LOD -> SectionGroup -> Section。Stream 挂在 SectionGroup 上(SoA,每条对应一段 RHI 顶点缓冲),Section 只引用 SectionGroup 内 Stream 的下标范围 -> 同一份缓冲可被多 Section 切片复用
  • 局部更新 :以 SectionGroup 为单位 UpdateSectionGroup(Key, NewStreamSet) 整组 streams 替换;多 SectionGroup 共存使 chunked 更新天然成立(地形 chunk / Tile = 1 个 SectionGroup,互不影响)
  • Nanite :通过 IRealtimeMeshNaniteSceneProxyManager(Modular Feature,名 RealtimeMeshNanite)接入。开源版只有接口和 FRealtimeMeshNaniteResources(封装 Nanite::FResources),实际实现走 Premium 模块
相关推荐
行思理17 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
楚山之石21 小时前
【Medical Image Analysis】深度学习医学图像合成综述:伪CT、合成MRI与合成PET的架构、性能与临床边界
图像处理·人工智能·学习·mr·mri
Li_RuiQi1 天前
DAgger方法演进_独立学习笔记
笔记·学习·计算机视觉
SteveSenna1 天前
aubo学习:realsense手眼标定
学习·机器人·视觉检测
Li_RuiQi1 天前
DAgger与交互式模仿学习_ACT学习笔记
笔记·学习
Canmag 兴隆磁性1 天前
回复磁导率 μ_R:永磁体在动态磁路中的关键参数
开发语言·学习·r语言·永磁材料·充磁·磁导率
He BianGu1 天前
【笔记】C# 中BindingFlags的详细作用
笔记·c#
lengxuenong1 天前
区间覆盖问题 · 简明学习手册1
java·学习·算法
AI视觉网奇1 天前
turtle 入门教程笔记
笔记