基於LOD的大規模真實感室外場景實時渲染技術的初步研究 PART I

NO IMAGE

由於無法上傳圖片 完整文章請見
www.gameres.com/Articles/Visual/3D/largeLOD.pdf
gamehunter.3322.net/xpertsoft

第一章:大規模室外場景渲染技術簡介

       第一節:室內Vs.室外

       第二節:Voxel Vs.LOD

       第三節:動態地形Vs.靜態地形

                     第四節:其他
 

第一部分   簡 介

引     言

室外場景的實時渲染技術是遊戲程式設計世界中的熱點技術. 同時它在其它領域也有著同樣重要的作用。如 GIS 系統,飛行模擬系統,VR系統以及數字地球技術等都離不開室外場景的實時渲染技術。一個優秀的室外場景實時渲染技術在保證實時性以外還能創造出非常逼真的、有說服力的虛擬自然環境。如Nova Logic公司的著名的3D射擊遊戲Delta Force 系列,它除了能模擬出各種如雪地、草地、沙漠等地形以外,還能模擬出各種樹木,雜草,以及各種天氣效果。

室外場景的實時渲染有許多技術上的難點,在以下的章節裡我們將作詳細的介紹以及針對一些主要問題的解決方案。

本文的主要內容分兩個部分:一、大規模地形的渲染。二、如何提高場景的真實性。分別第二部分和第三部分。

3D場景的渲染離不開3D API。目前流行的3D API有兩種,SGI公司的OpenGL和微軟公司的Direct3D。兩種API各自有自己的優點,均能很好的使用硬體加速功能。但是OpenGL是一種開放性的標準,有更好的移植效能,它能在Linux 和FreeBSD 下工作。甚至還可以使用硬體加速(nVidia公司專門為Linux /FreeBSD推出了驅動程式)。因此在本文裡,我使用了OpenGL。不過如果熟悉原理,其實也大同小異,D3D到8.0以後做的非常的像OpenGL.

 

第一章:大規模室外場景渲染技術簡介

一.室外 Vs. 室內

下面我們把室內場景和室外場景做一個對比,來看看室外場景的實時渲染的主要難點。

目前最成功的商業室內遊戲引擎有Quake /DOOM系列、Unreal系列引擎。他們都基於BSP技術的。通過BSP技術,再加上PVS , Portal等技術可以大量減少場景的複雜程度,通過Portal技術甚至可以把一個室內場景和一個室外場景連線起來,關於室內引擎的渲染的進一步已經超出了本文的範圍。

我們知道,當我們站在一個房間裡的時候,我們能欣賞到的景物不過是這個房間的擺設以及透過這個房間的門和窗能看到的景物而已。你只能在牆壁的約束範圍內走動。換句話說,我們處在一個有限的空間內。我們有足夠的理由阻止人們穿過牆進入牆外的世界,也有足夠的理由把視野約束在高牆以內。

 

圖(1-1)

一個典型的室內場景,使用id Software的Quake III地圖檔案,用www.GameToturials.net 的程式渲染

 

但是,這些約束在一個室外的場景中都是不可能的。在一個飛行模擬器中,理論上你可以駕駛飛機朝任何一個無限遠的飛去。因為事實也是如此,如果你願意的話,你可以駕駛飛機繞著地球飛行而不用擔心有牆來阻止你的前進。換句話說,一個室外場景的理想大小是無限的大!除了場景的大小以外,同時視野也是無限的。如果你站在高處,你可以俯視任何比你的底的地方,也就是說你有幾乎無限的視野。

 

圖(1-2)

典型室外場景,圖片來自北航王正盛的Demo :Nature Wing2.0截圖

 

我們知道,無限的大的場景需要無限的場景資料。但是這是不可能的,我們只能希望場景越大越好,室外場景的主要部分是地形的渲染,地形資料的多少決定了場景的大小。所以如何儲存這些地形資料成了首要的問題。(但是在現在儲存器成本迅速下降的今天,這個問題已經變的不是十分的突出。)其次是無限的視野問題,無限的視野就表示渲染無限的圖元(圖元即是3DAPI支援的簡單的幾何圖形,詳見OpenGL/Direct3D SDK),這也是不可能。圖元的數量是以場景大小的平方的速度增長的。光考慮地形資料,一個2048X2048的地形,如果不考慮減低細節程度和裁剪的話,它將要渲染8M的三角形,這樣的三角形量在PC級別上目前還是遠不能實現互動式幀率的。所以,如何減少要渲染地形時候的圖元數目成了室外場景實時渲染的關鍵問題。

其他的情況還有如野外的地表衍生物:樹木、雜草、地貌等。同時天氣效果,如下雨、下雪,颳風和閃電等.這些東西在一個室內的環境下基本上是不需要考慮的。而且模擬這些效果都需要很高的代價,有些甚至根本就沒有辦法模擬。

 

二.Voxel Vs LOD  

綜上,我們知道,室外場景實時性渲染的關鍵地形的渲染。我們需要一種技術來降低地形渲染的開銷。

目前的地形渲染技術主要有兩種Voxel和LOD,下面我來做個簡單的介紹。

Voxel 也就是Volumetric Pixel。也就是所謂的“體素”,它是相對於畫素來說的,如果說畫素是一個二維的矩形的話,那麼Voxel就是一個三維的立方體。它的原理是比較簡單的。James Sharman自稱他在1995年時就想出了這種方法。前面的提到的Delta Force遊戲就是使用了Voxel 技術。關於Voxel的細節技術不是本文的重點,我不準備做深入的介紹。Voxel有一個天生的優點就是渲染的時候它和場景的大小沒有關係,而且絕對不會渲染多餘的東西(自帶裁剪功能)。它的複雜度只和我們需要的視野,以及解析度有關。而且可以在不使用硬體加速的情況下達到比較理想的速度(Delta Force I就沒有使用硬體加速),生成的圖象也比較的細膩。它的缺點就是不夠的靈活。

LOD 也就是層次細節(Level of Detail)的簡稱,不同於Voxel技術,它是一種使用多邊形的,真正的 3D渲染技術。它根據一定的規則來簡化物體的細節,我們可以根據需要來選擇不同細節程度的物體表達方式。如離觀察者近的選擇較高的細節程度、反之選擇較底的細節程度。用在地形渲染中,有時我們也稱它為多解析度地形(Muti-resolution terrain)渲染技術。

 

圖(1-3)

基於Voxel的渲染場景,圖片來自中國遊戲開發者網路,陳鵬《自己動手編Voxel 3D引擎》

 

 

圖(1-4)

基於LOD的渲染結果,圖片來自本文的Demo: Sim-Nature.

 

LOD演算法處理起來比較複雜,但是它讓我們可以足夠自由的去控制我們的場景渲染,更加方便的使用顯示卡的硬體加速功能。而且可以很容易的在場景中組合其他的物體。如樹木,太陽以及粒子系統等,天空如它可以方便的讓觀察者以任意的角度去觀察場景,我們只要讓攝影機旋轉一定的角度就可以了。但是這在Voxel中是比較困難的,因為Voxel在處理非水平的視線的時候非常的麻煩。

LOD技術是本文將要使用和實現的地形渲染技術。

 

圖(1-5)

經過LOD處理的地形網格,有不同的細節。圖片來自本文的Demo: Sim-Nature.

三.動態地形Vs 靜態地形

地形的渲染通常分為動態和靜態的兩種。

靜態的地形的細節可以是均勻的,也可以是不均勻的。但是細節通常在事先就計算好了,不均勻細節的靜態地形有許多的優點:如平原的地貌可以使用較底的細節,而起伏頻繁的地方使用較高的細節等級。更為直觀的一個例子是賽車一類的對可以到達地方有一定限制的應用,我們可以在離賽道近的地方建立起比較高的細節等級,而在較遠的地方使用較少的細節。用這種方式也可以建立起不規則的地形。比如說,它可以沿著賽道的方向建立起一個地形模型,這樣可以節省大量的空間。

動態的地形是視點相關的。它是本文將要採用和實現的方法。隨著視點的移動,地形網格將被更新。相對於靜態地形來說這是一種更為先進的演算法。這種方式建立起來的場景更加符合人的視覺特性,即看到的細節是變化的。動態地形網格的建立和更新要耗費額外的時間,但是這種開銷是值得的。動態地形網格的建立是比較複雜的,它需要注意很多東西:如何決定細節,如何避免裂縫是兩個主要的問題。同時它還應該把不可見的地形部分切除,幾何形變(隨著細節改變,地形表面的呼吸現象)也應該被考慮到。這些問題都在以後的章節被詳細的討論到。

四:其他

       我們說過,在一個室外場景的渲染中。除地形以外其他的一些元素也是十分的重要的,這些元素可以提高場景的真實性。本文將實現其中的一部分元素,這包括:樹木、地面細節,太陽、天空已經運動模糊等效果。他們將在本文第三部分集中討論。