2014-04-09 219 views
0

我正在製作一款遊戲,基本上是一個快速變化的2D場景,其中一些點光源(每個都可以有自己的顏色)被放置在屏幕上,也可以自己移動框架webGL/openGL中多個2D點光源的最高性能方法? [動態燈光]

讓我先給你,我在紙上勾勒少數情況下今天早些時候:

Different kind of point light situations

終產物應該像4所示。我的問題歸結爲: 你會選擇哪一個執行爲了表現,爲什麼你會這樣做。

  • 多少着色器程序,將需要哪些資源&有多大(紋理?VBO?)
  • 方面有多少開關(程序更改,其他制服,..)

我目前的做法將是有光的地方和不光的地方。這將在每幀開始時渲染,但僅用於下一幀。所以Light總是會落後1幀,反正這看起來不錯。在對象的正常渲染過程中(例如藍色矩形),我將在片段着色器中查找光照紋理,並將該值與對象之一組合。

然而,我看到以下缺點:

  • 燈總是laags後面(60 FPS => 16.6ms)。隨着對象每幀移動15個像素,這看起來可能很糟糕。
  • 無論屏幕上有多少指示燈(可以是0,可以是100),我都需要保持一個很大的紋理。
  • 每一幀,我需要清除光質感灰色與阿爾法全球dimmdown然後重繪所有的燈..

最大的優點我看到的是,這僅僅是2D,因此它並不需要知道任何陰影或其他東西。

隨時發佈任何建議,我很高興閱讀和測試它們。不想浪費任何不必要的表現。

+0

嘿,我只是張貼這在這裏也許它仍然releavant。我爲我的庫創建了自定義照明方法:https://github.com/azarus/SGL.js/ **示例:** https://azarus.github.io/sgl.js/examples/light。 html 因爲它使用頂點着色器來計算陰影,所以速度相當快。 – Azarus

回答

1

這裏我冒險可能會過分簡化你的問題。如果我這樣做,對此感到遺憾。

當你談論照明和2D精靈時,我總是想到一個矯枉過正的問題。一個巨大的錘子(在執行時間+渲染時間花費你)爲一個非常小的釘子。

有很多方法以非常便宜和有效的方式模擬照明。

一個典型的例子是繪製一個帶有阿爾法的位圖,模擬效果的光點,在等距遊戲中創造出非常好的「假照明」感。有(或者更好的是,)有很多使用這個技巧的商業遊戲。

https://gamedev.stackexchange.com/questions/22159/can-i-achieve-a-torchlight-effect-lighter-area-around-a-light-source-in-a-2d-g

一個例子,如果假設你可以使用這樣一個解決方案,可以實現在解決奇偶出色的表現,因爲這影響會比任何其他照明計算多少便宜得多。

我希望能以某種方式提供幫助。

乾杯 莫里吉奧

+0

那麼,我試圖避免那種「第二渲染步驟」,其中所有的燈都呈現爲輕質結構。你不會看到使用半透明物體的東西,它將使用alpha來「點亮」之前繪製的整個框架。在哪裏亮起,它將使用低alpha值的lightcolor,在那裏沒有光,它將使用黑色,alpha值等於所需的環境光照水平。 我不想浪費內存帶寬的東西,除非它真的需要。 –