KlayGE 4.4中渲染的改進(三):高質量無限地形

轉載請註明出處爲KlayGE遊戲引擎,本文的永久連接爲http://www.klayge.org/?p=2761
 

本系列的上一篇講了DR中的一些改進。本篇開始將描述這個版本加入的新功能,高質量地形。html

原有的地形

之前的地形實現和水面的方法同樣,都是從Crytek在2008年的老方法改進而來。雖然比projected grid的好得多,而且速度很快,但有一些很明顯的缺點:app

  1. 視點移動的時候會抖動。水面比較平,並且有波浪看不出抖動。若是用來作靜態地形抖動就會很是明顯。尤爲是far plane變大以後,遠處更明顯,因此限制在3000如下。
  2. 不支持shadow。由於只有產生了視野內的三角形,視野外的地形沒法正確投出shadow。
  3. 頂點密度較低,沒法表達精細的地形。原先的方法三角型分佈接近於screen space,不足以很好表達地形。

Ocean TerrainIn in KlayGE 4.3

這個抖動的消除能夠靠snapping操做,每次更新height map的時候都保證原來的像素中心仍然落在新的像素中心上。這樣每一個頂點在視點移動後仍然會去到一樣的值。框架

Clipmap

Clipmap也不是什麼新東西了,最先出現於1998年。當時仍是用CPU作幾何生成和提交。2004年MSR的一篇Geometry Clipmaps: Terrain Rendering Using Nested Regular Grids把clipmap帶到了GPU時代,GPU Gems 2的第二章就是這篇paper的縮寫版本。經過在GPU上維護一個以視點爲中心逐級遞減的一系列幾何塊,依靠GPU的強大處理能力,過分細分的地形也能實時渲染。用這種方法,遠處的三角形密度仍然較大,因此能夠很容易的把far plane推到5000-8000。spa

可是,即使是2004年的方法,也已通過去了將近10年。當時的SM3能VTF,卻不能改變幾何拓撲。在實際使用中,這個方法的開銷仍是比較大的。並且因爲不一樣層次之間的三角形密度必定是2倍的關係,不免仍是會有看得見的層次跳變。orm

Tessellation

(這裏的實現是從NVIDIA Direct3D SDK 11的一個例子改進而來)htm

DX11的GPU都支持tessellation,並且效率不低。這裏對clipmap很天然的改進就是加入硬件tessellation支持,把細分的任務轉到GPU裏作。這樣CPU端直須要提交比較稀疏的幾何,在GPU裏經過視點距離等因素計算tessellation level就能夠了。並且,DX11要求GPU支持基於浮點的細分。三角形不但能夠分整數次,還能夠分任意的浮點數次。這麼一來,就能讓細分層次連續變化,層次跳變問題就完全解決了。blog

若是檢測到GPU不支持tessellation,就會退回到原先的clipmap方法。這時候須要處理不一樣層次之間的接縫問題。由於在鏈接處頂點密度不一樣,若是不處理的話,就會出現許多小的空洞。這個問題由團隊成員孫文全解決了,方法是調整較密層次的頂點,在shader裏面手工插值,獲得和較稀疏層次一樣的height。這麼作雖然沒有在拓撲上達到無縫鏈接,但GPU的精度足以保證空洞基本都會小於一個pixel的大小。因此視覺上看不到空洞了。遊戲

Procedural

在Texturing and Modeling: A Procedural Approach這一巨做中,有詳細介紹如何用分型的方式生成地形。這個方法也能夠順利地移植到GPU,在生成height map的時候使用。若是參數合適,生成的結果很像天然的風景,有崇山峻嶺也有平原低地。height map以視點爲中心,加上snapping的修正,獲得視點周圍必定面積的全部高度場。這個height map能夠進一步用來計算gradient map,在渲染的時候做爲normal使用。以視點爲中心,全部方向都有幾何也保證了能夠輕鬆地使用原有的shadow map系統,包括CSM在內。ip

加上細節

有了tessellation以後,height map裏的信息只負責大致形狀。頂點密度遠大於height map的狀況下,加上個noise就有意義了。normal上也能夠用一樣的方法加上像素級別的細節。有了這些以後,tessellation的能力就能所有顯現出來了。而且能夠根據GPU能力連續地調節細分的程度和細節的多少。get

New Terrain

在不支持tessellation的平臺上,這個細節就只能加到normal上。視覺效果也不差。

綜合一下,加入水體、light shaft、SSR等效果以後,能夠發現新的地形系統能夠很容易兼容於原有deferred框架的其餘組件。

New Ocean Terrain

本篇專一於新實現的高質量地形。下一篇仍會將一個新的渲染效果,屏幕空間次表面散射。

相關文章
相關標籤/搜索