UE5中添加 PNG/TIF 到 Cesium 地球表面方案

概 述

本方案将离散点标量数据 (如温度、降水等)通过 Python 三角网格插值渲染为 PNG / TIF 纹理,再用 Geometry Script(几何脚本)根据四至生成贴合球面的网格并赋予纹理材质。

整体流程:

Python 端输出 EPSG:4326(WGS84 经纬度)的 PNG/TIF,详见第 2 节。

UE 端有两种常见实现方式:球体模型 + 材质遮罩 ,和 动态网格体贴合地表(本文档主方案)。两种方案的对比见第 4 节。

1.前置条件

1.1.Python 环境

bash 复制代码
pip install matplotlib numpy pillow            #绘图

pip install rasterio                        #导出TIF

1.2.Unreal Engine

  • 已启用 Cesium for Unreal 插件

  • 已启用 Geometry Script 插件(动态网格体相关节点)

  • 场景中加载 Cesium 地球

1.3.数据处理

本文不包含 具体的数据读取与解析代码(JSON、CSV、NetCDF 等格式因项目而异)。以下为示例数据,数据需包含经度 +维度 +数值:

bash 复制代码
[

  {

    "latitude": 31.5457,

    "longitude": 108.3912,

    "temperature_2m": 0.32

  },

  {

    "latitude": 31.5475,

    "longitude": 108.3921,

    "temperature_2m": 0.68

  },

  {

    "latitude": 31.5487,

    "longitude": 108.3934,

    "temperature_2m": 0.47

  }

]

2.Python:生成 EPSG:4326 的 PNG 与 TIF

2.1.Python生成PNG/TIF逻辑

核心步骤:

  1. 根据数据范围计算输出图像尺寸并记录边界点

  2. 构建自定义色卡

  3. 根据三个顶点数值做平滑颜色插值

  4. 从画布中读取 RGBA 像素阵列

  5. 保存为4326坐标系的 PNG / GeoTIFF (带地理信息的TIF)以及一份bounds.json边界数据

2.2.生成的边界数据

bash 复制代码
{

  "minLongitude": 90.96088,            //最小经度

  "maxLongitude": 115.777555,            //最大经度

  "minLatitude": 28.685457,            //最小纬度

  "maxLatitude": 45.877124            //最大纬度

}

3.数据验证

3.1.验证数据准确性(QGIS 对照)

建议在导入 UE 前,先用 QGIS 对出图结果做地理位置校验,确认纹理范围与内容无误后再贴到 Cesium 场景。

步骤:

  1. 添加底图参考图层(如影像地图、省市行政边界、河流水网等)。

  2. 将得到的 GeoTIFF 导入 QGIS。

  3. 在边界数据中选择几个边界点添加到QGIS中,检查图片范围、边界有无偏差。

  4. 气温、降水、风速会受地形、海拔等因素的影响,气象要素应与区域内易于辨认的地理特征(山脉、河流走向、迎风坡/背风坡、高原、沙漠等)匹配。

4.UE 方案对比:完整球体遮罩 vs 动态网格体

在 Cesium 地球表面展示气象 PNG 时,常见有两种 UE 实现路径。本文档后续章节以动态网格体方案为主,但有必要先说明两者差异,便于按项目选型。

4.1.方案 A:球体模型 + 材质遮罩

思路: 在地球外围放置一个与地球同心的球体模型(或略大一点的包裹球),在材质中用遮罩(Mask)控制显示指定经纬度范围内的气象图。

典型流程:

特点:

  • 实现相对简单,一次建球即可复用于多个区域(改遮罩参数)

  • 适合矩形经纬度范围的全球/半球级展示

  • 球体与地球同心,高度固定,只能统一调整

  • 非矩形区域(省界、流域)需复杂遮罩纹理,不够灵活

4.2.方案 B:动态网格体贴地(本文档主方案)

思路: 根据数据区域的四角边界用 Dynamic Mesh 生成 Plane,将纹理平铺到 Plane 上,再把 Plane 细分,最后使细分面顶点逐一转换到 Cesium 地球表面。

典型流程:

特点:

  • 可任意修改高度

    顶点的高度可设为固定抬升值或随数据变化

  • 可生成不同形状

    不限于矩形,AppendTriangulatedPolygon 支持任意简单多边形边界(行政区、流域、自定义轮廓)

  • 无需生成完成球体模型

    按实际边界生成网格,不需要生成整个球体模型,边界外不生成网格。

4.3.方案对比

请添加图片描述

选型建议:

  • 需要全球一层包裹、只裁切矩形窗口看气象图 → 球体遮罩方案更简单

  • 需要异形边界、可调高度、精准贴地、多区域各自独立网格 → 动态网格体方案更合适

5.UE动态网格体方案

本节详述动态网格体方案 :根据数据区域的边界点经纬度(矩形四角或任意多边形顶点)创建动态网格体,细分后逐顶点贴到 Cesium 地球表面;高度可在坐标转换阶段自由指定。

5.1.导入 PNG

将 Python 生成的 PNG 导入 UE 并创建材质。

5.2.获取边界经纬度

Python 脚本会输出一份 bounds.json 文件,里面包含四个边界的经纬度,组合一下就能得到四个点的经纬度坐标:

5.3.根据边界四点生成 Plane

使用 Geometry Script 的动态网格体节点,根据四个边界点经纬度坐标生成一个矩形面片:

  1. 添加 Dynamic Mesh Component

  2. Reset Mesh重设已有网络

  3. 构造多边形顶点数组

  4. 调用 Append Triangulated Polygon

由于 UE 坐标系 Y 轴朝南,所以在构造多边形顶点数组时,纬度应乘-1,然后按照逆时针的顺序添加顶点。

bash 复制代码
点0:(最小经度,-最小纬度)

点1:(最大经度,-最小纬度)

点2:(最大经度,-最大纬度)

点3:(最小经度,-最大纬度)

5.4.添加材质

将创建的材质赋予给动态网格体。

5.5.将纹理平铺到 Plane 上

PNG 纹理需要与网格对齐,使用 Set Mesh UVs from Planar Projection函数,输入参数 Plane Transform 中:

Location:面片左上角坐标(最小经度,-最大纬度,0)

Rotation:(0,0,0)

Scale:(经度差,纬度差,0)

将 PNG 完整平铺到整个Plane。

设置UV前 vs 设置UV后

5.6.Plane 网格细分

初始四边形只有 4个顶点,无法贴合地球曲率。使用 Apply Uniform Remesh进行细分:

细分前 vs 细分后

细分后顶点数显著增加,为下一步逐顶点贴地提供足够采样密度,推荐三角面数量5000。

5.7.顶点移到 Cesium 球面上

细分后每个面的顶点Location就是**(经度,-纬度,0)**,根据每个顶点的经度、纬度、高度计算出 Cesium 地球上对应的 UE 坐标,并设置到地球表面上。

6.结果检验与问题排查

6.1.生成结果准确性判断

  • 纹理四至边界与 TIF 在 QGIS 中吻合

  • 至少 2~3 个特征点在 QGIS 与 UE 中相对位置一致,无明显整体偏移、缩放或镜像

若 QGIS 中位置正确而 UE 中偏差,问题大概率出在边界配置、UV 映射或顶点贴地流程。

6.2.问题排查清单

  • Python 生成的 PNG 坐标系与 UE 中生成 Plane 的坐标系要一致(4326 或 3857)

  • PNG 四个顶点处经纬度确认一致

  • 确认 UV 有进行平面投影,四至准确

7.总 结

  1. 生成纹理

    利用Python将散点插值为 RGBA 栅格数据,生成纹理和边界数据,计算逻辑也可以放到 UE 的C++ 中。

  2. UE 方案选型

    全球矩形裁切可用球体模型 + 材质遮罩 ;需异形边界、可调高度、精细贴地时采用动态网格体方案(本文档主流程)。

  3. 动态网格体流程

    用4个边界点生成平面网格,使用平面投影平铺 UV,平面经过细分后逐顶点贴合地球表面。

按以上流程即可将离散点标量数据可视化并贴合到 Cesium 地球表面。

相关推荐
GR901 小时前
UE5 SetActorLocation背后发生了什么
ue5
上海广测检测科技有限公司4 小时前
标签打印机CE与台湾BSMI+NCC双轨认证详解:多射频模块与电气安全叠加路径
经验分享
Go Work8 小时前
2026 Cadence SPB 24.1中文版安装图文详解(附安装包)
经验分享·笔记
虹科网络安全8 小时前
“顶会”看安全(十九):医疗 AI 中的差异化隐私风险
人工智能·经验分享·安全
贵州诚鑫致达科技有限公司9 小时前
PVID 是什么?端口参数三身份
服务器·经验分享
一滴泪的时间9 小时前
RFID 资产项目硬件采购避坑要点
经验分享
杨逢昌工厂6S管理12 小时前
116——杨逢昌:归位三定闭环法的旺季轻量化执行方案与工具清单
经验分享·笔记·职场和发展·学习方法
一滴泪的时间12 小时前
不同行业 RFID 硬件落地场景对比分析
经验分享
Water_based14 小时前
水性滚涂漆应用于滚喷机小五金件喷涂工艺详解
经验分享·笔记·产品经理