利用分段式深度解決特效重複疊加的問題

2021-07-26 17:28:13 字數 1675 閱讀 1427

很多特效都會用疊加的渲染方式,如果麵片出現重疊,那麼這個特效就可能會疊加兩次或以上。下面以貪吃蛇的蛇身體上的加速特效為例進行說明。

圖1 重複疊加現象示意圖

上圖中放射狀的黃色尖刺就是重複疊加特效的結果。

直接原因是:

1, 有麵片重疊

2, 使用疊加方式渲染

3, 關閉ztest

在蛇身體的例子中,麵片重疊的原因是蛇身彎曲的程度過大。

圖2 未彎曲時的網格示意圖

圖 3 過度彎曲時的網格示意圖

蛇身體在未彎曲時的網格如圖 2所示。從圖 3可以看到過度彎曲的時候,藍色三角麵片和黑色三角麵片出現重疊。

多次重複疊加的常規解決方案是:

1.    zwrite設為on

2.    所有麵片在同一深度

3.    深度相同時不繪製

在蛇身體的例子中嘗試這種常規解決方案如下圖所示。

圖4 常規解決方案

可以看到由於重複疊加產生的黃色尖刺確實沒有了,但是有些區域的特效感覺莫名消失了。

究其原因,先看網格圖:

圖5 網格示意圖

為了避免特效出現銳利的邊緣,在身體左右兩側的特效需要有漸變,所以特效的網格比身體要寬很多。圖中特效莫名消失的區域都是蛇身重疊的區域,有兩層網格。在繪製漸變部分的時候,已經寫入深度快取了,導致在繪製第二層的時候,由於深度相同而選擇不繪製。

可見常規解決方案並不能很好的解決問題。

現在出現了兩種情況:

1.    蛇身過度彎曲的區域,重疊的特效需要只繪製一次

2.    蛇身重疊的區域,重疊的特效需要都繪製

在這個例子裡,能用來區分到底是蛇身過度彎曲的區域還是蛇身重疊的區域的東西是,麵片在蛇身上的序號。如果是序號相鄰的麵片重疊,就是蛇身過度彎曲,否則就是蛇身重疊。我們可以令麵片的深度隨著序號增加而增加,那麼對於兩個重疊的麵片,如果深度差異小,則可以認為是蛇身過度彎曲的區域,否則就是蛇身重疊的區域。

因此我們可以在depth test階段判斷當前深度和已繪製的深度的差異,如果小於一定閾值,depth testfail即可。然而我們並不能自定義這樣的depth test,我們最多只能做到,ztest設為notequal。這意味著序號相鄰的麵片深度相同,序號差別大的麵片深度不同。然而這是件不可能完成的任務,我們可以退而求其次,把蛇分成n個片段,每個片段由m個麵片組成,片段內的麵片深度相同,不同片段的深度不同。

圖6 分段式解決方案

從上圖可以看到,雖然還是會出現黃色尖刺,但是黃色尖刺已經大幅度減少,達到可以接受的程度,同時不會引發其他問題。

分段式回填

上圖就是我寫的分段式回填的檢視 我們可以很清楚的看到上圖我是先回填正駕駛的字段然後再回填副駕駛員的字段。這段 是乙個下拉框改變事件 這裡寫的功能是在這個下拉框中具體選中某個車輛編號後,將會彈出有關這個值得乙個大型的模態框,裡面有該車輛的駕駛員資訊 車輛資訊 證照資訊,我這裡只給到一小部分的內容,也是...

分段式多級離心幫浦

禹州山西水幫浦廠多級幫浦 dg46 50x4多級幫浦 臥式多級離心幫浦具有效率高 效能範圍廣 執行安全平穩 噪音低 壽命長 安裝維修方便等特點。供輸送清水或物理化學性質類似於水的其它液體。主要適用於城市高層建築給排水及消防用水 工廠 礦山給排水 遠距離輸水 生產工藝迴圈中用水 暖通空調迴圈 生活用水...

分段式多級離心幫浦 分段式多級離心幫浦的組裝與調整

分段式多級離心幫浦的組裝與調整 將分段式多級離心幫浦拆卸完畢,經清洗 除鏽 檢查 測量,更換或修復不合格的零部件。排除幫浦的故障之後,就要將其回裝,恢復其工作結構。在回裝時,要嚴格按照組裝順序和組裝技術要求進行,精確地控制各零部件的相對位置和相對間隙,避免零件磕碰,杜絕違章操作。1 組裝順序及技術 ...