3D地図データを軽量化する
目次
はじめに
少し前に「3DデータをGPBに変換」にて、公開されている地理院地図のデータをhgimg4で表示してみました。 何気なく富士山周辺のデータを使っていたのですが、GPBファイルに変換してみると10MByteと大きなサイズになってしまいました。 調べてみると、どうやら5mまたは10mメッシュのデータだそうです。そりゃでかいわけだ。
このままではゲーム利用は、現実的ではありません。 そこで今回は、この巨大な地図データサイズの削減をやってみました。 Unityを使ってできたので、HSP3以外でも活用できると思います。
Unity IDを作成
地図データのサイズ削減にはポリゴン数を減らすUnityの無料アセットを使用します。 アセットストアで配布されているアセットを利用するにはUnity IDが必要です。とにかくUnity IDを作成します。
Unityアカウントの作成方法【初心者向け】
https://dkrevel.com/makegame-beginner/make-unity-account/
こちらのサイトを参考にUnity IDを作成してください。 作業中に気になるのが、Full Name…フルネーム、名前のところですね。 資料によると本名を入れなくても大丈夫みたいです。理由は上記サイトに書いてあるので確認してください。
と、ここで登録作業を進めていて判明した事実。私はアカウント登録済だったようです。完全に忘れてました。そういえば作ったようなきがする。 パスワードリセットでUnityのサイトにログインできました。
Unityのサイトにログインできたら、マイアカウント設定で国や希望の言語を日本語に設定しておきましょう。
アセットストアで無料アセットを購入する
アセットストアにSign Inしてください。
アセットストア( https://assetstore.unity.com/ )
Oh...英語ワカラナイ。わからないので日本語に切り替えます。 一番下までスクロールすると、Language があるので「日本語」をクリックします。 ブラウザの翻訳機能だと翻訳精度が心配なので助かりますね。
一番上の検索欄で、「Mesh Optimizer」と入力して検索します。複数出てきますが、こちらです。
Mesh Optimizer
https://assetstore.unity.com/packages/tools/modeling/mesh-optimizer-154517
- 右側に表示された価格が「FREE(無料)」であることを確認。
- 「マイアセットに追加する」をクリック。
- 利用規約が出てくるので「同意する」をクリック。
- 「マイアセットに追加されました」が表示されます。
登録したUnity IDのアカウントにアセットが追加できました。
Unityを起動してサインイン
Unityを起動してUnity IDでサインインします。 私の場合は、Unity Hubを使っているのでUnity Hubを起動して、右上のアイコンからUnity IDでサインインします。
サインイン出来たら、データ削減したいモデルを使っているUnityプロジェクトを開きます。 まだプロジェクトを作っていない場合は、プロジェクトを作って3Dデータを読み込んでください。
Mesh Optimizerを導入
ここからはこちらのサイトを見ながら進めてみます。
- メニューから ウィンドウ>パッケージマネージャ
パッケージを「マイアセット」に切り替えると導入した「Mesh Optimizer」が表示されます。 - 右下の「ダウンロード」ボタンを押します。
- 右下の「インポート」ボタンを押します。
「Import Unity Package」ウィンドウが開きます。 - 右下の「インポート」ボタンを押します。
- パッケージマネージャを閉じます。
- UnityのAsset上に「Mesh Optimizer」というフォルダが増えています。
これで、このプロジェクトで「Mesh Optimizer」が使用できるようになりました。
地図データをコンバート
地理院地図( https://maps.gsi.go.jp/ )から適当な地図データをダウンロードして、ヒエラルキーに登録してください。
作業は、「3DデータをGPBに変換」を参考にしてください。
読み込んだらまずは、現状確認のため「シーン表示に使われる描画モード」をワイヤーフレーム(Wireframe)に切り替えてみます。
おっと…真っ黒。5mか10mメッシュのデータだそうなので、まあ…こうなりますよね。ファイルサイズが大きくなるのもうなずけます。
- ヒエラルキーに登録されている地図モデルを選択して、インスペクターを表示します。
- インスペクターの中に「Mesh Renderer」の項目があることを確認します。
- 開いたインスペクターにMeshOptimizerのスクリプトをアタッチします。
- 手順は、プロジェクトの Assets\Mesh Optimizer\Scripts を開きます。
- OptimizeMesh.csファイルがいるので、このアイコンをマウスで掴んでインスペクターにドロップします。
Optimize Meshのコンポーネントが追加されました。
使い方は、「品質」を調整して「Optimize Mesh!」をクリックすればいいだけのようです。
品質を「0.02」にして「Optimize Mesh!」を押してみました。
ワイヤフレームにテクスチャを表示するため、「シーン表示に使われる描画モード」を「Shaded Wirefram」に切り替えます。
形状が平坦な部分はポリゴンが荒く、形状が複雑な部分はポリゴンが細かくなっていますね。
ゲームで使うだけなら十分な品質だと思います。
早速、FBXにエクスポートしてGPB形式に変換してみます。
参考資料:3DデータをGPBに変換
10MBが180KBになりました。
98%の削減に成功しました。ハハハ…こんなことなら早く使っておくべきでした。
(アップロード容量制限のために手間ひまかけて10MBを分割したのに…。)
FBXファイルを3Dビューアーで開くとポリゴン数が確認できます。
メニューから ツール>統計情報と網掛け を選択すると、右側にデータに関する情報が表示されます。
元データ:258,908 ポリゴン
変換後 :5178 ポリゴン
ポリゴン数も 98% の削減です。すごいですね。
サンプル
GPB形式に変換したファイルをこちら(地表を歩く)のスクリプトで読み込んでみました。 データ量削減前のものとほとんど変わりません。もう少し減らしても大丈夫そうです。 この品質でこのサイズなら十分ゲームやツールを開発して配布までできそうですね。
出典
このページで掲載している地図画像データについて。
出典:地理院地図(https://maps.gsi.go.jp/)
起伏を見やすくするため、高さを2倍にしています。
データサイズ削減のためポリゴン数を削減して使用しています。