植被地形場景的過程式生成與繪製 -論文閱讀筆記

植被地形場景的過程式生成與繪製 - 楊江申

關鍵詞:過程式生成,分形地形,草地繪製,樹木繪製

相關技術:

  • 白噪聲:在所有頻率等概率分佈,應用場景一般是信號處理中的背景噪聲,模式過於單一,較少用於圖形學

  • 網格噪聲:將空間按一定的步長劃分爲網格,在每個網格點分配一個僞隨機的梯度或者值,這取決於採用的是梯度噪聲還是值噪聲,然後空間中的每個位置都可以根據鄰近的網格點插值得到。

  • Perlin噪聲是一種基礎噪聲,廣泛地適用於地形構造,海洋波形的模擬,Worley噪聲比較適合孔洞結構如海綿,火山岩等模擬。

  • 分形噪聲:是由不同倍頻(octave)的基礎噪聲疊加而成的。一種倍頻,對應於特定的頻率和振幅。頻率越高,則產生的噪聲越細密;振幅越大,則噪聲值的方差越大。分形噪聲比基礎噪聲擁有更加自然的效果,因爲自然界中的很多事物都具有分形特徵。

  • 王氏拼圖:被廣泛地應用於紋理合成,高度場構造,以及其他大型的二維非重複數據的構造。其基本原理是,預先生成一批數據塊作爲拼圖集合,每個拼圖都是一個方塊,方塊的邊按照一定的方式進行染色。在拼接時,每個拼圖間的相鄰邊必須顏色相同。用這種方式,可以將拼圖非週期性地鋪滿無窮平面。

  • 傳統的地形繪製:
    主要問題:
    (1)層次化細節模型(LoD-Levels of Detail)
    地形按照層次劃分,根據物體模型的節點在顯示環境中所處的位置和重要度,決定物體渲染的資源分配,降低非重要物體的面數和細節度,從而獲得高效率的渲染運算。受制於繪製速度、精度、數據量、面片數,且三角形之間不能有縫隙。
    (2)爲LoD模型建立對應的數據調度機制,數據規模不能全部存在內存

2.兩種類型:非規則三角化網絡(TIN)、規則方塊網格(RSG)。TIN可以用更少的三角形描述更復雜的形態,並且可以輕易地生成狹長的三角面片。RSG原始的地形數據是均勻採樣的高度場,建立四叉樹或二叉樹,繪製時遍歷。結構簡單,適用於快速實時繪製。

3.漸進式網格:通過焊接頂點消除細長面、邊坍縮等方法進行網格消減,而網格外觀和主要頂點儘量不變。
草和樹木的繪製:
基於拋物線、三次Hermite曲線或剛體片段或者圖像佈告板技術模擬草葉。用佈告板技術模擬樹木。


過程式地形:

現實世界中地形的波動有自相似的分形特徵。對於飛行模擬系統等對準確度的要求低於對畫面精細度的要求,因此可以使用分形壓縮算法將地形壓縮成體積更小,更緊緻的數據集。用分形噪聲合成地形或添加細節。
1.預處理:將地形高程四叉樹數據處理成增量四叉樹,增量四叉樹中的數據塊是原始四叉樹中的父親塊和兒子塊之間的高程差。
2.實時繪製:取出父親塊的高程數據,上採樣到完整塊大小,再加上當前塊的增量數據,得到原始數據中的高度圖。在爲四叉樹中的每個節點添加噪聲時,兒子節點的採樣步長是父親的1/2,而振幅也按某種規則遞減,在逐級疊加的過程中就形成了分形地形。
如果當前塊的增量數據不存在,只對父親塊進行上採樣,得到的結果會由於高階插值而變得十分平滑,用滿足以下性質的噪聲來代替缺失的增量數據:必須是相對於空間位置固定的僞隨機噪聲,有連續性。perlin噪聲基於採樣點的梯度生成,可以很好的滿足這兩個性質。
3.介紹一種快速的噪聲生成方法:

預計算六個基本單元塊,作爲靜態資源存儲起來。線性同餘生成器(LCG)是一種簡單的僞隨機噪聲生成器,預先設定一個大整數作爲種子,每次計算後,種子值都會發生改變,作爲下一次計算的輸入。在生成噪聲單元時,假設數據塊的大小爲D,冗餘邊界寬度爲b,我們需要把噪聲邊界寬度設爲B = 2b 􀀀-1才能獲取較好的拼接結果。噪聲單元由於邊界的存在被劃分爲3種區域,即角點區域,邊界區域,中心區域,針對這個三種區域,我們需要進行不同的處理。

每個地形塊根據拼圖規則對自己的4條邊進行標記,然後根據標記的結果,從基本單元塊中選出對應的模式,並設置旋轉角度。可以判斷,這個規則一定是相對於地形塊空間是固定的,也就是同一個位置得到的標記值是相同的。這個限制有兩個意義:
• 對於一個地形塊自身,每次標記結果一致,可以理解成時間上的或是幀與幀間的一致性;
• 兩個地形塊之間的鄰邊要共享相同的標記,這是空間上的一致性
選取每條邊的中點位置作爲輸入,用perlin噪聲對4條邊進行標記。

並行結構優化:

將CPU任務轉爲GPU實現,用顯卡的並行性提高運行效率。將內存數據轉化爲紋理,傳入繪製管線,同時,作爲輸出的紋理,需要綁定到幀緩存對象上用來進行離線繪製。

實時紋理混合:

遊戲中的一般做法是,用一張全局的紋理作爲來體現場景的低頻特徵,在中遠距離進行顯示;同時在極近的相機距離下,使用按照一定規則進行混合的高精度紋理來體現高頻細節。爲了適應相機在不同視距下的需求,低頻和高頻紋理會按照視距進行淡入淡出。

1.遠景紋理:表示的是地形場景的基礎顏色信息。一張分辨率極高、覆蓋全區域的紋理,初始化時直接載入顯存或切分成塊動態載入。

2.細節紋理:用幾張高精度的材質紋理混合映射,用重複貼圖的方式覆蓋整塊地形。
(1)細節紋理蒙版:細節紋理混合是通過一張和遠景紋理對應的細節紋理蒙板(splat map或alpha map)來實現的。將某種材質的分佈信息存儲在一張灰度圖中,爲了節省存儲空間,一般用一張4通道的圖像來存儲4種不同的材質分佈,4個通道的值的和爲1。
缺點是不能靈活、實時反映地形幾何信息,如果對地形進行高程的實時改動紋理不能產生相應變化。佔用本地空間大。

3.動態細節紋理生成
(1)過程式參數生成
選擇海拔、法向、坡度、曲率等過程式參數,全部可以在着色器中實現。

(2)材質權重函數
對於當前地形頂點生成的每種參數,各個材質有一個權重函數來描述其在參數區間內的分佈。

對於一些特殊的材質紋理,需要建立符合其特性的計算函數,按照一定的優先級順序依次考查它的每種地形參數,才能得到更
爲自然的貼圖效果。如岩石和積雪紋理。

(3)擾動優化
a.目前的缺陷:對於地形幾何變化較小的地區,產生的分佈較爲單調和規律;
由於是逐頂點計算,紋理蒙版的精度受到地形網格精度的限制,所以在近距離視角下,會明顯看到由於插值產生的模糊;
b.擾動紋理可以是任意的高精度細節紋理,也可以是一張離線渲染好的Perlin噪聲圖。

(4)紋理週期性消除
a.不同粒度混合採樣:同一種紋理按照不同的粒度進行採樣,然後混合,能夠在一定的視距下顯著地減少紋理的週期性。
但是這種做法會對紋理產生一些破壞性,尤其在非常近的視角下,細節紋理的高頻細節會受到粗粒度紋理的干擾。折中的做法是, 相機離近時,逐漸減少粗粒度紋理的混合比例,來減少這種破壞性的效果。
b.過濾低頻特徵:人眼對於圖片重複性的感知主要來自於圖片的低頻特徵。所以,可以通過對原圖片進行一定程度的高通濾波,來減少圖片中的低頻內容。可以離線處理好這些不同濾波級別的紋理,組織成紋理數組的形式傳入着色器,然後根據相機距離進行不同紋理間的切換。在中遠距離顯示濾除低頻的紋理可以明顯地減少重複性。但缺少特徵可能會使場景顯得單一,可以用噪聲對紋理的亮度進行擾動,也可通過後續生成的植被對地表紋理進行覆蓋,來減少場景單調性。


實時草木繪製:
  • 草葉的彎折:假設每個草葉剛體之間是由彈簧連接,每個相接處的彈簧形變產生的力矩會和其支撐的剛體重力所產生的力矩相平衡形成穩態。穩態方程難以實時在着色器中求解,所以對方程進行離線求解,將相應的結果存儲到紋理中。
  • 法向計算:一種取巧的方式是開始就給定法向的初始方向,在每次頂點發生影響法向的變換時,對法向做同樣的變換,最後得到最終的法向。每個剛體片段需要區分正反兩面來繪製。
    光照:基於phong模型。漫反射作用假設入射光作用在草葉的正面,而透射則假設光從反面入射。漫反射分量和透射分量每次計算只能取其中一個,根據法向來判斷光入射的方向。爲了模擬草葉的環境光遮擋效果,將環境光係數按照草葉距離地面的遠近,進行線性的衰減,在距離地面極近時,值接近0。
  • 動態效果:
    1.草葉的動態由兩個方面實現:由於草葉自身的穩態被破壞而產生的彈性震盪, 由於風場產生的偏轉。
    2.實例繪製:使用一個物體的實例,通過位置的偏移和尺度變換來模擬相似、物體數量龐大的場景。好處是繪製資源只用準備一次,節省存儲空間和cpu繪製時間。
    3.草地窗口的擴展:隨着相機的移動,草地窗口會跟着移動,一部分草地實例會被移出窗口,而另一部分新的實例會進入窗口。因爲窗口和數據方塊大小相同,所以移出和移進的草葉數據對應的是相同的部分。

4.附加紋理的離線繪製:

(1)草地繪製需要的地形信息包括:
地形的高度(使草地與地面貼合)
草地蒙版(來判斷當前位置是否需要長草)
地形顏色(影響草地顏色)

(2)在每幀繪製草地前,需要進行一次額外的離線的繪製。用一個懸掛在當前窗口正上方的相機,進行正交投影繪製,將相關的地形信息,比如高度圖、蒙版、顏色,寫入到幀緩衝對象對應的附加紋理上。在之後實際的草地繪製時,再綁入這些地形信息紋理,根據頂點相對窗口的偏移對這些紋理進行採樣。
屏幕空間技術:在片元着色器中,根據蒙版以及顏色信息進行自上向下的像素轉移。位於蒙版內的每個像素,會根據當前的位置信息計算一個向上的偏移量yy,當前像素的顏色值被賦爲這個偏移後的位置的顏色。對於蒙版上邊緣位置的像素,將蒙版外的像素轉移到當前位置,從而在邊緣出產生鋸齒效果,類似於草葉的效果。通過對偏移量yy添加關於時間的分量,可以產生出類似於風動的效果。


大規模樹木生成:
  • 簡易模型:樹冠的枝葉部分用幾種枝葉紋理進行穿插組合而成(billboard cloud)通過這種方式,一棵樹可以用幾十到幾百個頂點的規模進行比較好的表達。
  • LoD過渡:中遠距離時切換爲公告板繪製,使用兩次繪製流程,一次繪製模型,一次繪製公告板,通過混合模型和公告板的alpha值來進行過渡,消除跳變。無論是繪製模型實例,還是繪製公告板,都是需要將待繪製的位置頂點打包在頂點緩存中,如果在CPU端需要對當前位置歸屬於模型還是公告板進行劃分,則在每一幀,需要重新對顯存中對應的頂點緩存進行數據傳輸,會極大地降低效率。反之,如果選擇在着色器中進行繪製判斷,則兩次繪製流程面對都是相同的位置數據,顯存中對應的緩存對象可以以靜態的形式存在,可以極大的提高效率。
  • 散點透明:
    (1)alpha混合存在的問題:
    a.幾何緩衝區只能記錄深度最近的像素信息,所以無法實現透明混合的功能。
    b.需要對繪製對象按深度排序,否則可能出現錯誤的混合現象。
  • 基於地形四叉樹的繪製:處理大數據的基本思想是分塊。沒有必要對所有地形塊上的樹種信息都進行預先生成和存儲,而可以
    生成一片足夠大的樹種模式資源,每個地形塊的樹種資源都對應於這個模式的一個部分;然後按照地形塊本身的一些蒙版信息(可以預先存儲,也可以根據地形紋理和高程信息過程式生成),來對這些樹的位置信息進行篩選。
  • 樹種模式生成:加入半徑、競爭等級、壽命等參數模擬樹的分佈,考慮碰撞檢測,先隨機半徑大的樹木的位置,然後按規定的次數進行迭代
    ,根據坡度、法向、海拔等信息篩選樹種。
    半自動的樹木編輯:基於地理信息標籤對樹木生態分類,定義一組模式。生成時只需輸入少量參數。
    利用外部信息的樹木生成:根據路網等地理信息提取樹木分佈信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章