一分鐘看懂
- 目標:用 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,可能附 height 或 building: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,舊版用)。
3. 路線 A:BlenderGIS(視覺化,第一次推薦)
需要:Blender 4.x(Apple Silicon 原生版)+ BlenderGIS 外掛(GitHub domlysz/BlenderGIS)+ 上面的 DirectX .X 外掛。
- 安裝 BlenderGIS,GIS 工具列設定 geo-scene 參考座標——原點設在鯤航碼頭中心
22.9976N / 120.1613E,讓 Blender 公尺座標以那點為中心。 - 切頂視圖(Top Ortho),移到 marina 範圍,按
GIS > Get OSM。 - 勾選
Ways > Buildings、打開 Extrude,設預設高度(背景住宅抓 6–9m = 2–3 層),可設隨機區間增加真實感;要貼地形就勾Elevation from object選地面 mesh。 - 幾秒後整片建築長出來。
- 清理:合併、必要時 Decimate 降面、給 1–2 個簡單材質(牆 + 屋頂),窗戶用貼圖不要做幾何,控制 tri。
- 把物件原點設回參考點(確保 .X 原點對齊你要放的經緯度)。
- 選取 >
Export > DirectX (.x),設好軸向。 - .X 複製進
scenery/Anping/,objects.txt 加一行:
buildings_block.x 120.1613 22.9976 0 0
# 格式:檔名 經度 緯度 alt heading
# alt 依 |水深| 規則,陸地約 0;heading 是 radian 不是 degree
preview_layout.py自己看俯瞰 → 才重啟 VSNG 驗位置 / 比例 / 朝向,再微調 heading(radian)跟公尺偏移。
4. 路線 B:Blosm(blender-osm,最快一鍵)
prochitecture 的 Blosm 外掛,免費版可一鍵匯入 OSM 建築(也能帶地形)。對「純背景量產」比 BlenderGIS 更省事。
其餘轉 .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 腳本(約一兩百行),第一次比較花時間。
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. 誠實評估與下一步
- 先裝 Blender 4.x + BlenderGIS + DirectX .X 外掛,用路線 A 跑 marina 一個小範圍,匯出一個方塊驗 scale / 軸向(半小時內能知道這條路通不通)。
- 通了再
Get OSM整片 marina,輸出一大塊 .X 進 VSNG。 - 確認流程後,要不要我幫你把它 Python 化(路線 C),讀你現有
anping_osm.json直接生 .X,長期一鍵重生?