見出し画像

[Unity]Cesium for Unityを使ってみた

こんにちは! エンジニアの宮Pです😎
今回は、Cesium for Unityを使って3Dの街並みを眺めてみました😀

Cesiumとはオープンソースの3D地理空間可視化プラットフォームです。これを使うと世界中の地形、街並みを3Dで再現することができます。
弊社がある水道橋も、ちゃんと再現されるんでしょうかね…?🤨
まずは基本機能を導入して、様子をみてみます。
前提条件として、Unityのバージョンが2021.3.2f1 以降である必要があります。少し前のUnityを使っている人は、予めアップデートしておきましょう。


Cesium ionの登録

まずはCesiumのアカウントを作成してサインアップします😉

Epic GmaesやGithub、Googleアカウントの他、メールアドレスでもアカウントを作成できます。
自分に適したものを選んでアカウントを作成してください🙂

Cesiumの登録画面です

私はメールアドレスを使ってアカウントを作成しました。
英語で記載されたページですが、パスワードやプライバシーポリシーへの同意など見慣れた項目ばかりなので、悩むところはないと思います😉

Unityプロジェクトの設定

Unity Hubで、3D (URP)のテンプレートを使って新しいプロジェクトを作ります。
(気が付けば色々なテンプレートが増えました……これらの違いも一度調べておこうかと思います)

この下のRunner Gameテンプレも気になります…

動作環境によってはプロジェクト作成時にエラーが発生することがあるかも知れません。
私の手元でも警告メッセージが出ましたが、RetryやContinueで続けることで稼働することを確認しています😉

Unityが起動したら、Cesiumパッケージをプロジェクトに読み込みます。
EditメニューからProject Settingsを選び、Packace Managerを選択します。
ダイアログ内のScope Registriesに次の内容を入力して、[Save」ボタンで保存してください。

Name : Cesium
URL : https://unity.pkg.cesium.com
Scope(s) : com.cesium.unity

今度はWindowメニューからPackage Managerを開きます。
上部メニューの「+」ボタンの横は「Packages: In Project」に設定されていると思います。
これを「My Registries」に変更してください。

My Registriesには、先ほどのCesiumが登録されています。
右下の[Install]ボタンで、このパッケージをインストールします。

インストール中にUnityの再起動を促されるので、Yesをクリックしてください。

再起動後、UnityのメニューにCesiumが追加されます。
このCesiumメニューからCesiumを選び、ダイアログ下部の[Connect to Cesium ion]ボタンをクリックしてください。

各アセットへのアクセス許可を尋ねられますので、[Allow]ボタンをクリックしてUnityに戻ります。

Cesiumが有効になったら、Tokenメニューを選択して新しいトークンを作成します。
Unityのプロジェクト名が表示されているはずですが、必要に応じて名前を変更し、[Create New Project Default Token]ボタンをクリックします。

トークン名は後で変更もできます

このトークンがCesium ionに登録されます。
下のリンクからCesiumアカウントのページを開いて、新しいトークンが追加されたことを確認してください。

このようにトークンが追加されています。

トークン名はここで変更できます

カメラの調整

プロジェクトにCesiumのアセットを追加します。
CesiumメニューからCesium World Terrain + Bing Maps Aerial imageryの[+]ボタンをクリックしてください。
HierarchyビューにGlobal Volumeが追加され、じわじわと山並みの画像が表示されます😮

なかなかリアルです

Global Volumeの他にCesiumGepreferemceCesium World Terrainも追加されています。
Inspectorで設定項目を選択すると、ツールチップが表示されます。気になる項目をチェックしてみてください。

メインカメラの設定

モニターをGameに切り替えて、ゲーム画面をプレビューしてみます。

手前の山は見えますが、その先には何も描画されていません🙄
モニターをSceneに戻して、HierarchyのMain Cameraを選択してください。山並みの上に、カメラの視野を示す白いフレームが表示されます。
カメラの視野はこの範囲に限定されるため、その先が見えていません。

視野を少し広げて、山並みが少し先まで見えるようにします。
Inspectorビューのプロパティの中に、Clipping Planes Near / Farという項目があります。
Nearオブジェクトを表示するカメラからの最小距離です。この値を大きくするほど、カメラ近くのオブジェクトが何も表示されなくなります。
一方、Farオブジェクトを表示する最大距離です。今は、この値が小さいために遠くの地形が表示できていません。
Nearを1に、Farを10,000に変更してみます。

カメラの視野が大きくなり、右下のMain Cameraのプレビューの中で遠くの景色が描画されるようになりました。
Gameビューの景色も、先ほどとは見違えるようになりました。

ところで、この山並みはどちらのものなのでしょう?🙄
CesiumGeoreferenceのプロパティに書かれている緯度:39.7、経度:-105.2の場所をgoogle mapで検索してみます。

どうやらアメリカ合衆国コロラド州にある山のようです🙄
自分には馴染みのない場所なので、弊社のある水道橋周辺を見てみます。
以前にGeospatial APIでサンプルを作った時に計測した、弊社の緯度・経度をを使います。

次の値を入力してみます。
Latitude:35.7
Longitude:139.7
Height:1000
どこかの町のような場所が出てきました😮

しかしながら、何となく見た目がのっぺりとしています。
これは、Cesium World Terrainに建物の情報が含まれていないためです。
Cesium OSM Buildingsデータセットを追加して、建物も再現してみます。

CesiumメニューからCesium OSM Buildingsの[+]ボタンをクリックします。
ニョキニョキとビルが生えてきました😁

とはいえ、水道橋っぽさは今一つ見えてこないですね😅
Cesiumには他にも色々なパッケージが用意されていますので、もう少し何かを足す必要があるのかも知れません。

まとめ

ひとまず、今回はここまで。
Cesiumを使うとリアルな地形を簡単に表現できることが解りました。
位置情報を利用したアプリ制作にも使えそうですね!
次回もCesium for Unityの使い方を調べていく予定です😄

私たちは、お客様のご要望にあわせて様々なコンテンツ、アプリを制作いたします。
ご質問やご要望は、<お問い合わせページ>よりお送りください。


この記事が気に入ったらサポートをしてみませんか?