文/王衛(wèi)玲 劉瑜 初建崇 劉洪春
數(shù)字城市的淵源來自于美國副總統(tǒng)戈爾于1998年1月21日提出的數(shù)字地球的概念,自此之后,中國學(xué)者特別是地學(xué)界的專家認(rèn)識到“數(shù)字地球”戰(zhàn)略將是推動我國信息化建設(shè)和社會經(jīng)濟、資源環(huán)境可持續(xù)發(fā)展的重要武器,并于1999年11月29日至12月2日在北京召開了首屆“數(shù)字地球”大會。至此,三維城市的發(fā)展也緊隨其后,成為近20年來的熱點之一。三維數(shù)字城市是城市資源可視化的最佳方式,是適應(yīng)社會飛速發(fā)展的技術(shù)手段,有助于城市的招商、引資,在城市建設(shè)、公安交通、城市管線、房地產(chǎn)發(fā)布等方面發(fā)揮著積極的作用。三維城市的發(fā)展與三維制作軟件和三維展示平臺是分不開的。目前,三維制作軟件已經(jīng)能夠滿足三維城市模型制作的要求,客觀、真實地反映出城市面貌,三維展示平臺也已經(jīng)有了諸如泰瑞公司的Skyline、偉景航的CityMaker等能夠承載海量場景、進行空間數(shù)據(jù)分析的優(yōu)秀軟件。對于一個城市而言,建筑數(shù)量往往多達幾十萬棟,工作量十分巨大。因此,尋求一種快速、高效的建模方法是構(gòu)建三維虛擬城市的關(guān)鍵,而MaxScript在其中的貢獻不容小覷。
本文以山東省某市三維數(shù)字城市建設(shè)過程中遇到的實際問題為例,以3d Max為數(shù)據(jù)建設(shè)平臺,以Skyline為海量數(shù)據(jù)的承載、展示和分析平臺,從三維歷史數(shù)據(jù)的整理過程,介紹了3d Max的腳本語言MaxScript在整個工作流程中的完成的功能及部分代碼實現(xiàn)。由此可以看到,MaxScript在三維數(shù)據(jù)的批量化處理過程中能夠做到準(zhǔn)確、快速、有效,使得數(shù)據(jù)處理過程中大量繁雜、重復(fù)性的工作得以自動化處理,大幅提高了工作效率。
圖1:批量修改max文件名稱界面
MAXscript是3ds Max內(nèi)置腳本語言,Max2.0及以后加入的功能。它不但擁有一般程序語言的所有特點,而且可以在程序內(nèi)實現(xiàn)幾乎所有在3ds max界面下的交互操作,功能非常強大,而且語法比較簡單,容易上手。MAXscript也能使用在與3ds Max相關(guān)的產(chǎn)品中如Autodesk VIZ,character studio,Plasma和GMax;腳本可使用于建模,動畫,材質(zhì),渲染等等。它是專門為3D Studio Max設(shè)計的。
圖2:批量修改名稱結(jié)果
MAXscrip使用一個開放式界面來自定義和編寫 3ds Max 腳本,3ds Max的大多數(shù)功能都可以通過腳本調(diào)用,開發(fā)人員可以輕松擴展用戶界面和自動化操作以執(zhí)行批處理。用戶可以通過 OLE Automation 建立外部系統(tǒng)的實時接口??梢赃@樣說,用腳本可以把Max幾乎所有的功能重寫一遍(少數(shù)功能除外),而且能實現(xiàn)無法用鼠標(biāo)鍵盤實現(xiàn)的操作。
MaxScript可以運用3D矢量、矩陣、四維數(shù)等代數(shù)工具來完成高級復(fù)雜的程序設(shè)計任務(wù),適用于對含有大量對象的集合進行操作。比如在大場景中進行十分復(fù)雜的選擇,構(gòu)造星空等復(fù)雜場景,或者把集中的大量物體分別放在精確的位置等,如果用手工來完成將會極其繁瑣和復(fù)雜,而且不能保證效果,而MaxScript卻可以通過幾行代碼瞬間完成。可以建立批處理工具,這樣可以把3d Max從業(yè)人員從一些簡單重復(fù)的工作中解脫出來。
我中心的三維數(shù)字城市建設(shè)起步于2004年,屬于skyline系統(tǒng)平臺的首批用戶。模型建設(shè)從零起步,沒有成型的經(jīng)驗可供借鑒。因此,最早建設(shè)的三維模型數(shù)據(jù)跟現(xiàn)在成熟的建模流程相比,存在著很多不足:
(1)模型命名采用中文。目前很多GIS軟件平臺對中文命名的模型支持度都不是很好,在模型的導(dǎo)入導(dǎo)出以及查詢分析的過程中會有兼容性不佳情況出現(xiàn)。
(2)模型未與坐標(biāo)結(jié)合。建筑模型都是單個建設(shè),位于坐標(biāo)原點歸底歸中。模型無法批量化進入平臺,只能手工單個按照影像擺放,大大降低了工作效率。但是這批模型卻是極其具有歷史價值的,它是10多年前城市面貌的三維立體化展現(xiàn),是現(xiàn)有的三維城市模型所無法代替的。在歷史數(shù)據(jù)的整理過程中,需要MaxScript腳本語言輔助3d Max結(jié)合生成虛擬三維城市,其中涉及到中文名稱修改為英文、按坐標(biāo)擺放建筑模型、按dem將建筑模型墜地等工作,要實現(xiàn)這些過程的批量自動化檢驗和修正,MaxScript就成為了不可或缺的重要工具。MaxScript強大的批量操作功能,使重復(fù)性工作能夠準(zhǔn)確、快速完成,發(fā)揮出不可替代的作用。
本文采用3d max建模,導(dǎo)出為.x或者為xpl2格式,進入SkyLine平臺進行大場景展示。導(dǎo)入導(dǎo)出的相關(guān)屬性信息均保存于shp表格中。在批量修改3dmax模型的名稱之前,首先要借助之前從平臺導(dǎo)出的shp文件,文件中包含有模型的中文名稱、坐標(biāo)信息、旋轉(zhuǎn)角度raw等內(nèi)容,如圖1所示。借助shp中的中文名稱這一屬性欄,利用excel表格的自動填充功能,制作出兩個csv文件,一個為原名.txt,另一個為要修改成的新名.txt。然后就可以啟動MaxScript編寫好的插件,批量進行模型名稱的修改。結(jié)果如圖2所示。
部分簡要代碼如下:
用MaxScript批量修改模型名稱,高效而準(zhǔn)確,節(jié)省了大量的人力物力,成倍提高了工作效率。
模型建設(shè)初期,由于沒有摸索出成型的建模經(jīng)驗,也沒有其他的經(jīng)驗可供借鑒,因此,模型采用了單體化建模,并且沒有跟gis坐標(biāo)相結(jié)合,每個3d Max模型都是在坐標(biāo)原點建模,
這種建模方式存在著很大的制約性,將來不管是轉(zhuǎn)換坐標(biāo)系統(tǒng)還是要更換展示平臺,都會成為工作無法高效開展的瓶頸。因此,將單個模型按3d Max的數(shù)據(jù)承載度以區(qū)塊方式加坐標(biāo)存放模型勢在必行。
首先,要按照事先導(dǎo)出的shp表格,做出一張模型名稱與坐標(biāo)及旋轉(zhuǎn)角度raw的對應(yīng)關(guān)系,然后利用maxscript編寫的插件,批量實現(xiàn)按區(qū)塊、按坐標(biāo)存放的模型。如圖3所示。
簡要代碼如下:
在三維平臺中準(zhǔn)備完畢的遙感影像已和高程屬性合一,所有樓房模型只需按照導(dǎo)入3d max的dem,統(tǒng)一在一個水平面上而浮動在遙感影像上即可,這樣的方法免去三維模型建造中的高程手工賦值工作。利用MaxScript操作所有模型數(shù)據(jù)統(tǒng)一高程,不但彌補了建模過程中可能出現(xiàn)的錯輸現(xiàn)象,對于已經(jīng)附帶高程屬性的模型也可按照這一標(biāo)準(zhǔn)執(zhí)行。據(jù)此,可利用MaxScript來進行批量修改這些模型的高程。如圖4所示。
簡要代碼:
三維數(shù)字城市建設(shè)模型數(shù)據(jù)量龐大,準(zhǔn)確快速地構(gòu)建三維模型是進入場景進行三維分析應(yīng)用的首要前提。本文針對在工作中遇到的實際問題,在歷史模型整理的過程中,引入MaxScript腳本來解決批量修改成英文名稱、批量按坐標(biāo)導(dǎo)入3d max平臺、批量按dem修改模型高程的問題,為三維數(shù)據(jù)的應(yīng)用提供了極大的便利性。項目最終證明,采用MaxScript腳本語言進行數(shù)據(jù)處理是比較簡單易行的,大大提高了工作效率,在三維城市構(gòu)建中發(fā)揮了不可替代的重要作用。
圖3:批量按坐標(biāo)擺放的界面及結(jié)果
圖4:按dem修改模型高程界面及結(jié)果