2012-03-07 203 views
12

我有一個OpenGL場景,呈現了一羣精靈,我想自動爲它們添加陰影。這裏有一張展示我的意思:OpenGL ES 2D陰影的陰影

enter image description here

該場景使用正投影,精靈是紋理四邊形,和我使用的深度緩衝區前吸引他們來支持。我正在使用OpenGL ES 2.0,但也會讚賞iOS或非ES世界的想法。在我的頭腦中,我拋出了一些想法,我想知道哪些是最有前途的。

  1. 繪製每個精靈兩次,第一次正常,第二次用某種陰影着色器在場景中更深一點。不知道這是可能的嗎?
  2. 繪製一個精靈,然後再繪製一遍,變暗,並用一些阿爾法,幾次與一些隨機抖動應用於verticies。這可能看起來很傻,根本不像一個影子。
  3. 繪製沒有背景的基礎場景到紋理,然後模糊並使其變暗以創建一個大的投影。然後在陰影紋理上繪製基礎場景,最後在背景上繪製。不過,這將會消失精靈之間的陰影。
  4. SSAO在後處理階段。可能是最具動態性和自動性的,但可能會看起來模糊/顆粒感和真正緩慢的事情。
  5. 在創建時,爲每個精靈生成陰影紋理。爲了渲染,在場景中繪製一個精靈,然後繪製它的陰影。我想我想避免這一點,由於加載時間和額外的內存要求,但這可能是最快和最好看?

我不想用外部紋理做任何陰影工作,因爲我在不同的比例下使用相同的精靈紋理,並且預先烘焙的陰影會不自然地縮放。

所以這些比其他人更好嗎?有沒有其他選擇我沒有想到?謝謝!

+0

對於#3,您可能會對Imagination Technologies的後處理建議感興趣:http://www.imgtec.com/powervr/insider/docs/PowerVR.Post%20Processing%20Effects%20Development%20Recommendations.1.7f。 External.pdf,其中包括對高效布隆過濾器的描述。只需渲染對象的黑暗版本即可取代高通濾鏡,這應該會產生良好的快速投影。 – 2012-03-07 17:04:29

+0

好讀,布拉德。如果我去#3,我可以使用這種方法。 – Josh 2012-03-07 17:38:39

回答

5

這些都是一些經過深思熟慮的選擇,這裏是我對每個

  1. 想法這是絕對有可能使用着色器,但它可能不是最高效的方法,因爲模糊將不得不在着色器內完成,可能涉及多個紋理查找。
  2. 多次繪製紋理會起作用,並且看起來像一個陰影,因爲每個「抖動」圖像​​都會稍微修改alpha值。但是再次,每個精靈的混合和多重渲染會加起來並可能影響性能。
  3. 我喜歡並推薦這個選項,因爲你可以設置一個着色器,將黑色像素代替彩色像素(考慮阿爾法)放入小於屏幕的渲染目標(1/4),然後將其用作陰影紋理。由於紋理現在正在拉伸,您也可以免費獲得「模糊」。進行「黑化」的像素着色器會非常簡單,不會對性能造成太大影響。
  4. 除非你真的需要高質量的陰影(和以前的方法不足),我不會推薦這個。
  5. 這當然是最靈活的選項,並且具有x2渲染複雜度。不幸的是,它會比上面的所有其他選項消耗更多的內存。

希望這會有所幫助!

+0

謝謝你的想法! – Josh 2012-03-07 14:27:54

+0

想要與#5一起去,似乎它會讓我獲得最佳表現。 – Josh 2012-03-12 15:21:05