三維渲染之地形渲染

2021-09-26 02:25:31 字數 3381 閱讀 7916

地形渲染是三維場景的重點,地形渲染的質量和效率直接影響整個場景渲染的質量和效率。一般來說,為了渲染出更加真實的地形,則地形的單個網格要盡量小,這樣才能保證地形各個部分更加的精細。但如果網格變小,則對系統的開銷也就大了,從而會影響渲染的效率。因此地形演算法的設計實際上就是圍繞著渲染質量和渲染效率這兩方面的取捨,針對不同的硬體平台和設計目的,以求達到最合適的選取。

地形渲染演算法

目前,有兩種主要的地形渲染演算法:

1)直接渲染

直接渲染指不對網格進行任何的處理,直接進行渲染。這種方式只適用於小規模地形,使用起來對渲染效率影星基本不大。但是如果用於大規模地形,渲染效率相當不理想。直接渲染還有個弊端,經由計算機渲染出來的東西,無論距離視點遠近如何,看上去都很犀利,都很精細,這顯然跟現實情況不同,現實中近的物體清晰,遠的物體模糊,直接渲染無法實現這種效果。

2)基於lod的渲染

lod演算法是常用的一種演算法,針對與視點間距離的不同,提供不同精細程度的模型與之對應。如今主流遊戲都採用演算法來處理地形。但演算法的缺點是每當攝像機的位置更新後都要重繪一次網格,這樣消耗很高。

地形渲染流程

地形生成首先將地圖和紋理載入到記憶體中,然後依次根據亮度混合公式生成亮度混合紋理,節點評價公式計算各節點精度,最後通過平截頭體只渲染視點範圍內地形。地形生成完後,優先設定攝像機,以實現漫遊效果。接著依次渲染霧,太陽,天空,河流,樹木。之所以將天空放在較後的地方這染是因為根據統計,使用者在虛擬世界中漫遊的時候,對天空細節的關注度並不高,即使花較大精力優化天空渲染,實際對使用者體驗的提公升並不明顯。

地形生成演算法

地形渲染的核心部分是heightmaps的生成與渲染。heightmaps裡的高度值描述的是每個畫素的灰度值。暗色描述表示低海拔,亮色表示高海拔。

主要的地形生成演算法有fault formation和midpoint displacement兩種。fault formation演算法的優點是不會被地點尺寸所限制,而mdipoint displacement演算法要求地形尺寸是2的n次方(尺寸也必須是相等的,所以可以產生1024*1024的高度圖,但不能產生乙個512*1024的高度圖)

1)fault formation演算法

如圖,假設地形的尺寸是m*n,在上面隨機取一條線,給直線一端的所有點乙個高度h,當然可以取任意條直線,每次高度疊加,然後再用平滑濾波演算法把整個高度圖進行平滑處理,重複這個過程,這樣乙個地形高度圖就生成了。

2)midpoint displacement演算法

midpoint displacement演算法和fault formation演算法表現為不同的地形型別。fault formation演算法生成的是小山,而midpoint displacement演算法則其中在連綿的山。而且midpoint displacement演算法有個優點,由於演算法本身的特性,它可以保證地形邊界的上下左右四個方向都是連續的,也就是說如果把生成的地形進行拼接,形成無限地形,mdipoint displacement演算法是可以實現。

midpoint displacement演算法有個缺點是必須要求地形是的次方的。

上圖中任意乙個頂點都是用該頂點周圍的個點取平均值之後再加上乙個隨機高度所求得的。例如求g,因為左面沒有頂點,演算法要求,超出邊界就要取模運算,所以g求得用aece四個點。第一次迭代為,根據邊界a,b,c,d的四個點求中點然後再求邊界和。第一次迭代結束,然後分別對afeg,fdhe,ehdi,geic,重複這個過程。

求g和f是為了下一迭代,也就是求afeg的中點做準備。但是不求h和i,是因為h和g是相等的,f和i是相等的。前面說過,該演算法有個限制是必須是2的n次方,演算法要求,超出邊界就要取模運算,原因就在這裡。

如果上圖是第一次迭代,也就是rectsize=size,b其實是和a相等的,d和a,c和a也相等,也就保證了為什麼這個地形的邊界是可以連線的,也就是上面和下面,左面和右面是可以不經過任何處理就可以拼接,也就是說坐

標點有可能超出size的,就要用模運算。

lod渲染地形

概念

細節層次模型針對乙個場景或者場景中的物體,提供具有不同細節層次的模型,在渲染中視不同情況使用。它的目的是通過

保留重要視覺特徵來生成簡化的模型,以此降低場景複雜度,實現場景實時繪

制。生成方法

細節層次模型生成的基本方式通常是,首先從乙個具有全部細節的模型幵始,然後通過對模型的一系列簡化逐個生成相應低細

節層次的模型。目前,用於生產簡化的模型的方法主要包括種:細分法、取樣法、刪減法。

1)細分法是首先是用乙個及其簡易的基本模型來表示初始模型,接著通過一定的規則對基本模型進行迭代運算,模型每迭代一次,模型的區域性區域都會增加一部分的細節,最後,直到產生滿足使用者所需誤差要求的細節層次模型。

2)取樣法基本步驟是:首先在初始模型表面隨機選取一部分點,連線這些點來構建多邊形來生成取樣後模型。取樣後模型要滿足使用者定義的誤差要求。取樣點的數目使用者可以自己設定,但生成的多邊形形狀不在控制範圍之內。該方法多用於表面光滑的模型。

3)刪減法

通過刪減、合併幾何模型的基本單元來實現模型簡化。幾何模型基本單元一般有點、邊、面三種。刪減法一般分為三種型別:

頂點刪除:刪除網格中頂點,之後對刪除該頂點後所形成的空洞再進行三角剖分。

邊壓縮: 壓縮網格上的一條邊,將其變為乙個頂點。同時,與該被壓縮邊相鄰的兩個三角形變為兩條邊,即這兩個三角形的面積變為零。

麵片收縮:將網格上的乙個三角形作為考量樣本,將其收縮為乙個頂點。同時,與該被收縮三角形相鄰的三個三角形將重新進行繪製。

本文參考文獻《三維場景的渲染技術研究與實現》

python渲染 Python三維軟體渲染

我決定嘗試在python中使用pygame進行乙個實驗,這樣我就可以通過pixelarray繪製到螢幕上。我決定按照this article來鑽研3d的數學 總之,我已經實現了每乙個功能。我建立了矩陣和向量的數 算,並有一些問題,但經過廣泛 廣泛的 測試,這些運算現在完全可以工作了 點 十字 法線 ...

三維場景的渲染優化

對於任何乙個3d應用程式來說,追求場景畫面真實感是乙個無止盡的目標,其結果就是讓我們的場景越來越複雜,模型更加精細,這必然給圖形硬體帶來極大的負荷以致於無法達到實時繪製幀率。因此,渲染優化是必不可少的。在渲染優化之前,我們需要對應用程式效能進行系統的評測,找出瓶頸,對症下藥。對於3d應用程式來說,影...

三維場景的渲染優化(一)

三維場景的渲染優化 一 如何進行有效的效能評測 對於任何乙個3d應用程式來說,追求場景畫面真實感是乙個無止盡的目標,其結果就是讓我們的場景越來越複雜,模型更加精細,這必然給圖形硬體帶來極大的負荷以致於無法達到實時繪製幀率。因此,渲染優化是必不可少的。在渲染優化之前,我們需要對應用程式效能進行系統的評...