GPU Pro2 - 3.Procedural Content Generation on the GPU
GPU Pro2 ?- 3.Procedural Content Generation on the GPU
?
這篇文章著重介紹了基于Brownian 噪聲和高度圖在GPU中實時生成和渲染無限大地形系統(tǒng)。
Procedural content generation (PCG)程序化生成在許多游戲中已經(jīng)有廣泛應用,從簡單的隨機物體擺放,到全自動生成武器,建筑或者AI等等。PCG在計算機圖形學中最基本的應用之一就是基于高度圖的地形生成。
現(xiàn)如今已經(jīng)有許多不同的實時地形生成技術,大多數(shù)是利用過程化生成噪音去創(chuàng)建高度圖。目前最新引人的技術是模擬1/f 噪音(called “pink noise”),因為這種噪音在自然中普遍存在,而且便于在現(xiàn)代gpu中實現(xiàn),并且有很好的表現(xiàn)和速度。在這篇文章里,我們決定使用近似的不規(guī)則Brownian motion(fBM)(布朗運動)算法。
該方案使用了光譜混合(spectral synthesis,我也不知道咋翻譯),計算了多層級噪音,最基礎的噪音生成算法是Perlin噪音。盡管柏林噪音的實現(xiàn)已經(jīng)完全依賴于GPU,但是由于其他的過程化生成算法,該算法依然不夠快,因此我們采用了一個可以根據(jù)自身需要而進行配置的系統(tǒng)。
將地形分成多個正方形node(node的數(shù)量必須是高度圖大小的出書,以避免生成后出現(xiàn)錯誤),將攝像機初始置于最中間,每個臨近最中心node的四個node(上下左右)擁有邊界碰撞體,當攝像機和其中任意一個發(fā)生碰撞時,新的高度圖就會生成。基于攝像機的碰撞方向和碰撞體的位置,我們可以得到新的噪音UV坐標。這個操作和高度圖生成算法保證了地形將是連續(xù)且無盡的。
比如下圖:原先在中心,向左移動后于左側(cè)node發(fā)生碰撞,根據(jù)碰撞位置,重新計算出與左側(cè)node相鄰的新的node信息。
該算法也利用了LOD系統(tǒng),因為我們知道所有node的相對位置,所以可以提前計算出index buffer中的相關信息。中間的node最接近攝像機,所以應該有最低的LOD等級,也就是更多的三角形面片數(shù)量展示更多細節(jié)。
另外我們還模擬了侵蝕效果,最簡單的侵蝕效果類型是thermal erosion,它是由于溫度變化導致的。這個侵蝕算法通過迭代,利用附近點的高度計算出地形點的高度,該算法的實現(xiàn)用了兩個pass,第一個pass計算出材質(zhì)中需要移動到附近點的頂點數(shù)量,第二個pass中通過第一個pass提供的信息計算出實際效果。
地形中的樹植被系統(tǒng)的實現(xiàn)分兩個步驟,第一步生成樹的密度圖,它定義了樹的布置信息。下一步,根據(jù)該信息實際渲染樹的mehs。地形中的高度和坡度信息對生成樹是最常用的參數(shù),這兩個信息可以由高度圖和法線圖輕松的得到。通過這兩個信息以及一些我們自定義的參數(shù),我們就可以生成地形中樹的密度圖。
有了密度圖之后,我們不能直接將他用于在地形中生成樹的植被,因為密度圖可能對應非常巨大的世界空間,如果直接每個texel生成一棵樹,那結果有可能植被會非常稀疏。因此,我們?yōu)槊總€類型的樹設置了半徑這個參數(shù),代表這顆樹會占多大地兒。我們的解決方法是將當前的patch根據(jù)這個patch中最大的那棵樹的半徑劃分成gird,通過從密度圖中取出的值以及占地空間兩者一起決定出如何渲染樹。通過攝像機的裁剪和LOD等技術,再加入Rayleigh-Mie atmospheric scattering我們就完成了地形系統(tǒng)的渲染。
概況下整個流程:
碰撞觸發(fā)需要生成新一部分地形 --? 生成噪音 --?計算erosion,生成高度圖 -- 生成法線貼圖 -- 生成樹的密度圖--生成樹的真正位置信息--渲染場景
?
?
總結
以上是生活随笔為你收集整理的GPU Pro2 - 3.Procedural Content Generation on the GPU的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPU Pro2 - 1.Terrai
- 下一篇: GPU Gems1 - 1 用物理模型进