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