Focus On 3D Terrain Programming·Chapter 5(1)

寫在前面的話

原著:《Focus On 3D Terrain Programming》
章節:Chapter5 Geomipmapping for the CLOD Impaired
說明:圖形渣、英語渣,學習的同時記錄下來的(主要是不翻譯就讀不下去TT),希望能和大家相互交流學習,翻譯有誤的地方歡迎指出^^

正文開始↓

哦吼!你將要學習地形編程中的核心內容,裏面包含了相當複雜的算法。實際上,這是個謊話啦。本章我將講述3種簡單且高效的算法。並且,再一次,我會讓你省略漫長的介紹而簡要地告訴你本章內容:

■連續層次細節(CLOD)的含義
■Geomipmapping(Geometrical Mipmap)背後的理論
■實現Geomipmapping的方法

簡單起見,我將本章的內容分成了3個部分。儘管如此,內容仍相當地多。不過,千萬別被本章的篇幅嚇到,我會一如既往地用一種風趣而簡潔的方式來呈現。不過,要注意我將稍稍改變一下學習風格。第5、6、7章比之前的章節更注重算法和僞代碼。在後面的章節,我仍會爲你提供自己的示例及實現,但是這些實現是簡單的,你需要結合文章使用。照之前所說,讓我們開始吧。

CLOD Terrain 101

你已經多次在本書中聽到Continuous Level of Detail(CLOD)一詞,現在是時候告訴你它到底是什麼了。CLOD算法,用一句話來解釋,即一個動態多邊形網格“給”需要更多細節的區域額外的三角形。這只是一個簡單的陳述,學習本章之後,你將瞭解更多關於CLOD的內容。如果你還不理解CLOD,也別煩惱哈。

爲什麼要費心使用CLOD地形呢?

CLOD算法需要更多的研究,更難編寫程序且比暴力實現方法佔用更多的CPU週期。既然如此,爲什麼還要費心使用CLOD算法呢?答案很簡單:爲了創建更真實,更細緻,最重要的是,更快速的地形。

更多細節添加到更多需要細節的地方

CLOD的一個基本思想就是添加更多的細節(更多三角形)到需要的地方。例如,我們想要一個相對平滑的地形曲面(見圖5.1),比起一個相對複雜的地形曲面(見圖5.2),需要平均較少的三角形。

這裏寫圖片描述
圖5.1 需要較少的三角形渲染平滑地形

這裏寫圖片描述
圖5.2 需要較多的三角形渲染複雜地形

然而,不是所有算法都擔心需要細化的區域中三角形的分佈。Geomipmapping不會對需要細化的區域放置更多三角形,但是Rottger的四叉樹算法(第6章,“Climbing the Quadtree”)是這樣做的。因此,對CLOD而言,從整體來看,在需要細化的地方添加更多細節,並不總是這樣的,但大多數情況下是的。我已經完全把你搞混亂了嗎?

剔除之前從未剔除的

基於CLOD算法的另一個優點是比起暴力方法允許選擇性地對多邊形進行剔除(cull)。這意味着那些看不見的多邊形不用發送給API。例如,我們從一系列地形瓦片開始實現geomipmapping。如果某些瓦片不可見,我們一下子消除潛在的289個渲染頂點(17×17的頂點塊)。這極大地減輕了顯卡加載的負擔,並且剔除操作也沒有讓CPU繁忙。這個簡單的方法使得GPU、CPU甚至整個主板工作起來更加輕鬆。

CLOD地形並不是完美的

儘管使用CLOD地形算法確實存在一些缺點。說來奇怪的是,全世界都在幫我寫下這一節,今天我的郵箱收到了8月發行的Game Developer Magazine。大多數CLOD算法的主要缺點是在每幀多邊形網格更新時複雜的“薄記(book-keeping)”。

這種“簿記”的缺點幾乎不那麼普遍當這些算法(geomipmapping,Rottger的四叉樹算法以及ROAM)中的大部分被設計時。這是因爲這些算法想將大部分工作放在CPU運行,並且只將少量需要的信息傳給GPU。不過,從那時起,處理方式已將在發生改變。現在比起CPU,我們更關注GPU。

CLOD地形介紹總結

很顯然,如果geomipmapping、四叉樹以及ROAM等算法過時了的話,那麼現在你就沒有機會讀它們了,意思就是還有人對每個算法進行優化,讓它們成爲當今重要的地形渲染算法。考慮到這一點,我將不再嘮叨CLOD並開始講述geomipmapping的實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章