上帝之光(God Ray)

2021-08-23 11:49:41 字數 1953 閱讀 5378

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

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

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

節選自crysis。感謝crytech這部好遊戲。

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

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

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

god ray發生在最後的畫素空間內,假設你能夠確定太陽光的畫素空間位置是cx cy,那麼流程大抵如此:

然後,從當前的畫素 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貼了乙個一直閃動的紋理動畫上來……無論光源在**,這個特效一直固定在你顯示器左偏下的位置……感嘆咱們中國真的不缺忽悠的人才。效果只要好就行,其實,無所謂忽不忽悠。其實,說到底,搞圖形的,哪個不是忽悠人的呢?……

用火炬之光UI

最近忙著畢業設計,ui的地方遇到很頭大的問題,不會設計 索性今天用一天時間看了看火炬之光的ui,搗鼓了半天也終於能用 這裡要注意資源路徑和檔案的格式,另外會遇到這個錯誤 cegui invalidrequestexception in filef working cegui 0.7.1 cegui ...

機器視覺之光源

在機器視覺系統中 關鍵技術有光源照明技術 光學鏡頭 攝像機 影象採集卡 影象處理卡和快速準確的執行機構等方面。在機器視覺應用系統中 好的光源與照明方案往往是整個系統成敗的關鍵 起著非常重要的作用 它並不是簡單的照亮物體而已,而是具有將待測區域與背景明顯區分開 將運動目標 凝固 在影象上 增強待測目標...

PL SQL語法之游標

本文介紹的是oracle中的游標型別有哪些,以及如何定義和使用各種型別的游標。在oracle中,游標可以分為顯示游標和隱式游標。先說隱式游標,隱式游標沒有語法上的定義,但在使用上卻是使用了游標的特性,所以被稱作隱式游標 顯示游標則又可以分為靜態游標,和動態游標 也稱ref游標 而動態游標又可以進一步...