PLATEAUの3D都市をSketchUpのデータ形式に変換してみる

前回の記事で、松山城の地形モデルをSKP形式に変換してインポートする方法をご紹介しましたが、今回は国土交通省が推進するPLATEAU(プラトー)というプロジェクトで公開されている日本国内の都市データから、松山城とその周辺の3Dモデルをダウンロードし、SketchUp Freeで利用できるSKP形式へのデータ変換をしてみます。
実際に試した手順はこちら
・Unreal Engine と PLATEAUプラグイン を使って3D都市モデルをFBX形式でエクスポート
・pCon.planner で複数のFBX形式を結合し、SKP形式(SketchUp対応形式)へ変換
今回ご紹介する方法は、外部ソフトやプラグインをいくつか利用し手順も複雑です。長くなりますので細かい操作説明は省いて、なにをやったか一連の流れだけ紹介していきます。
PLATEAUの都市モデルとは?
PLATEAUは、国土交通省が推進している、日本全国の都市をデジタルツインとして再現するプロジェクトです。(2022年度で全国71都市をオープンデータ化)
このプロジェクトでは、都市空間に関する多様な情報がCityGMLというデータ形式で一般公開され、都市計画や防災活動など幅広い分野で活用されています。
CityGMLには建築物や地形の3Dモデルも含まれており、都市開発や建設などの大規模プロジェクトだけでなく、個人用途でも新築時の敷地検討などに活用できるかと思います。
都市モデルの詳細度(LOD)について
PLATEAUの都市データにはLOD(Level of Detail)という、モデルの詳細度を示す概念があります。
ここで使おうとしている建築物3Dモデルの場合はLOD1~4のレイヤに分かれています。
LOD1 | LOD2 | LOD3 | LOD4 |
---|---|---|---|
建物+高さ情報 | +屋根形状 | +外構(開口部) | +室内 |
![]() | ![]() | ![]() | ![]() |
建物の箱型モデル | 建物の屋根形状表現 壁面テクスチャによる 都市空間の再現性の高さ | 建物の外構(窓,ドア)を表現することによるアイレベルの再現性の高さ | BIM/CIMとの連携により建物内部までモデル化することによる屋内外の シームレスな表現 |
※この表にはありませんが、LOD0という2D(平面)のデータもあります。
建築物モデルでLOD4まで提供しているのは都心の一部など、限られた場所だけのようですが、個人が敷地検討に使うだけならLOD1~2で十分です。(提供される都市データのLODは自治体によりに違いがあります)
詳細なモデルはこれからもっと充実してくるのではないかと思われます。楽しみですね。
データ変換の結果と試した手順の概要
場所は前回記事と同じ松山城周辺です。
今度はPLATEAUの都市データから、地形と建物の両方の3DモデルをSKP形式に変換してみようと思います。結果はこんな感じになります。

約1km四方を取り込んでみました。かなり広いエリアです。
この大きさでSKPデータの容量は50MB程度あり、SketchUpFreeでの動作は重いです。
これをデータ変換した流れは次の通りです。
①UnrealEngineのPLATEAUプラグインで都市データから3Dモデル(FBX形式)を出力
・CityGML(都市データ)をダウンロードし、プラグインで読み込み
・地形や建物ごとに分けてインポートし、それぞれをFBX形式でエクスポート
②pCon.plannerで複数の3Dモデル(FBX形式)を結合してSKP形式へ変換
・FBX形式のファイルを一つずつ読み込んで全てを結合
・一つのSKP形式のモデルにしてエクスポート
SKP形式にデータ変換する手順として、UnrealEngineのPLATEAUプラグインを使って地形や建物を小分けでエクスポートし、pCon.plannerでそれを合体させてSKPで保存、という手法を取ります。
この手順は少々複雑で手間のかかることをやっていますので、細かい操作説明は省いて流れを追うだけの紹介とします。
UnrealEngineでPLATEAUの3D建物を出力
【このステップで使うソフトウェア】
・Unreal Engine Ver5.3.2。公式サイト
・PLATEAU SDK for Unreal(UnrealEngineのプラグイン)公式マニュアル
PLATEAUで提供される建物モデルは、以前はOBJ形式やFBX形式などで配布されていましたが、最新のデータはCityGML形式での配布となっています。
CityGML形式の都市データには建物形状に加え、地物の用途や建築年など都市活動に関する様々な情報も含まれていますが、ここで使うのは建物と地形です。
これをUnrealEngineのPLATEAUプラグイン(以下、PLATEAU SDKと表記)を使って、利用したいデータを選択してFBX形式で出力します。
都市データをあらかじめダウンロード
PLATEAU SDKでのCityGMLの読み込みは、ローカル(自分のPC)またはサーバーいずれかの選択となります。この記事ではローカル読み込みの方で説明します。
ローカル読み込みの場合は、Plateauのサイトから都市データをあらかじめダウンロードする必要があります。



CityGMLはZIP形式の圧縮ファイルになっています。
適当なフォルダに展開しておく必要があります。
ローカル読み込みでは、これらのファイルが入ったフォルダを指定します。
PLATEAU SDK (プラグイン)の起動
ダウンロードしたCityGMLはUnrealEngine(Ver5.3)に導入したプラグインPLATEAU SDKで読込みします。
まずはUnrealエディタを普通に起動します。


UnrealEngineにPLATEAU SDKがインストールできていれば、エディタ画面上部のメニューバーにPLATEAUのメニューが追加されています。ここからプラグインを起動します。

都市データの読み込みと設定
CityGML(都市データ)には、いろいろな種類の地物データ(地形や建物)が入っています。
この中から、選択したエリアの地物データを単体でインポートしていきます。
この例では松山城周辺約1km四方の地物データを使おうとしています。これらのデータは次のように小分けにしてインポートしていきます。
・起伏データ(地形)×1個
・建築物データ×4個(メッシュ区画4個分)
💡地物データをまとめてインポートしないわけ
PLATEAU SDKでは選択した範囲の地物(地形や建物)は全てUnrealエディタ上で結合されますが、エクスポートする時は地形や建物の一部が出力されない場合があります。この状況は地物をそれぞれ単体でインポートすることで回避できます。(プラグインの仕様?単に僕の理解不足だったらすみません…)
これらの地物データを結合した状態でエクスポートする方法がわからなかったので、ここでは地物データを一つずつインポート/エクスポートしたものを、外部ソフトウェアのpConplannerで結合する方法を取ります。
地物データを全て結合した状態でエクスポートする良い方法を知っている方がおられましたら教えてください(;^_^)
起伏データ(地形)をインポート
最初に地形のデータだけをインポートします。
(建物データは別にインポートします)
その前に都市データのフォルダを指定します。

続いて基準座標系の設定です。

座標精度向上のため必要な設定です。利用する都市データの位置に近い座標系を設定をしておかないと、次のマップ選択で座標ズレが生じます。
次はマップを表示してインポート範囲を選択します。

範囲選択をクリックしたら、マップ画面が開きます。
このマップを使って、読み込みしたいエリアのタイルを選択します。

LOD(左下のチェック欄):マップに表示される地物情報をLODでフィルタリング
メッシュコード:日本国土の各地域を区画して割り当てられた数字(青の太枠線内)
画面左下のチェック欄にLOD(モデル詳細度)の色別が示されています。
この地域では、建物が青なのでLOD2、地形やその他はLOD1であることが分かります。どのLODを使うかは、この次の地物別設定で選択します。
地物別設定では起伏(地形)データだけ読込みするように設定します。

モデルをインポート をクリックしてからインポートが終わるまで少々時間がかかります。
インポートに成功すると、プロジェクトのビューポートに地形の3Dモデルが表示されます。

起伏データ(地形)はこれでOKです。
次は建物をインポートします。
建築物のインポート
都市の追加 と 基準座標系の選択 はそのままにして、マップ範囲選択 から再設定します。
建築物はマップに表示されている8桁のメッシュコード(青の太枠線)ごとでインポートします。
先に読み込んだ地形のエリアは4区画にまたがっていますので、4回に分けてインポートします。

💡建築物の範囲選択の補足
建築物データを一括で(メッシュコード8桁の青枠をまたいで)Unrealエディタにインポートすることは可能ですが、エクスポートでは1区画分しか出力されないため、このように区画の小分けでインポートしています。
続いて、LOD2の建築物だけをインポートする設定にします。
最小をLOD0のままにしていると、LOD0(平面モデル)やLOD1(箱型3Dモデル)のモデルも重複して読み込みされるので、LOD2(建物形状の再現モデル)だけを読み込む設定にしてインポートします。

モデルがエディタ内に現れるまで時間がかかるかもしれませんが、しばらく待つと建物がビューポートに追加されます。

地形と建物を別々に読み込んでいるので場所が一致してませんが、今は気にしません。地形と建物データの正確な位置合わせは、次のステップで行います。
ここではインポートされたものが目視で確認できれば良いです。
同じ要領で残りの建築物もインポートする
今回、建物データを取り込む範囲はメッシュ4区画分をまたいでいるので、あと3区画を同じ要領でインポートします。
Unrealエディタだけで利用するのであれば、このような小分けインポートをする必要はありません。しかし前述のとおり、エクスポートするときは地形が出力されなかったり、建物はメッシュ区画1個分しか出力されなかったりという状況になります。
なので、手間ですが地形と建物をそれぞれ別でインポートして出力用のオブジェクトを作ります。
この事例では全部で5個のエクスポート用モデルを作りました。
- 地形モデル×1個
- 建築物モデル×4個

Unrealエディタのアウトライナー(画面左)でモデルの詳細が確認できます。
続いて、これらを1個ずつエクスポートしていきます。
3DモデルをFBX形式で出力する
PLATEAU SDKを使ってプロジェクト内にインポートした3Dモデルは、OBJ,FBX,GLTFのいずれかのフォーマットでエクスポートすることができます。
ここではFBX形式でエクスポートします。
まずはUnrealエディター側でエクスポートするモデルを一つ選択します。

エクスポートは一つずつ行います。順不同でかまいません。ビューポートでモデルを直接選んでも構いません。
PLATEAU SDKメニューのエクスポートタブでFBX形式を選び、オプションの項目では、複数3Dモデルの連結で原点合わせするための設定をして3Dモデルを出力します。

・出力形式は FBX を選択
・座標設定は 平面直角座標 を選択(原点合わせのために必要な項目)
・座標系の設定は WUN を選択
出力先フォルダを設定して モデルをエクスポート を押すと、すぐに出力されます。エラーで「ファイル出力に失敗しました」と出る場合がありますが、3Dモデルは出力されています。
この例では5つの地物モデルを作っているので、このエクスポートの手順を5つ分繰り返します。
次のステップでこれらを連結してSKPへ変換します。
3DモデルをpCon.plannerでデータ変換
【このステップで使うソフトウェア】
pCon.planner公式サイト
こちらはインテリアデザイン用CADですが、SketchUpと相性がよいのでデータ変換に使っています。
このステップではpCon.plannerというCADソフトウェアを使いますです。
ここまでで5つのFBXファイルを作りましたが、これらを一つの3Dモデルに連結して、SketchUpFreeで扱えるデータ(SKP形式)に変換します。
地形データを開く
pCon.Plannerを使って、まずは地形データを読み込みます。
File > Openで地形のファイルを開くと、Scalingメニューが表示されます。
ここではBase Unit(基本単位)を Centimeterer(cm) に設定します。

UnrealEngineでは長さの単位はcmのため、縮尺を合わせておく必要があります。
続いて、The drawing content is~ の確認が出たら はい とします。

これでモデルが持つ起点座標のと位置関係を保持してインポートされます。このあと、建物データを連結するときに必要な設定です。
読み込みに成功すると、画面に地形モデルが表示されます。
オブジェクトをクリックするとプロパティに座標が表示されます。

これが位置合わせのための原点座標です。
あとから追加インポートする建物モデルはすべてこれと同じ座標にします。
何かにメモしておくか、直接コピペでもかまいません。
地形の南北が逆さですが、すべてのデータの位置合わせが終わるまでそのままにしておきます。
今度は建築物を追加していきます。
建築物データをインポートする
モデルの追加は File > Import
を使います。
Scalingダイアログが出たら Centimeter になっていることを確認して開きます。
インポートした建物データは仮置きしておきます。場所は大体で構いません。
仮置きした際に向きが変わらないようにだけ注意します。

建築物データを原点合わせする
建物モデルをクリックするとプロパティに座標が表示されます。
この座標を、地形モデルと同じ座標値にします。

今回作ったFBXモデルは、PLATEAU SDKのエクスポート設定で、原点座標を平面直角座標(グローバルな共通原点)にしているので、座標値を同じにすることでこれらの位置がぴったり一致します。
残り3個の建物データも同じ要領でインポートします。

これで地形データと建物データをすべて同じ場所に置きました。
SKP形式としてエクスポート
データの連結は出来ましたが、南北が反対になったままです。
SketchUp Freeにインポートしたときに直しても構いませんが、pConplannerとSketchUpの軸は同じ向きなので、ここで戻しておくのが手っ取り早いです。
Ctrl+Aで全選択して、回転ハンドルをクリックして回します。

あとはSKP形式でエクスポートするだけです。

Export > Geometry でSKP形式を選んで保存します。

SKP形式は最新バージョンにして、Option 設定は Export Materials にチェックを入れておくと3Dモデルのテクスチャも一緒に出力されます。
これでSKP形式への変換ができました。
SketchUpFreeで開いて確認
作成したSKP形式のファイルをSketchUp Freeで開いてみます。
その前に位置情報を設定しておきます。
これを設定しておくことで、正確な日陰シミュレーションを得ることができます。
影 → タイムゾーンを+9:00(日本)
場所を追加 で松山城周辺の位置情報をインポートします。

このストリートマップは3Dモデルの方位合わせに使います。
続いて先ほど作った松山城周辺の3Dモデルをインポートします。

今回の3Dモデルは約50MBあり、ブラウザ版のSkethUp Freeとしてはかなり大きいサイズです。
読み込みに少し時間がかかります。
3Dモデルの読み込みに成功したら、移動ツール、回転ツールなどを使って、3Dモデルをストリートマップと合うように配置します。

配置完了です。こんな感じになりました。

とても緻密な3Dモデルとして表現されています。
方位もちゃんと合わせたので、日陰シミュレーションもしてみましょう。
気になる3Dモデルの再現度は?
松山市中心部の都市モデル詳細度はLOD2です。Plateauの仕様によれば、LOD2は屋根形状まで表現されているということですが、どれぐらい正確に再現されているか気になるところです。
ということで、googleストリートビューの写真と比べてみましょう。
ストリートビューの撮影月は10月を選んでいます。

SketchUpの日付スライダーも10月頃に合わせ、日陰の形が合う時間帯に調整しました。
道路に現れた日陰の形を見ると、大体同じ形をしていることがわかります。建物の輪郭も実際の写真とほぼ同じで、3Dモデルの再現性の高さがうかがえます。すばらしい!
別の都市も変換してみた
同じ手法を使って、別の都市も変換してインポートしてみました。
見栄えの良いLOD2テクスチャ付きの都市を選んでみました。
新宿駅周辺

大阪舞洲(まいしま)

Plateauで提供されるCityGMLの建物3Dモデルは、航空レーザースキャンや写真測量を駆使して収集されたデータをもとに、専用のソフトウェアで処理・3Dメッシュ化されているということです。
これらの高品質な3D都市モデルがオープンデータとして気軽に利用できるのはありがたいですよね。すごい時代になったものです。
対応する都市が増えるのが楽しみですね!
まとめ
今回は国土交通省が主導するPLATEAU(プラトー)というプロジェクトで提供される日本国内の都市データを、SketchUp Freeで使えるSKP形式に変換してみよう、というテーマでした。
データ変換の流れは次の通りです。
①UnrealEngineのPLATEAUプラグインを使ってCityGMLから3Dモデルを出力
・都市データのダウンロードと読み込み
・地形や建物ごとに分けてインポートし、FBX形式でエクスポート
②pCon.plannerで複数の3Dモデル(FBX形式)を結合してSKP形式へ変換
・複数のFBX形式のファイルを読み込んで全てを結合
・一つのSKP形式のモデルにしてエクスポート
データ変換の手段ひとつではありませんので、一つの参考例としていただけたらと思います!
ディスカッション
コメント一覧
まだ、コメントがありません