Cesium for Unity:为网络创建 3D 地理空间应用程序

Brendan Duncan是Unity Technologies的员工工程师,专注于网络图形,实施Unity Web Player使用的WebGL和WebGPU图形驱动程序。
什么是Cesium for Unity?
Cesium for Unity是一个强大的插件,将Cesium的地理空间平台集成到Unity引擎中。它使开发者能够从Cesium ion或其他来源流式传输高分辨率的3D地形、图像和建筑。结果是能够在Unity项目中创建逼真的虚拟地球仪和详细的地理可视化。
开发者可以直接将其地理空间准确的3D应用程序构建和部署到网络上。这个重大更新,从Cesium for Unity 1.20.0开始,结合了Cesium全球3D内容的强大功能与Unity网络部署的无障碍性,消除了对应用商店或用户安装的需求。
在其核心,插件使用3D Tiles OGC社区标准,由Cesium首创。这个开放标准专门设计用于流式传输大规模的3D地理空间数据集。借助它,您可以渲染整个城市、国家,甚至是地球的全尺度数字双胞胎,而不会压垮系统的内存或用户的带宽。
将Cesium for Unity与网络部署结合,解锁了非凡的可能性。用户只需一个网址即可探索复杂的现实世界3D环境,降低了广泛应用和体验的门槛。这使其成为培训工具、城市规划可视化、互动地图体验等众多应用的理想解决方案。

网络部署的关键特性
Cesium for Unity包括在网络环境中特别有效的功能:
- 流式架构意味着用户不必在开始时下载整个数据集。相反,地形和影像瓦片会随着用户在场景中的导航而逐步加载。这种方法保持了初始加载时间短且性能流畅。
- 通过与Cesium ion云服务的集成,轻松访问策划的3D地理空间内容和3D瓦片管道。用户可以访问全球地形,包括Cesium世界地形和谷歌真实感3D瓦片,以及影像、建筑和摄影测量数据集。所有这些都可以通过Unity编辑器内置的Cesium ion UI一键访问,并可以直接部署到用户的网页上。
现实世界的应用
Cesium for Unity和Web的结合为许多地理空间应用打开了大门,例如:
- 城市规划者可以通过简单的网页链接与利益相关者分享互动的3D城市模型。
- 教育工作者可以创建可探索的地理课程,学生可以从任何设备访问。
- 应急管理团队可以在准确的地形中可视化灾难场景,而无需安装专业软件。
- 旅游应用可以让用户在真实感3D中虚拟探索目的地。
- 房地产开发商可以在地理背景中展示物业。
- 研究人员可以创建互动数据可视化,将科学数据集与准确的地理表示结合起来。
开始使用Cesium for Unity进行网页开发
如果这是您第一次接触Cesium for Unity,请遵循快速入门指南。安装插件后,配置您的Cesium ion访问令牌,添加CesiumGeoreference组件以定义您的世界坐标系统,并开始添加瓦片集。
构建到网页时,请遵循以下基本步骤:
更新到v1.20.0+:确保您拥有最新版本的Cesium for Unity软件包。
使用Unity 6+:这些版本针对现代 WebGL 和 WebGPU 标准进行了优化。
启用多线程:您必须在玩家设置中启用本机 C/C++ 多线程以进行网页构建。
增加内存限制:Cesium 瓦片集可能会占用大量内存。您可能需要增加网页播放器的内存限制,最多可设置为 4GB。
配置服务器头部:在将项目部署到网络服务器时,您的服务器必须包含特定的 COOP 和 COEP 头部以启用多线程。这是一个安全要求。
需要注意的是,网页支持目前被归类为“实验性”。一些高级功能或高内存瓦片集可能需要仔细优化,以便在浏览器内存限制内良好运行。
技术深入探讨:移植到网页
为 WebAssembly 编译
Cesium Native 的核心是用 C++ 编写的。要在浏览器中运行此代码,必须使用名为 Emscripten 的工具链将其编译为 WebAssembly。一个主要挑战是 Cesium 代码通常针对 64 位平台,而 Unity 的 WebAssembly 支持目前是 32 位。这需要对代码进行修改,以使其与架构无关。此外,Cesium 使用的一些第三方库需要补丁以确保兼容性。
为多线程重新设计
Cesium for Unity在多线程上依赖很大,以便在不影响主应用程序线程的情况下流式传输3D Tiles。然而,Unity的Web平台仅支持本地C++代码的多线程,而不支持托管的C#代码。为Web构建专门实现了一个自定义C++线程池,以处理这一限制。需要与Unity交互的工作,如创建网格,被排队并在主线程上执行,以避免内存错误,将后台工作保持在本地C++中,并最小化对主线程的影响。
图形API:WebGL和WebGPU
浏览器提供了两个主要的3D图形API:成熟的WebGL和较新的WebGPU。Cesium for Unity通过创建标准的Unity网格和纹理对象来工作,将渲染工作留给引擎。虽然在Cesium渲染中大致相同,但仍有一些小差异。例如,Cesium点着色器使用仅在WebGPU中可用的特性,这意味着点云渲染需要它。WebGPU还为其他高级Unity特性如VFX Graph打开了大门。
Web上的性能考虑
Web构建的性能特征自然与本地应用程序不同。Cesium已经非常适合这些限制,具有自动调整质量以保持流畅帧率的细节级别系统。其流式传输方法也是一个主要优势,因为仅加载可见数据。
然而,开发者应注意WebAssembly的限制。执行速度接近本地,但由于安全沙箱的原因并不完全相同。Web构建无法直接访问文件系统,内存目前限制为32位(4GB)。在桌面上运行良好的项目可能需要优化,例如降低质量设置或作用域,以便在Web上流畅运行。

网络地理空间的未来
随着浏览器技术和 WebAssembly 的不断成熟,网络和本地应用程序性能之间的差距将缩小。Cesium for Unity 处于这一演变的前沿,使开发者能够创建既强大又普遍可访问的地理空间体验。
Unity 的创意套件、Cesium 的地理空间平台和网络的广泛覆盖相结合,为开发者打开了引人注目的新机会。从专业可视化工具到沉浸式教育体验,这为在全球各地的浏览器中带来准确、美丽的 3D 世界提供了基础。




