2011-12-27 300 views
2

我執行我的3D遊戲一個簡單的閃電效果,這樣的現實電動閃電:渲染使用OpenGL

http://www.krazydad.com/bestiary/bestiary_lightning.html

我使用的OpenGL ES 2.0。儘管如此,我正在思考什麼是在3D環境中呈現最佳效果和最高性能的方式,因爲從任何角度來看,組成電螺栓的線條都需要看起來「堅實」。

我正在考慮爲每個線段生成兩個平面,在X十字中創建一個線條粗細的效果。通過禁用深度緩衝區寫入來渲染,使用某種類型的添加混合模式。使用具有alpha通道的電動貼圖紋理每條線段的紋理。

雖然我使用這種方法生成必要的三角形列表,但我有點擔心,因爲我的遊戲可能會同時生成很多閃電。但是因爲閃電的長度和厚度會有很大的變化,所以我懷疑簡單地使用一個閃電的動畫3D物體,拉伸並指向正確的位置看起來不錯,這是我最初的想法。

我想到了一種替代方法,我在後處理階段使用投影終點之間的二維線渲染閃電。這應該很好,因爲在我的情況下,透視效果可以忽略不計,除非線條出現在遮擋對象後面會很棘手。

在這裏最好的方法有什麼好主意?

編輯:我發現這個白皮書從nVidia的:

http://developer.download.nvidia.com/SDK/10/direct3d/Source/Lightning/doc/lightning_doc.pdf

其中採用具有對於每個線段的廣告牌的方法,然後再應用一些濾波以平滑所得到的間隙,並且從每個廣告牌重疊。

似乎可以產生相當不錯的視覺效果,但是我不太滿意其他的過濾通行證,因爲遊戲適用於手機,因爲這樣的步驟非常昂貴。事實證明,由於額外的矩陣計算開銷,移動設備上的緩慢移動,廣告牌的CPU相當昂貴。

+0

你爲什麼用3D創建它?這些螺栓應該足夠明亮,以至於你可以用一個不斷面向觀察者的2D平面脫離,但限制在兩點之間旋轉。 – Blender 2011-12-27 03:47:34

+0

然後螺栓需要根據距離延伸,這在視覺上並不是最佳的,因爲在我的情況下,距離可能會有很大差異。這個問題在「3D」中是一樣的,這就是爲什麼我正在考慮爲每個閃電建立一個自定義三角形列表。 – sinsro 2011-12-27 04:39:28

回答

0

動畫紋理,可能由着色器提供動力,可能是處理此問題的最快方法。

任何幾何圖形的生成和渲染都會限制效果的質量,並可能需要更多的CPU時間,內存帶寬和繪製調用。

在四邊形或着色器上使用單個動畫紋理創建過程閃電,將使速度保持恆定,並使該效果更容易實現。對此,this question可能會感興趣。

+0

正如在上面的評論中提到的那樣,靜態動畫紋理需要拉伸,這在視覺上並不令人滿意。這就是爲什麼我正在研究爲每個螺栓生成一個三角形列表,這取決於它與目標的距離。這似乎是他們在天際發射閃電時如何做到的,並且看起來非常像我想要的。至於我認爲你應該將其應用於一架可觀看飛機的着色器方法,可能是一個好主意,但實施它以使其在所有角度和距離上看起來逼真並不是一件微不足道的任務。 – sinsro 2011-12-27 04:55:43

2

我最終做了類似nVidia論文的建議,但爲了防止後處理步驟的需要,我對不同類型的分支角度使用了不同類型的紋理,以避免片段拐角的間隙和重疊,很好。爲了避免昂貴的廣告牌矩陣計算,我改爲使用更多的2D方法繪製線段,但手動計算線段中每個頂點的深度值。這產生可接受的性能和視覺效果。