Cesium for Unity:ウェブ用の3D地理空間アプリを作成する

ブレンダン・ダンカンは、Unity Technologiesのスタッフエンジニアで、ウェブグラフィックスに焦点を当て、Unity Web Playerで使用されるWebGLおよびWebGPUグラフィックスドライバーを実装しています。
Unity向けのCesiumとは何ですか?
Unity向けのCesiumは、Cesiumの地理空間プラットフォームをUnityエンジンに統合する強力なプラグインです。これにより、開発者はCesium ionや他のソースから高解像度の3D地形、画像、建物をストリーミングすることができます。その結果、Unityプロジェクト内でフォトリアルなバーチャルグローブや詳細な地理的視覚化を作成することが可能になります。
開発者は、地理的に正確な3Dアプリケーションを直接ウェブにビルドしてデプロイできます。この大規模な更新は、Cesium for Unity 1.20.0から始まり、Cesiumのグローバル3Dコンテンツの力とUnityのウェブデプロイメントのアクセス性を組み合わせ、アプリストアやユーザーインストールの必要性を排除します。
プラグインの核心には、Cesiumによって先駆けられた3DタイルOGCコミュニティ標準があります。このオープンスタンダードは、大規模な3D地理空間データセットをストリーミングするために特別に設計されています。これを使用すると、システムのメモリやユーザーの帯域幅を圧倒することなく、都市、国、または地球のフルスケールのデジタルツイン全体を描画できます。
Unity向けのCesiumとウェブデプロイメントを組み合わせることで、驚くべき可能性が開かれます。ユーザーは、URLだけで複雑な現実世界の3D環境を探ることができ、広範なアプリケーションや体験への障壁を下げます。これにより、トレーニングツール、都市計画の視覚化、インタラクティブなマッピング体験などに最適なソリューションとなります。

ウェブデプロイメントのための主要な機能
Unity向けのCesiumには、特にウェブ環境で効果的な機能が含まれています:
- ストリーミングアーキテクチャは、ユーザーが最初に全データセットをダウンロードする必要がないことを意味します。代わりに、地形と画像タイルは、ユーザーがシーンを操作する際に徐々にロードされます。このアプローチにより、初期のロード時間が短く、パフォーマンスが滑らかに保たれます。
- キュレーションされた3D地理空間コンテンツと3Dタイルパイプラインへの簡単なアクセスが、Cesium ionクラウドサービスとの統合を通じて提供されます。ユーザーは、Cesium World TerrainやGoogle Photorealistic 3D Tilesを含むグローバルな地形、画像、建物、フォトグラメトリデータセットにアクセスできます。すべては、Unityエディターに組み込まれたCesium ion UIを使用してワンクリックでアクセスでき、ウェブ上のユーザーに直接展開できます。
実世界のアプリケーション
Cesium for UnityとWebの組み合わせは、次のような多くの地理空間アプリケーションの扉を開きます:
- 都市計画者は、簡単なウェブリンクを通じて利害関係者とインタラクティブな3D都市モデルを共有できます。
- 教育者は、学生が任意のデバイスからアクセスできる探ることができる地理的なレッスンを作成できます。
- 緊急管理チームは、専門的なソフトウェアのインストールなしで正確な地形で災害シナリオを視覚化できます。
- 観光アプリケーションは、ユーザーがフォトリアリスティックな3Dで目的地を仮想的に探ることを可能にします。
- 不動産開発者は、地理的な文脈で物件を紹介できます。
- 研究者は、科学的データセットと正確な地理的表現を組み合わせたインタラクティブなデータビジュアライゼーションを作成できます。
Web向けのCesium for Unityの始め方
これがCesium for Unityへの初めての紹介であれば、クイックスタートガイドに従ってください。プラグインをインストールした後、Cesium ionアクセストークンを設定し、世界の座標系を定義するためにCesiumGeoreferenceコンポーネントを追加し、タイルセットの追加を開始します。
Webにビルドするために、次の重要なステップに従ってください:
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タイルをストリーミングするために、マルチスレッドを重視しています。しかし、Unityのウェブプラットフォームは、マネージドC#コードではなく、ネイティブC++コードのマルチスレッドのみをサポートしています。この制限に対処するために、ウェブビルド専用のカスタムC++スレッドプールが実装されました。メッシュの作成など、Unityと相互作用する必要がある作業は、メモリエラーを避けるためにメインスレッドでキューに入れられ、実行されます。バックグラウンド作業はネイティブC++で行い、メインスレッドへの影響を最小限に抑えます。
グラフィックスAPI:WebGLとWebGPU
ブラウザは、確立されたWebGLと新しいWebGPUの2つの主要な3DグラフィックスAPIを提供しています。Cesium for Unityは、標準のUnityメッシュおよびテクスチャオブジェクトを作成し、レンダリング作業をエンジンに任せることで機能します。Cesiumのレンダリングに関してはほぼ同等ですが、わずかな違いがあります。例えば、CesiumポイントシェーダーはWebGPUでのみ利用可能な機能を使用しているため、ポイントクラウドのレンダリングにはWebGPUが必要です。WebGPUは、VFXグラフなどの他の高度なUnity機能への扉も開きます。
ウェブにおけるパフォーマンスの考慮事項
ウェブビルドは、ネイティブアプリケーションとは異なるパフォーマンスプロファイルを持っています。Cesiumは、スムーズなフレームレートを維持するために品質を自動的に調整するレベルオブディテールシステムを備えており、これらの制約に非常に適しています。そのストリーミングアプローチも大きな利点であり、可視データのみがロードされます。
ただし、開発者はWebAssemblyの制限に注意する必要があります。実行速度はネイティブに近いですが、セキュリティサンドボックスのために完全に同一ではありません。ウェブビルドはファイルシステムに直接アクセスできず、メモリは現在32ビット(4GB)に制限されています。デスクトップでうまく動作するプロジェクトは、ウェブでスムーズに動作するために、品質設定や範囲を減らすなどの最適化が必要になる場合があります。

ウェブ上の地理空間の未来
ブラウザー技術とWebAssemblyが成熟し続ける中、ウェブとネイティブアプリケーションのパフォーマンスの差は縮まるでしょう。Cesium for Unityはこの進化の最前線に位置しており、開発者が強力で普遍的にアクセス可能な地理空間体験を作成できるようにします。
Unityのクリエイティブスイート、Cesiumの地理空間プラットフォーム、そしてウェブのリーチの組み合わせは、開発者にとって魅力的な新しい機会を開きます。プロフェッショナルな可視化ツールから没入型の教育体験まで、これにより、正確で美しい3D世界を世界中のブラウザーに提供する基盤が整います。




