前編では、国土交通省の3D都市モデル PLATEAU から東京駅・丸の内エリアをダウンロードし、Blenderに読み込みました。ところが、そのデータは 「重すぎてそのままゲームには使えない」 という問題を抱えていました。今回の【中編】では、この重たいデータを Unityで扱える軽さに整え、書き出すまでをやっていきます。

🗼 シリーズの流れ
【前編】 PLATEAUのデータを入手してBlenderで読み込む
【中編】(今回) ポリゴンを削減・整理してUnity向けに書き出す
【後編】 Unityで配置して、街を歩けるゲームにする

前編のおさらい ― なぜ最適化が必要か

前編で読み込んだのが、この東京駅・丸の内エリア(実写テクスチャ付き)です。

前編で読み込んだ東京駅・丸の内エリア

見た目は立派ですが、中身に深刻な問題がありました。建物の壁や屋根が1枚ずつ別々のオブジェクトに分かれていて、その数なんと約4万5千個。Unityでは 1オブジェクト=1つのGameObject として扱われるため、このまま持ち込むと4万5千個のGameObjectがシーンにあふれ、エディタもゲームも重くなってしまいます。

⚠️ ポイント:問題は「ポリゴン数」より「オブジェクト数」
頂点24万・面4.5万というポリゴン数は、現代のUnityなら実はそれほど怖くありません。本当の重さの原因はオブジェクト(GameObject)が多すぎること。まずはここを潰します。

今回の作業環境

項目内容
マシンMacBook Pro(Apple Silicon M4)
Blender5.1.1(結合・削減・エクスポート)
Unity6000.4.5f1(Unity 6・ビルトインRP)
元データ前編の東京駅・丸の内(メッシュ53394611・LOD2)

オブジェクトを1つに結合する(最大の軽量化)

一番効くのが 「結合(Join)」 です。Blenderで全オブジェクトを選択し、オブジェクト → 統合(Ctrl/⌘+J) で1つのメッシュにまとめます。これだけで結果は劇的です。

最適化前後の比較:オブジェクト数45,455から1へ

45,455個 → 1個。頂点や面の数は変わりませんが、Unityでの扱いが「4万5千個のGameObject」から「たった1個」になります。これがUnityにおけるPLATEAUデータ最大の軽量化です。テクスチャ(マテリアル)は結合しても保持されるので、見た目はそのままです。

ポリゴン削減(デシメート)という選択肢

「もっと軽くしたい」場合は、ポリゴン自体を減らせます。まず 重複した頂点をマージ(Merge by Distance)すると、分割されていたぶんの無駄な頂点が消えます。さらに デシメート(Decimate)モディファイア で面そのものを間引けます。今回の例では次のように減りました。

💡 マージはちらつき対策にもなる
PLATEAUのデータは同じ場所に面が二重に重なっていることがあり、そのままだと表示がチラチラ(Zファイト)することがあります。重複頂点のマージ+法線(面の向き)の統一をしておくと、この二重面が解消され、テクスチャも安定して表示されます。軽量化だけでなく「見た目の安定」にも効く整理です。
工程頂点数面数
結合のみ243,06245,455
+ 重複頂点マージ約 77,000約 44,500
+ デシメート(0.5)約 39,000約 33,000

削ると見た目はどう変わる?

気になるのは「削って見た目が崩れないか」です。実際に削減して同じアングルでレンダリングし、比べてみました。まず 50%まで削減したケース。

元データと50%削減の比較。ほとんど違いがない

面の数を半分にしても、パッと見ではほとんど違いが分かりません。この程度なら安心して削れます。一方、大幅に(元の15%まで)削ったのがこちら。

元データと大幅削減の比較。ビルのエッジが甘くなり崩れる

ここまで削ると違いがはっきり出ます。ビルの角(エッジ)が甘くなり、平らだった壁が微妙に波打ち、屋上やテクスチャがにじんで見えます。「どこまで削るか」は、軽さと見た目のバランスで決めることになります。

ℹ️ 「結合」では見た目は変わりません
ちなみに、前の章でやったオブジェクトの結合は、見た目がまったく変わりません(データのまとめ方が変わるだけ)。見た目に影響するのは、このデシメート=ポリゴンを削る操作のほうです。
⚠️ デシメートはテクスチャと相性が悪い
デシメートで面を間引くと、UV(テクスチャの貼り付け位置)が崩れやすく、建物の見た目が荒れることがあります。今回はテクスチャの美しさを優先し、Unityへ持っていくのは「結合のみ」のバージョンにしました。ポリゴン数は元から許容範囲なので、無理に削らない判断です。用途に応じて使い分けましょう。

FBX と glTF、どちらで書き出す?

Unityへ渡す形式として、代表的な FBXglTF(.glb) の両方で書き出して比べました。どちらもテクスチャを埋め込んでエクスポートできます。

形式サイズUnityでの扱い
FBX約26MB◎ 標準対応。追加パッケージ不要(今回採用)
glTF(.glb)約28MB○ オープン規格。読み込みに専用パッケージが必要

UnityはFBXを標準でそのまま読めるので、特別な理由がなければFBXが手軽です。glTFはWebや他ツールとの相性が良いオープン規格ですが、Unityで使うにはインポート用パッケージの追加が必要になります。

エクスポート設定の注意点

BlenderからUnity向けにFBXを書き出すとき、いくつか設定のコツがあります。

  • 軸の向き:UnityはY軸が上・Z軸が前。Blender標準とは違うので、エクスポート時に 前方=-Z/上=Y に合わせる(ビルトインで用意されています)
  • スケール:単位スケールを適用して、Unity側で巨大/極小にならないようにする
  • テクスチャの同梱:パス参照ではなく埋め込み(Embed Textures)にしておくと、ファイル1つで完結して受け渡しが楽

Unityにインポート →「真っ白」の対処

書き出したFBXをUnityの Assets に入れると自動で取り込まれます。シーンに置いて表示すると——街が真っ白。テクスチャがありません。

⚠️ ハマり:FBXに埋め込んだテクスチャは「抽出」が必要
FBXの中にテクスチャは入っているのに、Unityは初期状態だとそれを展開してくれず、マテリアルが空っぽ(真っ白)になります。これはPLATEAUに限らずFBX全般でよくあるつまずきです。

直し方はインポート設定の Materials(マテリアル)タブ から。

  1. Assets内のFBXを選択 → インスペクターの Materials タブを開く
  2. 「テクスチャを抽出(Extract Textures)」 を押し、保存先フォルダを選ぶ(埋め込み画像がファイルとして取り出される)
  3. 「マテリアルを抽出(Extract Materials)」 を押す(テクスチャと結びついたマテリアルが作られる)

今回のデータでは テクスチャ927枚・マテリアル927個 が一気に展開され、マテリアルが正しく再マッピングされました。結果、Unityのシーンに実写テクスチャ付きの東京駅・丸の内が表示されました。

Unityに表示された、テクスチャ付きの東京駅・丸の内
💡 さらに上を目指すなら
マテリアルが927個あるということは、Unityでは927回の描画(ドローコール)が発生します。本格的に軽くするなら、複数のテクスチャを1枚にまとめる「テクスチャアトラス化」という上級テクニックもあります(今回はそこまではやりません)。

まとめと後編予告

  • ✅ Unity最大の軽量化は結合:オブジェクト数 45,455 → 1(テクスチャは保持)
  • ✅ さらに軽くするなら重複頂点マージ+デシメート(ただしテクスチャが荒れるトレードオフ)
  • ✅ 書き出しはFBXが手軽(Unity標準対応)。軸・スケール・テクスチャ埋め込みに注意
  • ⚠️ Unityで真っ白 → Materialsタブでテクスチャ/マテリアルを抽出すればテクスチャ復活

これで、実在の東京駅・丸の内が Unityでちゃんと表示できる軽さになりました。次回【後編】は、いよいよこの街にプレイヤーを置いて歩き回れるゲームに仕立てます。お楽しみに。

※ 本記事で使用した都市データの出典:3D都市モデル(Project PLATEAU)国土交通省/G空間情報センター

それでは、今回はここまで。ありがとうございました😊