上帝之光(God Ray)

來源:互聯網
上載者:User

God Ray,看起來很牛,實際上很簡單,現在幾乎沒有遊戲不用了。今年四五月份,我也嘗試在項目中作了一個這個,確實,比想象中的容易多了。一直想寫一篇,一直沒時間,終於有點空了,寫下來,反正不是什麼困難的東西。您要是做也就是一兩天的事情吧。

 

感謝我的同事Aman Jiang,他最佳化了我之前God Ray的處理方式,使之更符合需要了。而且,介紹了好幾篇不錯的文章,雖然有些方法由於引擎的限制不能做,但是最後還是一起想辦法繞出來了。

(唉,要能多給我點時間多好啊……我就自己做了T_T )

 

圖片節選自Crysis。感謝Crytech這部好遊戲。

 

感歎,無論如何,遊戲的圖形已經進入了一個新的時代,妄圖通過技術來壟斷市場幾乎是不可能的了。絕大多數遊戲廠商幾乎處在同一個起跑線上——任何一個很牛的效果,很快就會被破解,然後被無數人用來用去。

現在的歐美大作看起來都是一個樣子,大約就是這個意思。

追求圖形的時代已經過去,甚至追求物理的時代也已經過去,可能更重要的,是思考如何用現有的手段讓遊戲更好玩吧……

 

God Ray發生在最後的像素空間內,假設你能夠確定太陽光的像素空間位置是Cx Cy,那麼流程大抵如此:

首先,將上一楨的,或者本楨的Render Target保留,以備處理,我們稱這張圖為參考圖Tex_Ref。

然後,從當前的像素 x,y,向Cx Cy作一條線段,在這條線段上,按照一定的數量(假設:32)對本楨或者上楨的Render Target採樣,並將採樣結果相加,得出本點受到本條線段各處高光影響的總光強P。

然後,使用 pow(P, Param_Power) * Param_Intensity,就能得到最後的光強了。

 

這個主要的意思就是,對一個強光地區,根據光線的強弱和參考點的位置,將能量沿與參考點的連線方向延伸出去,這樣,強光地區相當於被模糊且放大了,最後的結果就是,它的外形激發出來,與情境原有的色彩混合,形成了光線滋出來的效果。

 

如果你的演算法僅僅是上面那樣,那麼恭喜你接下來要哭了。

 

首先,一般遊戲的特效光強都遠遠高於情境中的高光域,有些材質由於受光強烈,也會有很大程度的反光,這麼做的直接結果是:只要一放特效,恭喜你將看到一串閃光從特效上發出來。或者一片金屬突然發出一串閃光來。

這個問題的解決方案,老外已經給出來了:你在渲染God Ray的Tex_Ref時,除了Lensflare和天空盒外,所有Mesh均渲染成黑色,粒子等從這個Pass中排除。這樣最後的效果就是:只有情境的Lensflare和天空盒上的高光域會發出God Ray,這正是我們想要的。這個做法需要多消耗一個pass來,不能使用上楨的Render Target了,不過,對於最後的效果而言,這應該是很值得的,如果您情境中的物體數量不多,可以嘗試一下。畢竟這種做法的Pixel階段很簡單,就是單純根據標誌返回黑色或者某個顏色而已,採樣很少。

 

第二,當前你所看到的情境很可能沒有高光域,但本應當有神光效果的,例如,你靠著一面牆,牆上有一個窟窿,窟窿外面有個很大的電燈泡,不過可惜因為你靠著牆,窟窿在你的視角裡很小很小,而且並不透出,所以你看不到這個電燈泡。但是,真實的情況下,應該會有一束光從縫裡面出來。這個問題有多種方法解決,第一種是在Tex Ref上面畫一個參考Convex過來,過秤稍微有點麻煩,就不多說了。另一種辦法更直接:直接讓美術在這個地方擺一個稍微小一點的高光點,並讓這個高光點發出God Ray。

 

第三,當天空盒中的高光域很大而且比較規則,且前方沒有遮擋時,整個光會成為一個大的Volume,這會讓整個情境感到很爆,也會傷及萬家的眼睛。這個是最好解決的了:Shader裡面再用一個1D Noise紋理或者一個2D Noise紋理,對God Ray採樣的強弱進行控制,就可以了。由於引擎節流,前兩點我們無法很好地完成,第三點是改動較大的,結果很不錯。

 

更多的問題還沒有遇到,想必研究過這個東西的人,也還會有更好的方法,請不吝賜教。

 

 

我現在最佩服的就是某國產遊戲的God Ray……竟然在螢幕空間上,使用Alpha貼了一個一直閃動的紋理動畫上來……無論光源在哪裡,這個特效一直固定在你顯示器左偏下的位置……感歎咱們中國真的不缺忽悠的人才。效果只要好就行,其實,無所謂忽不忽悠。其實,說到底,搞圖形的,哪個不是忽悠人的呢?……

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.