王 剛, 馬 錦
(重慶市勘測院,重慶 401120)
游戲開發(fā)引擎在三維場景可視化表達方面表現(xiàn)突出,已被應用于建筑、影視和三維地理信息等多個領域。在三維地理信息的可視化過程中,如何整合不同參考系下的多源地理數(shù)據(jù)一直是一個難題。地理數(shù)據(jù)參考有大地坐標系、投影坐標系、地理坐標系和工程坐標系等多種坐標系統(tǒng),不同坐標參考下數(shù)據(jù)的位置、形狀存在明顯差異。傳統(tǒng)的地理信息系統(tǒng)(GIS)通常支持常用的坐標轉換功能,以實現(xiàn)兩個或多個參考系下的數(shù)據(jù)在可視化和疊加分析等操作中的位置統(tǒng)一。游戲開發(fā)引擎早期的建設過程中并沒有考慮多參考系地理數(shù)據(jù)的整合問題,因此在將其用于三維GIS的建設時,存在坐標難以統(tǒng)一的問題。本研究以虛幻引擎4(Unreal Engine 4,UE4)為例,分析不同坐標系下數(shù)據(jù)在UE4中存在的問題,針對存在的問題研究解決方法并應用實踐。
虛幻引擎是EpicGames公司開發(fā)的三維場景創(chuàng)作平臺,UE4是其第四代產品,目前已更新至4.27,在不久的將來第五代虛幻引擎也將正式推出。UE4具有強大的三維可視化、虛擬仿真、場景交互等功能,不僅是應用最廣泛的游戲創(chuàng)作平臺,還被用于影視、建筑、汽車、GIS等領域。在跨平臺方面,UE4可以支持Windows、IOS、Android、Xbox等多種平臺,為不同設備不同場景的應用提供了強大的支撐[1]。此外,UE4的開發(fā)具有藍圖和C++兩種模式,其官網(wǎng)提供了大量的開發(fā)教程,其開發(fā)方式簡單,門檻低,深受廣大3D創(chuàng)作者的青睞。
在三維地理信息場景的建設中,三維地理數(shù)據(jù)通過轉為FBX和OBJ等中間格式導入UE4引擎中,利用UE4的大氣模擬、光影效果、粒子效果以及材質系統(tǒng)等功能,可以逼真地模擬真實地理場景,同時利用其交互功能,可以在時間和空間上對逼真的地理場景進行漫游。
UE4自身的坐標系統(tǒng)為空間直角坐標系,而三維地理數(shù)據(jù)的坐標系有空間直角坐標系、投影坐標系、地理坐標系和工程坐標系,將不同坐標系的數(shù)據(jù)整合到UE4平臺中主要存在坐標軸方向不統(tǒng)一、形變不同、參考面不統(tǒng)一以及定位精度不夠等方面的問題。
UE4中的坐標系為左手系,而三維地理數(shù)據(jù)的坐標系多數(shù)為右手系,左手系與右手系的差異表現(xiàn)在z軸方向的不同,如圖1所示。
圖1 左手坐標系與右手坐標系差異示意圖
由于坐標軸方向的不同,右手空間直角坐標系導入后,保持z軸向上,則y軸的方向會被翻轉,原本的正方向會變成負方向,發(fā)生翻轉的地物與實際地物呈鏡像顯示,顯示情況如圖2所示。
圖2 數(shù)據(jù)因坐標軸方向的不同而發(fā)生翻轉
坐標軸方向的不同給地理場景的可視化、位置計算、方向判斷、感知信息接入等環(huán)節(jié)造成了一定的影響,在應用過程中需要進行專門處理。
地球表面是一個不規(guī)則的球面,將不規(guī)則的球面通過數(shù)學變換展開到平面上的過程稱為地圖投影,不論選擇何種投影方式,投影過程中都會發(fā)生形變。以高斯-克呂格投影為例,其示意圖如圖3所示。
圖3 高斯-克呂格投影示意圖
高斯-克呂格投影是一種橫軸等角切圓柱投影,分為3°分帶和6°分帶兩種。無論是3°分帶還是6°分帶,其投影結果都有以下4個特點[2]:(1)中央經(jīng)線上無變形;(2)除中央經(jīng)線外其他地方均有變形,且變形長度均大于1(即被拉伸);(3)距離中央經(jīng)線越遠的地方,變形越大;(4)距離赤道越遠的地方,變形越小。
根據(jù)以上特點可知,投影坐標系下不同區(qū)域的地物形變方向和形變程度均不相同,不同的投影系下的數(shù)據(jù)受參考橢球、投影方式以及中央經(jīng)線等影響,相同區(qū)域的地物變形也會不同。將不同投影坐標系下的三維地理數(shù)據(jù)導入UE4中,其位置會存在差異。
地理空間數(shù)據(jù)的高程和方向因坐標系的不同而存在差異,其中空間直角坐標系與一般的平面直角坐標系存在本質的不同。
以CGCS2000橢球體空間直角坐標系為例,原點和軸向的定義是:原點在地球的質量中心;z軸指向IERS參考極(IRP)方向;x軸為IERS參考子午面(IRM)與通過原點且同z軸正交的赤道面的交線;y軸與z、x軸構成右手正交坐標系。示意圖如圖4所示。
空間直角坐標系是三維地理數(shù)據(jù)常用的參考系,其優(yōu)勢可以將整個地球表面、地下以及空中用一個坐標系表達,在這個坐標系下地物幾乎不存在變形,地物的形狀、相對位置精確。利用空間直角坐標系進行數(shù)據(jù)的組織是地理空間數(shù)據(jù)“上球”的重要方式。
圖4 空間直角坐標系示意圖
投影坐標系與工程坐標系的高程通常以似大地水準面為準,方向為垂直向上,而在空間直角坐標系中,地物是垂直于橢球面向上的,不同位置的地物其朝向不同。參考系為空間直角坐標系的地理數(shù)據(jù)導入UE4中,很難與平面直角坐標系數(shù)據(jù)進行配準,給數(shù)據(jù)的疊加分析和可視化造成了困難。
虛幻引擎最初是為了游戲開發(fā)而打造的,沒有將地理數(shù)據(jù)的范圍大、精度要求高的特點考慮其中。在UE4編輯器中,數(shù)據(jù)類型只有單精度(float)而沒有雙精度(double)類型。眾所周知,單精度數(shù)據(jù)類型的比特數(shù)為32,有效數(shù)字為6~7位,且UE4編輯器中的距離單位通常為厘米,由此可以推算,當精度為厘米級時,UE4中可精確表示的最大坐標范圍在10~100 km之間,定位精度要求更高的數(shù)據(jù)則可表示的范圍更小。在地理場景的搭建中,數(shù)據(jù)范圍往往比較大,遠遠超過了單精度浮點型數(shù)據(jù)類型的精度,float數(shù)據(jù)類型無法滿足UE4中大場景的定位需求,從而影響多源地理數(shù)據(jù)的疊加。
根據(jù)以上分析,虛幻引擎加載地理三維數(shù)據(jù)過程中存在坐標軸方向不一致、參考面不一致、形變不均勻以及數(shù)據(jù)精度不滿足等問題,本文對這些問題結合實際應用環(huán)境,提出了相應的解決方案。
在地理三維模型數(shù)據(jù)導入UE4過程中,因坐標軸方向不同引起的y坐標值相反問題可以從數(shù)據(jù)導入引擎后和數(shù)據(jù)導入引擎前兩個環(huán)節(jié)進行解決。
當數(shù)據(jù)導入引擎內部后,可以在引擎內部進行翻轉,使其y軸方向上的值為原來的相反數(shù)。UE4提供了簡單易用的位置變換接口,用戶只需要在編輯器中對應的位置輸入變換值即可。如圖5所示,選擇要變換的模型數(shù)據(jù),在圖中的位置輸入數(shù)值“-1”,模型數(shù)據(jù)即會發(fā)生翻轉。
圖5 UE4編輯器中利用位置變換對y軸進行翻轉
除了在編輯器中進行變換,還可以對導入前的數(shù)據(jù)進行預處理。在預處理過程中無需對模型的所有頂點坐標進行更改,只需要給模型加一個變換矩陣即可。坐標變換計算如公式(1)。
(1)
式中:P′為變換后的左手坐標系下的點坐標;Sy為由于翻轉y軸的變換矩陣;P為右手系下的點坐標。
通過以上方法進行坐標軸的翻轉實現(xiàn)右手系和左手系的轉換可以使地理場景在UE4中正常顯示。
相對形變是由于坐標參考系不統(tǒng)一導致的,減小或消除相對形變的重要手段是統(tǒng)一坐標參考系,該過程需要將不同坐標系下的數(shù)據(jù)轉換到同一坐標系下。坐標轉換通常情況下可以分為已知參考系的坐標轉換和未知參考系的坐標轉換,未知參考系的坐標轉換需要通過控制點進行轉換參數(shù)的擬合,通常分為平面四參數(shù)和三維七參數(shù)兩種。
(1)已知參考系坐標轉換。已知參考系的坐標轉換通過借助數(shù)學函數(shù)庫進行高斯反算、橢球變換和坐標投影等過程完成。例如將西安80坐標系3度分帶105°帶下的數(shù)據(jù)轉換到CGCS2000坐標系3度分帶105°帶下的步驟如圖6所示。
圖6 已知參考系間的坐標變換
(2)四參數(shù)轉換。平面四參數(shù)轉換方式利用已知同名點進行擬合獲得最佳的轉換參數(shù),利用公式(2)進行轉換[3]。
(2)
式中:x0,y0為平移參數(shù);α為旋轉參數(shù);1+m為尺度參數(shù);x2,y2為輸出坐標系下的平面直角坐標;x1,y1為原坐標系下平面直角坐標。
(3)七參數(shù)轉換。與四參數(shù)轉換原理相似,七參數(shù)轉換是用于三維坐標間的轉換[4],相對四參數(shù)多了1個平移參數(shù)和2個旋轉參數(shù),轉換公式如(3)所示。
(3)
式中包括三個平移參數(shù),三個旋轉參數(shù)和一個尺度因子。其中x,y,z表示轉換后的坐標; Δx,Δy,Δz為平移參數(shù);εx,εy,εz為旋轉參數(shù);m為尺度參數(shù);x′,y′,z′為原坐標系下的三維坐標。
空間直角坐標系下的地物在地表上呈現(xiàn)一個球面,具有一定的曲率,將其導入UE4后與平面數(shù)據(jù)無法疊加,對此可以預先將空間直角坐標系數(shù)據(jù)轉換到平面坐標系,可以利用地圖投影的方式進行[5]。當工程范圍不大時,可以通過矩陣變換將曲面數(shù)據(jù)與平面數(shù)據(jù)盡可能重合,以減小差異。如圖7所示是地表曲面與平面疊加的高差與位置分析。
如圖7所示,當范圍距離D為1 km時,高差ΔH≈0.0784 m。在UE4中將平面系三維數(shù)據(jù)與空間直角坐標系球面數(shù)據(jù)進行疊加效果如圖8所示。當D超過一定范圍時,球面坐標系數(shù)據(jù)和平面坐標系數(shù)據(jù)高差會明顯增加,球面數(shù)據(jù)會被平面數(shù)據(jù)遮擋。同時,隨著D的增加,地物在平面上的距離也會發(fā)生明顯變化。對于此方法的適用范圍,可以根據(jù)工程的精度要求進行確定。
圖7 曲面與平面疊加高差與位置關系示意圖
圖8 球面坐標系數(shù)據(jù)與平面坐標系數(shù)據(jù)(底板數(shù)據(jù))疊加效果
為了滿足UE4中單精度數(shù)值存儲類型的數(shù)據(jù)精確性,工程中可將絕對坐標的值拆分為兩部分,其中統(tǒng)一的、大數(shù)值的偏移量保留于數(shù)據(jù)外部,而文件中存儲的則是減去一個較大數(shù)值后的數(shù)字,可以為-99 999.9~99 999.9之間,如此可以保證1 mm的定位精度。例如投影平面坐標值為(65 312 345.6,327 512 345.6)(單位cm)則可以表示為(653×105+12 345.6,3 275×105+12 345.6)。
利用以上的分析與研究,本文進行了虛幻引擎加載多源地理數(shù)據(jù)的實驗。實驗使用數(shù)據(jù)有CGCS2000投影坐標系下的傾斜攝影實景數(shù)據(jù)、WGS84空間直角坐標系下的地形數(shù)據(jù)以及地方獨立坐標系下的手工模型數(shù)據(jù)。
實驗將傾斜攝影實景數(shù)據(jù)通過坐標值拆分的形式進行了坐標值的減小,從而避免其導入UE4后丟失精度,利用四參數(shù)的形式將手工模型與傾斜攝影實景數(shù)據(jù)所匹配,最后利用七參數(shù)轉換的方式將地形數(shù)據(jù)與前者數(shù)據(jù)進行匹配。最終結果顯示,三者數(shù)據(jù)位置相對準確,可以滿足三維地理場景的視覺要求,顯示效果如圖9所示。
圖9 多源三維數(shù)據(jù)整合效果
本文從虛幻引擎加載多源地理數(shù)據(jù)存在的坐標不統(tǒng)一的問題出發(fā),分析了各參考系下數(shù)據(jù)的特點,提出了解決坐標軸翻轉、數(shù)據(jù)變形、參考面不統(tǒng)一以及數(shù)據(jù)精度不夠的方法,可為虛幻引擎加載多源地理數(shù)據(jù)提供參考。