文/王衛玲 劉瑜 初建崇 劉洪春
數字城市的淵源來自于美國副總統戈爾于1998年1月21日提出的數字地球的概念,自此之后,中國學者特別是地學界的專家認識到“數字地球”戰略將是推動我國信息化建設和社會經濟、資源環境可持續發展的重要武器,并于1999年11月29日至12月2日在北京召開了首屆“數字地球”大會。至此,三維城市的發展也緊隨其后,成為近20年來的熱點之一。三維數字城市是城市資源可視化的最佳方式,是適應社會飛速發展的技術手段,有助于城市的招商、引資,在城市建設、公安交通、城市管線、房地產發布等方面發揮著積極的作用。三維城市的發展與三維制作軟件和三維展示平臺是分不開的。目前,三維制作軟件已經能夠滿足三維城市模型制作的要求,客觀、真實地反映出城市面貌,三維展示平臺也已經有了諸如泰瑞公司的Skyline、偉景航的CityMaker等能夠承載海量場景、進行空間數據分析的優秀軟件。對于一個城市而言,建筑數量往往多達幾十萬棟,工作量十分巨大。因此,尋求一種快速、高效的建模方法是構建三維虛擬城市的關鍵,而MaxScript在其中的貢獻不容小覷。
本文以山東省某市三維數字城市建設過程中遇到的實際問題為例,以3d Max為數據建設平臺,以Skyline為海量數據的承載、展示和分析平臺,從三維歷史數據的整理過程,介紹了3d Max的腳本語言MaxScript在整個工作流程中的完成的功能及部分代碼實現。由此可以看到,MaxScript在三維數據的批量化處理過程中能夠做到準確、快速、有效,使得數據處理過程中大量繁雜、重復性的工作得以自動化處理,大幅提高了工作效率。

圖1:批量修改max文件名稱界面
MAXscript是3ds Max內置腳本語言,Max2.0及以后加入的功能。它不但擁有一般程序語言的所有特點,而且可以在程序內實現幾乎所有在3ds max界面下的交互操作,功能非常強大,而且語法比較簡單,容易上手。MAXscript也能使用在與3ds Max相關的產品中如Autodesk VIZ,character studio,Plasma和GMax;腳本可使用于建模,動畫,材質,渲染等等。它是專門為3D Studio Max設計的。

圖2:批量修改名稱結果
MAXscrip使用一個開放式界面來自定義和編寫 3ds Max 腳本,3ds Max的大多數功能都可以通過腳本調用,開發人員可以輕松擴展用戶界面和自動化操作以執行批處理。用戶可以通過 OLE Automation 建立外部系統的實時接口??梢赃@樣說,用腳本可以把Max幾乎所有的功能重寫一遍(少數功能除外),而且能實現無法用鼠標鍵盤實現的操作。
MaxScript可以運用3D矢量、矩陣、四維數等代數工具來完成高級復雜的程序設計任務,適用于對含有大量對象的集合進行操作。比如在大場景中進行十分復雜的選擇,構造星空等復雜場景,或者把集中的大量物體分別放在精確的位置等,如果用手工來完成將會極其繁瑣和復雜,而且不能保證效果,而MaxScript卻可以通過幾行代碼瞬間完成。可以建立批處理工具,這樣可以把3d Max從業人員從一些簡單重復的工作中解脫出來。
我中心的三維數字城市建設起步于2004年,屬于skyline系統平臺的首批用戶。模型建設從零起步,沒有成型的經驗可供借鑒。因此,最早建設的三維模型數據跟現在成熟的建模流程相比,存在著很多不足:
(1)模型命名采用中文。目前很多GIS軟件平臺對中文命名的模型支持度都不是很好,在模型的導入導出以及查詢分析的過程中會有兼容性不佳情況出現。
(2)模型未與坐標結合。建筑模型都是單個建設,位于坐標原點歸底歸中。模型無法批量化進入平臺,只能手工單個按照影像擺放,大大降低了工作效率。但是這批模型卻是極其具有歷史價值的,它是10多年前城市面貌的三維立體化展現,是現有的三維城市模型所無法代替的。在歷史數據的整理過程中,需要MaxScript腳本語言輔助3d Max結合生成虛擬三維城市,其中涉及到中文名稱修改為英文、按坐標擺放建筑模型、按dem將建筑模型墜地等工作,要實現這些過程的批量自動化檢驗和修正,MaxScript就成為了不可或缺的重要工具。MaxScript強大的批量操作功能,使重復性工作能夠準確、快速完成,發揮出不可替代的作用。
本文采用3d max建模,導出為.x或者為xpl2格式,進入SkyLine平臺進行大場景展示。導入導出的相關屬性信息均保存于shp表格中。在批量修改3dmax模型的名稱之前,首先要借助之前從平臺導出的shp文件,文件中包含有模型的中文名稱、坐標信息、旋轉角度raw等內容,如圖1所示。借助shp中的中文名稱這一屬性欄,利用excel表格的自動填充功能,制作出兩個csv文件,一個為原名.txt,另一個為要修改成的新名.txt。然后就可以啟動MaxScript編寫好的插件,批量進行模型名稱的修改。結果如圖2所示。
部分簡要代碼如下:

用MaxScript批量修改模型名稱,高效而準確,節省了大量的人力物力,成倍提高了工作效率。
模型建設初期,由于沒有摸索出成型的建模經驗,也沒有其他的經驗可供借鑒,因此,模型采用了單體化建模,并且沒有跟gis坐標相結合,每個3d Max模型都是在坐標原點建模,
這種建模方式存在著很大的制約性,將來不管是轉換坐標系統還是要更換展示平臺,都會成為工作無法高效開展的瓶頸。因此,將單個模型按3d Max的數據承載度以區塊方式加坐標存放模型勢在必行。
首先,要按照事先導出的shp表格,做出一張模型名稱與坐標及旋轉角度raw的對應關系,然后利用maxscript編寫的插件,批量實現按區塊、按坐標存放的模型。如圖3所示。
簡要代碼如下:


在三維平臺中準備完畢的遙感影像已和高程屬性合一,所有樓房模型只需按照導入3d max的dem,統一在一個水平面上而浮動在遙感影像上即可,這樣的方法免去三維模型建造中的高程手工賦值工作。利用MaxScript操作所有模型數據統一高程,不但彌補了建模過程中可能出現的錯輸現象,對于已經附帶高程屬性的模型也可按照這一標準執行。據此,可利用MaxScript來進行批量修改這些模型的高程。如圖4所示。
簡要代碼:

三維數字城市建設模型數據量龐大,準確快速地構建三維模型是進入場景進行三維分析應用的首要前提。本文針對在工作中遇到的實際問題,在歷史模型整理的過程中,引入MaxScript腳本來解決批量修改成英文名稱、批量按坐標導入3d max平臺、批量按dem修改模型高程的問題,為三維數據的應用提供了極大的便利性。項目最終證明,采用MaxScript腳本語言進行數據處理是比較簡單易行的,大大提高了工作效率,在三維城市構建中發揮了不可替代的重要作用。

圖3:批量按坐標擺放的界面及結果

圖4:按dem修改模型高程界面及結果