OSM 建築量產 → VSNG 執行指南(背景城市)

← 首頁

一分鐘看懂

  • 目標:用 OpenStreetMap 建築輪廓,一次自動長出整片背景建築(marina 周邊住宅/商店),丟進 VSNG 安平港場景,省掉一棟棟手刻。
  • 最容易卡的是最後一關「Blender 匯出成 VSNG 吃的 DirectX .X 格式」。好消息:Blender 4.x 官方擴充市集就有現成「DirectX X Format (.x)」匯出外掛,這關解了。
  • 三條路:A) BlenderGIS(視覺化、第一次推薦)B) Blosm(最快一鍵)C) 純 Python 直接生 .X(最適合量產/可重複,配合你現有 python_tools)。
  • 兩個誠實 caveat:① 安平 OSM 建築覆蓋很稀(你 anping_osm.json 只約 13 棟 warehouse),背景城市原料不多 ② 雲端無法幫你實測 .X 在 VSNG 載入正確性,scale / 軸向 / 原點對齊三點第一次跑要親自驗。

1. 這條管道在做什麼

OSM 裡每棟建築是一個平面輪廓 polygon,可能附 heightbuilding:levels 標籤。BlenderGIS / Blosm 會把輪廓「擠出」(extrude)成立體盒子——有高度標籤就用真高度,沒有就給預設值。結果是一整片低面數建築 mesh,再轉成 VSNG 的 .X,用經緯度放進 objects.txt。

本質:你不是在「建模」,是把現成地理資料「自動立體化」。一次處理 50 棟跟處理 1 棟差不多力氣——這就是量產的意義。

2. 先解最容易卡的那關:.X 匯出

VSNG 物件吃 DirectX .x(文字格式)。Blender 早年內建的 .x 匯出器後來被移除,很多人卡在這。

解法:Blender 4.x 官方擴充市集現成外掛「DirectX X Format (.x)」,支援幾何 / 材質 / 貼圖 / 軸向匯出。安裝:Edit > Preferences > Get Extensions,搜尋 "DirectX X Format" 啟用。

備援:社群 arite/io_scene_x(GitHub,支援 Blender 2.8/2.9,舊版用)。

⚠ 第一次一定要做的驗證:匯出對話框有 forward/up 軸向設定。Blender 是 Z-up、DirectX 慣例 Y-up。先匯出一個「已知尺寸的方塊」進 VSNG,確認 ① 1 單位 = 1 公尺 ② 沒有躺平 / 翻轉 ③ 原點位置。這三點對了,後面整片建築才會對。

3. 路線 A:BlenderGIS(視覺化,第一次推薦)

需要:Blender 4.x(Apple Silicon 原生版)+ BlenderGIS 外掛(GitHub domlysz/BlenderGIS)+ 上面的 DirectX .X 外掛。

  1. 安裝 BlenderGIS,GIS 工具列設定 geo-scene 參考座標——原點設在鯤航碼頭中心 22.9976N / 120.1613E,讓 Blender 公尺座標以那點為中心。
  2. 切頂視圖(Top Ortho),移到 marina 範圍,按 GIS > Get OSM
  3. 勾選 Ways > Buildings、打開 Extrude,設預設高度(背景住宅抓 6–9m = 2–3 層),可設隨機區間增加真實感;要貼地形就勾 Elevation from object 選地面 mesh。
  4. 幾秒後整片建築長出來。
  5. 清理:合併、必要時 Decimate 降面、給 1–2 個簡單材質(牆 + 屋頂),窗戶用貼圖不要做幾何,控制 tri。
  6. 把物件原點設回參考點(確保 .X 原點對齊你要放的經緯度)。
  7. 選取 > Export > DirectX (.x),設好軸向。
  8. .X 複製進 scenery/Anping/,objects.txt 加一行:
buildings_block.x  120.1613  22.9976  0  0
# 格式:檔名 經度 緯度 alt heading
# alt 依 |水深| 規則,陸地約 0;heading 是 radian 不是 degree
  1. preview_layout.py 自己看俯瞰 → 才重啟 VSNG 驗位置 / 比例 / 朝向,再微調 heading(radian)跟公尺偏移。

4. 路線 B:Blosm(blender-osm,最快一鍵)

prochitecture 的 Blosm 外掛,免費版可一鍵匯入 OSM 建築(也能帶地形)。對「純背景量產」比 BlenderGIS 更省事。

⛔ 注意:Blosm 付費版有「Google 3D cities」功能——那就是上一份報告講的 Google Earth 擷取,商用禁用,別碰那個模組。只用免費的 OSM building 匯入。

其餘轉 .X / 放 objects.txt 步驟同路線 A 第 6–9 步。

5. 路線 C:純 Python 直接生 .X(最適合量產,配合你現有工作流)

你已經有 anping_osm.json 建築輪廓 + 一整套 python_tools。DirectX .x 是純文字格式,可以跳過 Blender,直接寫腳本:讀 OSM 建築 polygon → 每棟擠出成 box mesh → 直接輸出 .x 文字。

優點:一個腳本重跑就重生全部建築,改高度 / 材質改參數即可,最「量產」、最可重複、進 git 可版控。

代價:要前期寫一支 extrude + .x writer 腳本(約一兩百行),第一次比較花時間。

建議順序:先用路線 A/B 跑出第一版確認 VSNG 吃得下 .X(驗 scale / 軸向),把流程 Python 化長期自動化。別一開始就埋頭寫腳本,先確認管道通。

6. 放進 VSNG:一塊 vs 一棟

做法優點缺點適合
一大塊(整片 marina 建築 = 一個 .X = objects.txt 一行)最簡單、量產首選不能單獨移某棟背景建築
一棟一個 .X(每棟一行)可個別微調位置行數爆炸、難管理需精準對位的地標

背景城市結論:用「一大塊」。

7. 會踩的雷(先知道)

怎麼處理
比例不對先用已知尺寸方塊驗,確認 1 unit = 1m
軸向躺平 / 翻轉匯出器 forward/up 設定,Z-up → Y-up
原點沒對齊.X 原點要等於 objects.txt 那個經緯度,否則整片偏移
heading 用錯VSNG heading 是 radian 不是 degree(PLAYBOOK 已記)
tri 爆掉已有約 600 物件,整片建築要 Decimate + 平面著色 + 窗戶走貼圖
貼圖格式VSNG .X 參考外部貼圖檔,確認用它吃的格式(通常 .bmp/.dds),路徑相對
OSM 覆蓋稀疏安平 marina OSM 建築少(資料約 13 棟 warehouse)。不足時:接受稀疏/自己在 OSM 補繪/AI 生模補關鍵幾棟
IP 保護最終防抄用 model_encoder.exe 轉 .xx(8–9 月再用)

8. 誠實評估與下一步

定位:這條路合法(OSM 是 ODbL 授權,商用 OK,標註來源即可)、自動化程度高,但「安平 marina 的 OSM 建築資料本身偏少」是它最大的現實限制——它擅長「量產一堆中等品質背景盒子」,不擅長「無中生有缺失的建築」。所以定位它為「背景填充」,地標仍走 AI 生模 / 自有空拍。
  1. 先裝 Blender 4.x + BlenderGIS + DirectX .X 外掛,用路線 A 跑 marina 一個小範圍,匯出一個方塊驗 scale / 軸向(半小時內能知道這條路通不通)。
  2. 通了再 Get OSM 整片 marina,輸出一大塊 .X 進 VSNG。
  3. 確認流程後,要不要我幫你把它 Python 化(路線 C),讀你現有 anping_osm.json 直接生 .X,長期一鍵重生?