肖巍,馮時,王選遙
(1.長春師范大學 教育學院,長春 130032;2.吉林大學 計算機科學與技術學院,長春 130012)
虛擬現實(VR)技術作為一門新興的綜合性信息技術,在很多領域都發揮著不可或缺的作用[1]。虛擬現實技術應用在文化、旅游方面是國家近些年提倡的“藝術與科技結合”的主要表現手段之一[2]。長白山是東北文化旅游最強IP之一,借助科技手段打造長白山虛擬現實文化旅游藝術體驗平臺,既可實現長白山自然、人文以及歷史景觀的數字化游覽,又可以作為宣傳推廣東北文化旅游的數字化工具,無論從文化傳播推廣上還是促進旅游產業發展上都具有非常重要的意義。
長白山虛擬現實體驗平臺主要使用虛擬現實互動技術,在顯示層面使用基于次世代游戲引擎標準的貼圖和模型生成技術,目的是從視覺效果上最大程度還原長白山旅游景區的自然風景效果。虛擬現實需要借助引擎實現最終顯示結果,制作流程上采取次世代游戲的方法實現:制作腳本-執行腳本-質量監控機制(技術標準)-人員落實-項目時間表-小規模反饋與修正-大規模制作。該虛擬現實體驗館由音樂(音效)、視覺顯示、實時互動三個并聯部分構成,在初期實施過程中,分別實現,互不干擾,各部分趨于完成時將三部分整合到一起進行調整。
虛擬現實體驗平臺在構建自然環境的過程中,主要使用寫實性的視覺呈現方法,視覺還原部分使用基于三維掃描技術的互動式建模方法(Interactive Modeling Method Based on Scanning Tech),簡 稱IMM-BST[3]。該方法綜合了掃描模型生成法和三維游戲的手動模型生成法,是現有各種建模方法中的首選。首先,對全景地貌,使用航拍技術配合地質等高線方法生成置換/高度貼圖(Displacement Map),再使用換算方法將貼圖的黑-灰-白像素以低-中-高(閾值)的形式賦予多邊形模型,模型上的網格頂點與黑灰白像素一一匹配對應,而生成全面廣袤的地形。其次,對于植被與動物,采取手動建模+數字化貼圖的形式制作。最后,把制作好的地形和植被與動物以“模板素材”的方式輸入到引擎中,在引擎中進一步構建長白山風光,直到最終封包、發布。
長白山北區地形較為復雜,在靠近山脈處多為玄武巖等材質,北坡景區主要集中于長白山北麓的谷地中,自北向南逐步升高,上升趨勢較緩。但在長白山北坡瀑布處有明顯的高低落差。地形景區分布從北向南海拔依次為:地下森林、綠淵潭、小天池、長白山溫泉、盤山公路、長白山北坡瀑布、天池。
虛擬現實的地形構建是整個平臺項目實施的關鍵,本文使用現實衛星數據制作長白山區的高度圖,并最終在虛幻4引擎中實現用戶體驗效果。整體地形的制作步驟:搜集資料,整理高程圖(提取灰度圖作為置換貼圖的基礎)——配合等高線圖進行局部修正——進行實地勘察——在虛幻中將高度圖生成地形——對比圖片、影片構建地形。
地形是自然界最復雜的景物之一,在虛擬現實中,三維真實感地形的繪制一直是國內外圖形學,CG娛樂產業領域關注的熱點[4]。地形的模擬可以分為兩類:真實地形與模擬地形[5]。真實地形是現實世界中真實地形的再現,具有非常高的真實度,必須采用真實世界中的具體數據來構造,這時多采用數字高程模型(Digital Elevation Model,DEM)[6],其本質是在對數字地面模型的一種地形分量進行考慮。
本平臺項目主要考察長白山地區的景區旅游資源,因此對于現實場景的還原度就是本項目的制作標準。地形數據的搜集分為宏觀衛星數據搜集(GIS圖形搜集+等高線位圖、多地圖對比)和微觀實地踏查數據。項目所需長白山全景高程DEM圖片,順時針分為ABCD4個點,A點坐標為北緯42°04′53.71 ″;東經127°07′51.63 ″,B點坐標為北緯42°04 ′53.71 ″,東經127°07′24.64″,C點坐標為北緯41°58′40.71″,東經127°59′51.63″,D點坐標為北緯41°58′40.71”東經127°07 ′24.64 ″,該坐標可把長白山脈及北麓所有景區收入其中。
對于DEM數據的拼接,三維地形表面工具可在不規則空間點的基礎上產生三維地形表面[7],它要求所輸入的數據必須具有X、Y、Z值,即經度、緯度和海拔高度,應用TIN插值方法,所輸出的是一個連續的柵格圖像文件(ERDASIMAGINE系統的DEM文件),每一個已知Z值的空間點在輸出的地形表面上保持Z值不變,而沒有Z值的空間點,其輸出表面的Z值是基于其周圍的已知點插值計算獲得的。將數據補充方法作為距離加權內插法,對各不確定點數值實施預測,通過近鄰的已知點數值實施加權計算,獲取不確定點的數值,基于距離獲取所給的權重:

式中,W(di)為權函數;zi表示第i個已知點的數量;di為i點與不確定點間的距離。臨近離散點同不確定點間的分布情況不同,對f(x,y)產生不同的干擾作用。W(di)等于1/di2是最佳結果,di的平方的反比決定了W(di) 值的高低[8]。
ARCGIS作為一個可伸縮的平臺,為個人用戶也為群體用戶提供GIS的功能,使用該平臺可得到應用于虛幻4引擎的高度圖,置換地形數據。本文使用國家綜合地球觀測數據共享平臺一號衛星的數據,使用ArcObjects組件式GIS開發技術,通過ARCGIS整合GIS數據,在軟件內部最終轉換DEM高程圖為灰度位圖。灰度圖的精度只對于山峰等凸起處的顯示起主要作用,對于谷底置換的高度不佳。為此,就需要等高線圖比較和根據實地探查再進行修正。
虛擬現實體驗平臺是基于正常人視角的漫游項目,需要反復多次去長白山調研,拍攝大量照片和素材作為后期制作參照。為了進一步提升地形精度,制作團隊分別于春、夏兩季4次上山采集。春季采集地形可在無積雪和樹葉遮擋的情況下拍攝山體起伏照片,夏季采集地形可記錄植被密度,查看實際環境中的遮擋關系,為劃分關卡做基礎。
長白山區的地理位置和地形較為敏感,無法通過衛星數據獲得全部旅游地形信息,實地考察地形可為后期數字化地形構建的提供重要參考依據。因此,團隊使用經緯儀交匯法、測距導線法,配合GPS測量手動繪制地形圖,得到實地數據。
為了校準數據,可將ARCGIS的灰度圖數據導入World Creator2軟件,配合實地勘察數據手動調整。World Creator2是基于細分算法的實時地形生成軟件,高度圖在該軟件中作為多邊形調節和預覽。根據比例尺對地形進行定點調整,可實時監測每個點的高度數據,調節過程如圖1-圖4所示。圖1是ARCGIS中生成灰度圖所置換的地形高度,為未手動校準的地形,該地塊的海拔高度存在一定誤差,圖2為使用World Creator2手動校準過的地形。

圖1 未手動校準的地形

圖2 使用World Creator2手動校準過的地形
將在World Creator2中調節后的多邊形重新輸出為灰度圖導出,重新置換地形高度。對比結果,圖3為制作的灰度圖在World Creator2中的顯示效果,精度為1∶50 000,圖4為谷歌地球的效果,精度為1∶250 000。

圖3 1∶50 000精度灰度圖

圖4 1∶250 000精度灰度圖
虛幻4的場景地形并非是簡單的多邊形,其基于多邊形顯現和優化原理[9],但為了達到最佳顯示效率,虛幻引擎對場景地形做了一定的優化并制定了一系列規則。
如果按照1∶1還原地形,同時又為了節省計算機現實資源,虛幻4使用“Level”把整塊地形劃分為幾部分。對于超大地形來說,用戶在漫游時(指用戶視角身處場景當中,非俯視),目力所及的空間或被山脈遮擋,或被植被遮擋,沒有必要整體顯示全部地形。這樣,虛幻引擎就可以指定隱藏和顯示的部分。如對一塊Landscape_A的正方形場景地形,其占地面積為81平方公里,按照1∶1比例還原。為了節約加載速度,把其平均分為3×3段,這樣每個地形的邊長就是9公里。整個場景共分為9部分,每一部分可以作為一個獨立顯示的關卡進行分別加載,那么每一個關卡就是9平方公里。把關卡按照引擎可讀取的X,Y方向進行坐標軸分布,分別命名為Landscape_A_X0_Y0,依此類推,直到Landscape_A_X2_Y2。假設用戶的出生點在Landscape_A_X0_Y0關卡中,如果該場景中存在山脈、植被、高樓或環境霧等具有遮擋視線作用的物體存在,那么理論上說,用戶是不可能看到Landscape_A_X2_Y2這么遠的距離。因此,只需加載Landscape_A_X0_Y0和與之臨近的Landscape_A_X0_Y1、Landscape_A_X1_Y1、Landscape_A_X1_Y0。
虛幻4引擎對于外部地形數據有著嚴格的要求和標準。對于本項目來講,地形功能下的“Scale”選項下的Z值、“Section Size”、“Section per Component”、“Number of Component”、“總體分辨率”、“總組件”參數,它們制約了外部導入地形的精度和比例大小,也決定了整體讀取速度和漫游體驗效果。在虛幻4的地形編輯器中,從外部導入的地形依據節省顯示資源的原則,需要將之被劃分為幾個Component,即地形組件,其作用是分割整塊地形,便于為關卡劃分提供便利。如果該場景地形中并無其余“靜態網格”多邊形組件,則地形是該場景中唯一組件,則地形等于組件;如果將之分為不同組件,則地形關卡等于每個組件。
用戶還可以對每個地形組件中分段的種類進行進一步細分。引擎提供了1×1和2×2個分段。虛幻4地形的優化方法基于LOD技術。如果把一個場景劃分為4個組件,每個組件下再劃分為4個分段,每個分段中所提供的多邊形支持就可以通過1×1和2×2進行選擇。1×1個分段意思是每個組件的多邊形數量等于分段的數量,那么整個地形組件多邊形數量是16,2×2的意思是每個組件之中最大可被放入4個多邊形,最小可放入1個多邊形,那么整個地形組件多邊形的數量就是4-16。如果整個場景占地面交較小,為了提升顯示精度,則可以使用1×1,本項目場景較大,為了提升加載速度,使用2×2個動態分段。
本項目基于實際高度圖進行置換導入,對于外部高度圖,虛幻4引擎要求地形必須為偶數頂點,按照分段的最小頂點數量計算,1個分段必須具備9個多邊形,共16個頂點,那么虛幻4引擎最優顯示的組件、分段、頂點數量的最小可識別單位計算方式為:1個地形具有2×2個分段,每個分段有12×12個多邊形,整體有13×13個頂點。那么整體的地形尺寸就可以依據以下公式類推:
式中,S為虛幻4引擎整體地形頂點數量,該值可確定整個場景地形大小;Sq為每個分段占有四邊形的數量;Cs為每個組件的分段數量;C為組件數量。
虛幻4引擎按照灰度圖中像素點的灰度值計算生成地形高度Z值。在讀取灰度圖時,虛幻4引擎把灰度共分為512級,即高低落差可置換512個Z方向單位,其中黑色置換為最低點,灰色不置換,白色置換為最高點。若按米為單位換算,則黑色像素所在位置為-256米,白色像素所在位置為256米,灰色像素所在位置不進行高度置換,如圖5所示。如果不改變虛幻4引擎的Z值,則引擎只能置換512米的高度落差。根據團隊測量,長白山北景區內部最低點與最高點落差為1 500米左右,因此需要在虛幻4引擎中修改Z值,由默認的100改為293,才能與實際測量高度匹配,確保置換地形海拔高度正確。

圖5 灰度圖在虛幻4引擎中的地形高度值置換
對于長白山北麓地形,一次性加載全部地形數據關卡會占用大量系統資源,對于普通用戶來說無法達成流暢體驗。為此,本文使用三維游戲的制作方法,將大塊地形劃分為關卡(Level)分別讀取。關卡在虛幻4中是一個十分寬泛的功能。用戶可以把任意物體存放在其中,以備隨時調用。本項目將關卡類別分為:植被、建筑、DrawCall、流體、地形。
為了緩解制作和讀取壓力,將地形拆分,使用流送方式建立關卡并分段讀取信息的技術稱之為World Composition。它旨在簡化大型世界場景的管理。其目的之一是避免使用單一獨立關卡存儲流送信息,再就是它可以避免在超大地形上處理所有地形數據造成的效率低問題。持久關卡不存儲任何流送信息,而是掃描文件夾并將找到的所有關卡視為流送關卡。每個流送關卡的信息存儲在包頭中,不用把關卡加載到內存中,World Composition就能讀取這些信息。默認情況下,除持續關卡之外的所有關卡都會在World Composition中卸載其中地形按照1:1還原,北麓共占地面積127×127平方公里,劃分為36(6×6)個獨立關卡,每個關卡為4 033×4 033個像素點,如圖6所示。

圖6 基于高度圖的長白山北麓地形關卡劃分
經過計算與壓力測試,項目的每個獨立地形關卡頂點為4 033×4 033,每段有63個多邊形,每個組件中分為2×2個段數,每個組件的大小是126×126,共分為32×32個組件。這樣就可以把北麓的占地面積小的綠淵潭場景和小天池場景放在一個獨立地形關卡中,便于后期整體隱藏。
按照地形與像素面積1∶1計算,每個關卡為4.3×4.3公里。關卡的占地面積可以容納小型場景,如小天池,綠淵潭。而對于長白山天池等大型場景則需要一次性加載所有關卡資源,并同時卸載最北側的3個場景:地下森林、綠淵潭和小天池,它們由于距離過遠,而且為了節省資源,此時無需顯示。
要得到長白山區相對更加精確的地形,則可以選擇無人機飛行采集數據,之后再精確建模。虛幻4引擎可以做到復制現實中的一草一木,并使用PBR渲染出圖,理論上說用戶在虛擬世界的體驗已經與現實世界無異。但礙于當下的VR外部設備和顯示技術,即使按照現實中復原場景,也無法實現流暢的實時預覽效果。隨著8K技術的普及,VR外圍設備還有一段路要走,穩定幀數、高分辨率和傳輸速率都有待提升[10]。
地形構建只是構建場景中的第一步,并非場景全部,如要達到基本真實的用戶體驗,還要配合靜態網格和后期效果處理與優化才能得到較好的效果。