[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 模块
相关推荐
踏月的造梦星球5 小时前
DMDPC 学习:架构、部署、运维与调优
运维·数据库·学习·架构
GHL2842710908 小时前
unreferenced formal parameter 解决办法学习
学习
fanchenxinok9 小时前
学习笔记:LabVIEW调用DLL解析S19文件教程
笔记·学习·labview·dll解析
疯狂打码的少年9 小时前
【软件工程】结构化设计:模块独立性与耦合内聚
java·开发语言·笔记·软件工程
芷栀夏10 小时前
Java教育平台实战复盘:课程、考试与学习行为分析系统设计
java·开发语言·学习
从零开始的代码生活_10 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
执笔论英雄12 小时前
【大模型推理 】 vllm kvconnet 学习
学习·vllm
后季暖12 小时前
langgraph笔记
笔记
·醉挽清风·13 小时前
学习笔记—算法—算法题
笔记·学习·算法
西岸行者13 小时前
硬刚DeepSeek: UDPC与MTFAA的血缘辩论
笔记