崔沿沾,陳宇拓,郭怡旭
(中南林業(yè)科技大學 計算機與信息工程學院,湖南 長沙 410004)
地形的三維繪建模,是基于地理采樣點坐標和高程數(shù)據(jù),并結(jié)合計算機圖形學技術對地形進行三維模擬。80年代前,對地形建模的研究主要集中在插值方法、采樣方法以及在工程應用方面,并提出了一些實用的算法,如最小二乘內(nèi)插法和有限元內(nèi)插法等[1]。90年代后,隨著GIS(地理信息)技術的發(fā)展,開始將這些方法廣泛應用于地形建模,如利用等高線生成DEM(數(shù)字高程模型)[2]?;诖罅康睦碚撗芯亢蛯嵺`基礎[3],岳天祥提出了一種高精度的曲面模型建模方法,并使用真實地形數(shù)據(jù)對該方法進行驗證,該方法與傳統(tǒng)的數(shù)字高程模型插值算法相比,插值后得到的地形高程值的精度有了較大程度的提高。王家耀[4]提出了一種搜索圓和搜索正方形的方法,該方法通過改變插值算法中對插值點周圍已知高程采樣點的搜索順序,來對周圍有效數(shù)據(jù)點進行搜索,極大地提高了插值算法效率。湯國安[5]同樣把關注點放在了插值中的搜索過程,其方法考慮了已知高程點對待插值點的方向修正因子,提高了數(shù)字高程模型的插值精度。
近30年來國內(nèi)外的學者提出地形的各種建模方法層出不窮,其理論亦日趨成熟。隨著近年來計算機與網(wǎng)絡對數(shù)據(jù)的處理和運算能力大幅提高,為構(gòu)建和實時呈現(xiàn)大規(guī)模地形與場景模型帶來契機和需求,如大規(guī)模林地場景的綜合建模和動態(tài)模擬,需要處理的數(shù)據(jù)量巨大,模型數(shù)據(jù)結(jié)構(gòu)復雜,因此尋求優(yōu)化和相適應的建模算法,提高建模效率是必須解決的瓶頸問題。近年興起的樹木生長和森林場景建模研究[6-9],做了大量積極有益的理論探索,取得一批成果,但普遍存在建模效率低、真實感不強和動態(tài)效果難以模擬等瓶頸問題,與實際應用還有一段距離。利用Unity3D 三維引擎軟件及其二次開發(fā)技術,將林地地形與樹木、草地等植被模型數(shù)據(jù)有機融合,實現(xiàn)靈活的智能化、參數(shù)化設計,是實現(xiàn)大規(guī)模林地場景綜合建模,突破這一瓶頸問題的有效途徑。
從研究實例對象出發(fā),對大規(guī)模林地地形與場景融合的高效建模方法進行研究。研究對象為湖南省衡東縣四方山林場一、二工區(qū),林場最高點艷陽峰海拔698 m,最低處海拔60 m,屬中低山丘陵地貌,工區(qū)位于林場中西部,113°02′~113°04′E,26°57′~26°59′N,區(qū) 域面 積 約為2 000 m×2 900 m,境內(nèi)植被主要為人工竹林(楠竹),分布有少量的杉樹和楠木等,圖1所示藍色橢圓圈內(nèi)的紅色輪廓線區(qū)域為一、二工區(qū)。
圖1 衡東縣四方山林場林相圖Fig.1 Stock map of Sifangshan forest farm in Hengdong county
地形建模的基本理論已經(jīng)相當成熟,但是由于地表地貌的復雜性和不確定性,以及對于高效、精準、真實感和大規(guī)模等建模要求不斷提高,使得該項的研究不斷地發(fā)展,也成為該領域的研究熱點。地形建模的研究主要是圍繞兩個方面展開:一是如何提高建模算法的效率,這是通過建模所選取的曲面函數(shù)模型來確定;二是如何改進地形模型的逼真度與精確度,這點通過對模型和精度的參數(shù)調(diào)整來確定。
在三維地形建模的過程中,常用數(shù)據(jù)源為等高線或離散高程點。由于獲取到的地形數(shù)據(jù)通常是大范圍的,數(shù)據(jù)分布離散且不規(guī)則,不能保證建模所需要的精度;而增加測量所得的數(shù)據(jù)量,又會加大人力財力的消耗,且會對計算機硬件提出更高的要求。因此,需要在這些離散數(shù)據(jù)的基礎上通過插值算法,來計算樣本點以外其他未知點的高程值。
建模所使用的數(shù)據(jù)來源于四方山林場提供的林相圖(圖1),以及與之相匹配的等高線地形圖,根據(jù)一、二工區(qū)地形圖中的經(jīng)緯度與其對應等高線地形圖進行地理配準,使工區(qū)等高線與該區(qū)域?qū)嶋H的空間位置信息相匹配,然后通過ArcGIS 或AutoCAD 軟件對該區(qū)域等高線進行矢量化并賦予其高程值,圖2(a)和(b)分別為等高線矢量化后并等距離獲取離散點坐標位置的工區(qū)全圖和細節(jié)圖(離散點包含高程值)。根據(jù)工區(qū)面積構(gòu)建一個2 000×2 900 網(wǎng)格,每個網(wǎng)格單位為1 m,等高線矢量化后離散的精度設為5 m,等高線之間的高度差為25 m,這3 個參數(shù)可根據(jù)建模精度的需要靈活配合設置,按給定的參數(shù)得到該工區(qū)總共7 865個DEM 數(shù)據(jù)。
針對大規(guī)模人工林具有地形復雜、數(shù)據(jù)量巨大這一特性,基于規(guī)則格網(wǎng)模型研究全新建模算法,替代雙線性、三次曲線曲面插值等傳統(tǒng)建模方法,目的在于實現(xiàn)林地的靈活高效快捷建模,并能較精準地呈現(xiàn)地貌結(jié)構(gòu)特征效果。建模的算法過程如下:
1.2.1 離散點區(qū)域高程值覆蓋與補孔
對等高線矢量化后等間距離散點的X、Y 坐標取整數(shù),使離散點落在規(guī)則格網(wǎng)點上,高程值不變,對所有的離散點做以下處理:以離散點為中心,向四周擴展取n×n 區(qū)域(n 為奇數(shù),大小約為離散點間距的2 倍),用離散點的高程值覆蓋該區(qū)域內(nèi)各點的高程值。覆蓋原則:如果該區(qū)域內(nèi)的點已經(jīng)有高程值存在(處理前面離散點駐留的高程值),則用大的高程值替代小的高程值。圖3(a) 為對圖2(a)離散點區(qū)域高程值覆蓋結(jié)果,覆蓋區(qū)域大小設為9×9。
圖2 等高線矢量化等間距離散點圖像Fig.2 Equally spaced discrete points of contour line vectorization
從圖3(a)明顯看得出,離散點區(qū)域高程值覆蓋處理后,工區(qū)內(nèi)還存在許多沒有被對高程值覆蓋的孔域,為此需要對這些孔域進行高程值補孔處理。
補孔算法思路如下所述:
1)對圖3(a)工區(qū)高程值數(shù)據(jù)矩陣進行縱橫兩個方向向中間掃描;
2)對滿足前一個點高程值不小于最小高程值,而當前點高程值小于最小高程值,則將當前點高程值用8 鄰域的最大高程值替代。
圖3 離散點區(qū)域高程值替代與補孔Fig.3 Elevation value substitution and hole filling in discrete point area
通過高程值補孔后得到的DEM 數(shù)字高程模型平面圖見圖3(b)(白色區(qū)域所有的點具有各自的高程值),由該結(jié)果生成的網(wǎng)格模型效果見圖4(a),為使網(wǎng)格模型可分辨,圖4模型的縱橫網(wǎng)格點數(shù)量相對圖2各縮小了4 倍。該網(wǎng)格模型的構(gòu)建只需采用鄰域高程值覆蓋替代和掃描補孔完成,比較文獻[2]等生成DEM 方法,大幅減少了建模過程的復雜度和網(wǎng)格點方位搜索與插值的計算量。
1.2.2 基于二次高斯模板的模型平滑處理
采用公式(1)的二次高斯函數(shù)構(gòu)建高斯模板。
圖4 建模過程與模型效果Fig.4 Modeling process and model effects
式(1)中,(i,j)表示二次高斯函數(shù)表面的點的集合,μ1、μ2、σ1、σ2和ρ都為常數(shù)。μ1和μ2表示兩個期望值,決定了函數(shù)所在的位置。σ1和σ2表示兩個方差值,決定了函數(shù)分布的幅度:方差值越小,數(shù)據(jù)分布越集中在期望值相同的情況下凸起的形狀越陡峭;方差值越大,數(shù)據(jù)分布越分散,在期望值相同的情況下凸起的形狀越平緩[10]。ρ表示相關系數(shù)。由此可知,二次高斯函數(shù)形狀的確定主要取決于σ1和σ2這兩個參數(shù)的數(shù)值。給定點(i,j)的值,通過設定函數(shù)覆蓋的范圍以及μ1、μ2、σ1、σ2和ρ等參數(shù)的值,可以獲得以(i,j)為中心,覆蓋范圍內(nèi)其他點的數(shù)值。賦予公式中的參數(shù)不同的值,可以改變圖形凸起的平緩程度和凸起最高點的位置。圖5(a) 為該二次高斯函數(shù)選取一組參數(shù)生成的圖形曲面,將曲面所有點的縱軸值進行量化,各點的值為原有的值與中心點值的比值,中心點數(shù)值為1,從而得到二次高斯函數(shù)模板,如圖5(b)所示為生成的一個11×11 大小的高斯模板也稱高斯算子。從圖5可以看出,該二次高斯函數(shù)改變參數(shù)可得到不完全對稱的模板,通過不對稱高斯模板和對模板四個方位的角度旋轉(zhuǎn)變換或鏡像變換,可以靈活適應林地地形各種變化的平滑建模處理。為討論方便,下面介紹直接用圖5(b)這個基本對稱的高斯模板,來實現(xiàn)對圖4(a) 網(wǎng)格模型可進行高斯平滑處理的算法過程:
圖5 二維高斯函數(shù)圖形及模板Fig.5 Graphics and templates of quadratic Gaussian function
對圖4(a) 的DEM 數(shù)據(jù)矩陣按照從左至右、從上至下的順序進行掃描,有高程數(shù)據(jù)的網(wǎng)格點對應圖5(b)模板中心,將模板覆蓋區(qū)域的高程值乘以一一對應的模板值,求出加權平均值替換掃當前描處理點的高程值,直到掃描處理完成DEM所有網(wǎng)格點和高程值,得到的新的DEM 數(shù)據(jù)矩陣所生成的模型效果見圖4(b)。
通過式(1)構(gòu)建高斯模板的大小和形態(tài)結(jié)構(gòu)是靈活的,本研究針對南方丘陵地區(qū)的地貌特征,構(gòu)建了起伏較平緩的二次高斯經(jīng)驗模板,對一個地形模型只需構(gòu)建一個模板,平滑處理過程通過模板與模型高程數(shù)據(jù)的簡單算術計算來完成。為更精準地對網(wǎng)格模型數(shù)據(jù)平滑處理,由式(1)可構(gòu)建如圖6所示具有坡度傾向的高斯模板,根據(jù)模板覆蓋區(qū)域的高程值分布形態(tài),對模板進行四個方向的旋轉(zhuǎn)和兩個軸向的鏡像變換,這樣可從8種模板形態(tài)選擇一個最合適的模板來進行平滑處理。模板選擇的算法是:將模板覆蓋區(qū)域的高程值量化最大值為1,計算模板四分之一最大值平均值區(qū)域和對角區(qū)域與相對應覆蓋區(qū)域的量化高程值均方差,均方差值最小的為選擇的模板。當然變換模板的平滑處理算法,提高了建模的精度,但增加了時間成本。大量實驗結(jié)果表明,經(jīng)單一高斯模板平滑濾波處理后的模型,在保留模型數(shù)據(jù)整體特征的基礎上,不會造成平滑后的模型太大的誤差和失真,構(gòu)建的地形模型是光滑連續(xù)的,能夠滿足大規(guī)模林地地形實際建模效果的需求。在不注重建模效率,而要進一步提升建模精度時,可以考慮選擇變換模板的模型平滑處理方法。
圖6 式(1)選取不同參數(shù)生成的圖形Fig.6 The graph is obtained by formula (1) selecting different parameters
1.2.3 建模算法效果分析比較
規(guī)則格網(wǎng)模型的建模,常用的算法有反距離加權、線性內(nèi)插、雙線性內(nèi)插、樣條函數(shù)內(nèi)插和移動曲面擬合等算法。圖7為本方法與雙線性內(nèi)插法和三次樣條函數(shù)內(nèi)插法,對圖5(b) 中方框區(qū)域構(gòu)建模型的局部細節(jié)效果比較。這些建模方法是由離散型值點插值生成規(guī)則格網(wǎng)模型,需要進行復雜的空間插值運算和求解二次或三次聯(lián)立方程,如利用三次樣條函數(shù)插值,其本質(zhì)是基于離散型值點生成由控制點控制的曲面片模型,并通過拼接達到模型表面的光滑。而本方法通過區(qū)域高程值覆蓋與補孔,得到基礎網(wǎng)格模型后,經(jīng)高斯模板平滑處理一次性得到光滑連續(xù)的大規(guī)模林地模型,大大降低建模復雜度和提高建模效率。從圖7中本方法與雙線性插值和三次樣條插值的建模效果仔細比較觀察,本方法的模型表面呈現(xiàn)更加光滑、連續(xù)和自然,既避免了圖7(a)中小山包頂部和谷底的平臺不自然現(xiàn)象,也消除了圖7(b)中的奇異值現(xiàn)象(左下角),很明顯本方法整體建模效果優(yōu)于雙線性插值建模效果,但局部建模細節(jié)沒有三次樣條插值模型豐富,這是由于本方法經(jīng)高斯模板平滑處理后,模型呈現(xiàn)光滑連續(xù)形態(tài),但本方法在實現(xiàn)大規(guī)模林地高效率建模的前提下,能夠較好的滿足體現(xiàn)林地模型的基本結(jié)果形態(tài)結(jié)果的需要。本方法與文獻[11]將大范圍場景劃分成小的子塊建模方法比較,可在普通PC 機器上實現(xiàn)2 000×2 900 網(wǎng)格點范圍順暢整體建模,而無需分塊和拼接。本方法尤其適合基于有限的地形高程點數(shù)據(jù),高效地構(gòu)建符合南方人工林丘陵地貌特征效果理想的大規(guī)模模型。
圖7 不同算法建模細節(jié)效果比較分析Fig.7 Comparison of modeling details of different algorithms
近年興起的樹木生長和林分場景建模,不少研究者做了相關基礎研究,但如何實現(xiàn)大規(guī)模林地場景的真實感建模和動態(tài)可視化模擬及實際應用,一致成為困擾研究者的瓶頸問題。我們利用Unity3D 三維引擎軟件及其二次開發(fā)技術,將林地地形和樹木等植被模型有機融合,實現(xiàn)靈活的參數(shù)化設計,是實現(xiàn)大規(guī)模林地場景綜合建模,提升整體建模效率和效果,突破這一瓶頸問題的有效途徑。Unity3D 具有操作簡便、功能豐富、各種效果處理組件、跨平臺支持、兼容好等特點,尤其適合于大規(guī)模三維模型的創(chuàng)建、真實感圖形渲染和動態(tài)模擬,為目前功能最強的主流三維開發(fā)工具之一。
2.1.1 地形模型的導入
在Unity3D 中,地形是由Unity3D 中 的Terrain 組件來創(chuàng)建的。Terrain 包含一些屬性設置按鈕,可以選擇升高、降低、平滑等按鈕,通過地形刷直接改變地形的高低起伏狀況。使用這種方法可以方便、快速地創(chuàng)建一塊仿真地形,對于游戲、動畫等需要虛擬地形的場景來說是一個便捷高效的方法。但是這種刷出來的地形高度、起伏狀況是隨機的,且無法準確賦予確定的位置坐標和高程值,對于需要根據(jù)真實地形數(shù)據(jù)來生成地形模型沒有幫助。因此需要通過編寫Terrain 的腳本讀取外部模型數(shù)據(jù)文件來生成真實地形。
Unity3D 支持讀取txt、Xml 和json 等文本格式的外部文件。將前面構(gòu)建的DEM 生成txt 格式的地形模型數(shù)據(jù)txt 文本文件,通過編寫Terrain的腳本程序,將txt 地形數(shù)據(jù)賦值給Terrain,在Unity3D 中生成由真實數(shù)據(jù)模擬的地形模型。具體過程是:首先在腳本中用Resources.Load()方法獲取存放地形模型數(shù)據(jù)的txt 文件,該文件中保存的地形數(shù)據(jù),用高程數(shù)據(jù)所在的行列值分別代表該點的X 坐標值和Y 坐標值。然后將地形高程數(shù)據(jù)逐行存放到一個二維數(shù)組中,二維數(shù)組的行列值同樣代表著數(shù)據(jù)點的X 值和Y 值,最后將二維數(shù)組中元素的值賦給Terrain 中的地形點,通過編寫的Terrain C#腳本代碼對txt 文件調(diào)用生成的地形模型,如圖8所示。
圖8 Unity3D 中生成的地形模型Fig.8 Terrain model generated in Unity 3D
2.1.2 樹木模型的導入
樹木的三維模型的導入源于前期自主研發(fā)的樹木建模系統(tǒng)[12],圖9和圖10分別是用該系統(tǒng)構(gòu)建的竹木和杉木模型。該系統(tǒng)創(chuàng)建的樹木模型可以.x 文件格式導出。.x 文件是微軟為DirectX3D開發(fā)提供的一種3D 交互模型文件格式,包含模型的結(jié)構(gòu)、材質(zhì)、紋理等信息[13],它還包含一個齊次變換矩陣,通過改變矩陣中的參數(shù),能夠控制模型的比例、旋轉(zhuǎn)、位移和傾斜等變換;它同時支持自定義模板結(jié)構(gòu),可以存儲自定義的任何一種數(shù)據(jù)。.x 文件不能直接被Unity3D 讀取,需要進行模型的格式轉(zhuǎn)換,通過Unity3D 的Deep Exploration 模型轉(zhuǎn)換工具,將.x 文件轉(zhuǎn)換為能夠直接被Unity3D 讀取的fbx 格式,這種格式是一款可跨平臺的3D 文件交換格式[14]。
圖9 竹木模型Fig.9 Bamboo model
需要注意的是,樹木建模系統(tǒng)生成的.x 格式的模型采用的是右手坐標系,在場景顯示中z 軸向上,而Unity3D 空間中使用的是左手坐標系,在場景顯示中y 軸向上。因此,在進行樹木模型轉(zhuǎn)換的時候,需要將樹木模型的坐標系進行變換,使之與Unity3D 空間中的坐標系保持一致。將轉(zhuǎn)換后的樹木模型保存到Unity3D 的Assets 文件夾下,打開Unity3D 場景,找到Assets 中的樹木模型拖入場景中的地形模型上,可以看到地面上“長”出的樹木,如圖11所示。由于生成的樹木模型原始的大小與Unity3D 中所顯示的地形大小不匹配,需要對樹木模型進行設置。點擊Hierarchy 面板中剛拖入的樹木模型,可以分別在Inspector 面板的Position、rotation、scale 和其他屬性設置中調(diào)整其位置、旋轉(zhuǎn)、大小和其他屬性信息。在屬性設置中按照實際樹木與地形的比例對樹木模型進行調(diào)整。
圖10 杉木模型Fig.10 Chinese fir model
圖11 Unity3D 中導入的竹木模型Fig.11 Bamboo model imported in Unity 3D
一個林分中可能存在成千上萬樹木,人工把樹木模型一株一株拖入場景中生成林分是不現(xiàn)實的,會消耗大量的精力和時間。Unity3D 中自帶了批量生成樹木模型的功能,可以將該樹木模型創(chuàng)建為prefab 資源,并添加到生成樹木模型庫當中,然后從模型庫選擇模型,利用Terrain 的地形刷功能將樹木模型大批量種植到地形上。但這種構(gòu)建林分的方式,仍需人工頻繁參與,構(gòu)建林分的靈活性、真實度及自然變化規(guī)律受到限制和得不到具體體現(xiàn)。
為提高建模效率和智能化建模程度,我們構(gòu)建同一樹種不同年份特征的幾個基礎模型的.x 文件,由Unity3D Editor 編輯器創(chuàng)建擴展腳本代碼,實現(xiàn)模型批量導入、批量導入設置和批量創(chuàng)建對應的預制體。腳本依據(jù)林分樣地屬性和結(jié)構(gòu)文件參數(shù)讀取樹木的坐標位置、類型、胸徑和年齡等,將對應樹木基礎模型插入林地表面指定位置的同時,控制樹木基礎模型受約束的隨機的幾何變換,得到不同比例、方位角度和傾斜角度的樹木模型,以免生成的林分模型視覺上過于單一化,使林分建模效果更接近真實林分。腳本根據(jù)林分結(jié)構(gòu)循環(huán)插入樹木,直到插入完成林分中所有樹木生產(chǎn)整體林分后結(jié)束。腳本在構(gòu)建林分模型過程中,還可以對Terrain 的Color Variation、Height Variation 和Width Variation 屬性值進行改變,分別設置樹木模型之間顏色、高度和寬度上允許存在的差異值,以調(diào)整批量生成的樹木模型的不同形態(tài)。圖12為Terrain C# 腳本代碼自動生成的人工林三維場景模型,圖13為局部模型。
圖12 人工林三維場景模型Fig.12 Three-dimensional scene of plantation
圖13 人工林三維場景局部模型 Fig.13 Three-dimensional scene of partial plantation
人工林場景構(gòu)建后,利用Unity3D 對大規(guī)模三維模型的強大后期處理能力,結(jié)合大規(guī)模人工林渲染技術[15]、LOD(層次細節(jié)化)模型技術,陰影模擬和碰撞檢測技術等,從而可實現(xiàn)對人工林景觀的高效、真實動態(tài)可視化模擬,以及扮演林間角色自由行走清晰查看林場和樹木的細節(jié)和形態(tài)。圖14所示呈現(xiàn)了制作的人工林漫游視頻其中2 個中間幀的局部視角細節(jié)效果。
圖14 人工竹林三維場景漫游其中2 幀的效果Fig.14 Effect of 2 frames in 3D scene roaming of man-made forest
本研究采用單一高斯模板平滑濾波處理后的林地模型,在保留模型數(shù)據(jù)整體特征的基礎上,不造成平滑后的模型太大的誤差與失真,能夠滿足大規(guī)模林地地形實際建模效果的需求。為提高建模精度,本研究還討論了變換模板的模型平滑處理方法。本研究提出的大規(guī)模林地建模算法,優(yōu)于雙線性插值和接近三次樣條插值的建模效果,且構(gòu)建的模型表面呈現(xiàn)更加光滑、連續(xù)和自然。本研究利用Unity3D 三維引擎軟件及其二次開發(fā)技術,將林地地形和樹木等植被模型有機融合,實現(xiàn)靈活的參數(shù)化智能建模,在大幅度降低算法過程復雜的同時,有效提高了林地與樹木的綜合建模效率。對于大規(guī)?;虺笠?guī)模林地與樹木植被的自適應高效建模和模型優(yōu)化,以及提升整體建模的智能化程度和真實感模型場景的動態(tài)模擬有待進一步的研究。