ZT 大規模草地的快速繪製排序

2021-04-22 10:37:51 字數 1172 閱讀 5765

在現在的3d遊戲室外場景中大片的茂密草叢為遊戲增色不少,是玩家遊戲體驗真實感的重要組成部分。眾所周知,對於象草這樣的半透明物體在繪製時需要按到攝 像機由遠至近的順序進行排序,否則會出現視覺錯誤。如果每一幀都對成千上萬的草進行排序,cpu開銷是極大的,甚至是不可接受的。解決這一問題的方法有三 個:

一是只對近處的草進行排序,但在草的密度很大的時候依然有很大的cpu開銷。

二是使用alpha test方式進行繪製,從而避免對排序的要求。但這種方法對貼圖質量要求極高,稍不注意就會在畫面上產生明顯的硬邊或者鑲邊現象;

三是通過一些技巧實現快速的繪製排序,既真實放映繪製順序,又把cpu開銷降低到可接受的程度。

下面就介紹我對第三種方案的一種實現方法。首先在我的地形編輯器中草的資料是按地形塊patch組織的,對草的排序就變成兩步實現,第一步對包含草的 patch排序,第二步對每個patch上的草排序,這樣最後只要按patch順序繪製每個patch上的草就達到了對所有草的排序結果。

這裡的關鍵技巧在於對patch上的草進行排序並不是每一幀都做,也不是嚴格按照到攝像機的距離來做,而是根據攝像機相對patch所在的位置選擇+x、 -x、+z、-z四個方向之一進行排序。只有當攝像機相對於乙個patch從乙個象限運動到另乙個象限時才需要對這個patch上的草進行排序。當攝像機 連續運動的時候,對於乙個特定的patch這種象限的變化很久才會發生一次,而且patch離攝像機越遠,這種變化越慢。並且攝像機對可視區域內所有 patch的象限變化並不是同時發生的,而是均勻分散在攝像機的運動過程中的,因此每一幀需要排序的patch是很少的,極大的降低了cpu開銷。下面是 參考圖和效果對比圖,對比圖分別是同一視角沒有排序和排序後的效果。

www.gamedev.net論 壇的時候意外發現了一種方法,可以避免對草地、樹林這樣通過alpha test方式繪製的物件進行排序又能達到接近排序效果的小技巧。這種方法需要兩個pass繪製,消耗一些額外的畫素填充率,但效果非常不錯。在你無法對大 量植被進行快速排序或者象交叉麵片這種無法排序的情況不妨考慮一下這種方法。現在你可以在排序、不排序的普通alpha test繪製和這種兩pass alpha test繪製之間做出明智選擇了。

使用hadoop進行大規模資料的全域性排序

hadoop 某人兒子的乙隻虛擬大象的名字 是乙個複雜到極致,又簡單到極致的東西。說它複雜,是因為乙個hadoop集群往往有幾十台甚至成百上千臺low cost的計算機組成,你執行的每乙個任務都要在這些計算機上做任務的分發,執行中間資料排序以及最後的彙總,期間還包含節點發現,任務的重試,故障節點替換...

使用hadoop進行大規模資料的全域性排序

hadoop 某人兒子的乙隻虛擬大象的名字 是乙個複雜到極致,又簡單到極致的東西。說它複雜,是因為乙個hadoop集群往往有幾十台甚至成百上千臺low cost的計算機組成,你執行的每乙個任務都要在這些計算機上做任務的分發,執行中間資料排序以及最後的彙總,期間還包含節點發現,任務的重試,故障節點替換...

使用hadoop進行大規模資料的全域性排序

hadoop 某人兒子的乙隻虛擬大象的名字 是乙個複雜到極致,又簡單到極致的東西。說它複雜,是因為乙個hadoop集群往往有幾十台甚至成百上千臺low cost的計算機組成,你執行的每乙個任務都要在這些計算機上做任務的分發,執行中間資料排序以及最後的彙總,期間還包含節點發現,任務的重試,故障節點替換...