Deferred Shading翻譯後記 一

2021-08-23 13:22:22 字數 2290 閱讀 6136

崩潰中,終於翻譯完了,不管到底翻譯得如何。

很久沒有這樣熬通宵來翻譯文章的了,天天被外包折騰,夜裡唯有的時間只能用來做自己想做的東西。我應該是屬於晝伏夜出動物,這樣才能滿足自己的喜好和習性吧?

由於機緣的巧合,去年開始,自從在工作中被迫接觸到這個技術之後,就不斷被unreal的deferred shading所鬱悶,灌輸和**。事實上,一開始的不熟悉導致我很多的誤解,但是,當確實體驗到他的強大的時候,我開始不能自拔,痴迷於各種各樣的資料——褒的,貶的,中性的。

痴迷並不意味著迷信,事實上,我認為,unreal無論外面的評價有多好,但他在ds上的實現並不「正統」。以至於我們對一些亟待解決的問題進行處理的時候,顯得畏首畏尾,無可奈何,直到最近,才敢於去探索和處理一些必須的東西。不過這也可能是我們的專案型別和中國的大環境所限制的,因為,無論如何,你不得不承認,《戰爭機器2》是個好遊戲——起碼看起來是。而基於同一套技術,只是在具體實作方面走向了不同方向的遊戲名單,則可能還包括《殺戮地帶2》,《星際爭霸2》,《crysis》……只不過,因為引擎其它部分極低效率的影響,無法發揮deferred shading的高光源,高面數優勢,因此讓我們覺得麻煩而已。

對於任何新技術,都有乙個從舊到新轉化時,所需付出代價的問題,那麼,寫乙個基於deferred shading的引擎到底有多難?我覺得不難:從今年的一月份開始鋪量,直到現在大約出了效果,也就是兩個月的時間——或者說兩個月的晚上4小時——請注意這中間並不是在使用原來的那套工具集,而是同時重頭開始編寫的gamer class,而絕大多數時間,其實並不是浪費到了deferred shading本身,而是浪費到了這套渲染系統上。

誠然,現在gamer class的deferred shading還很弱小,弱小到了只能在demo裡通過硬硬的編碼來完成,而無法做到如unreal,星際,crysis那樣的廣度和深度,但從學習這個技術過程中吸取的給養,很可能已經超過了我此前所學的各種技術的總和。

曾經有人把deferred shading誇得很強大,也曾經有人把deferred shading貶得一文不值,不過可能維持正統思想的程式設計師還是多數——「沒有什麼技術是正確的,也沒有什麼技術是錯誤的」。技術本無對錯之分,就要看技術用在了誰的手裡,用在了什麼樣的目的上。目的是第一位的,一切均服務於目的,目的高於一切,強於一切。deferred shading既不強大,也不弱小,它類如其他任何技術一樣,只是在享受好處的時候需要刻意去避免麻煩,僅此而已。還是那句話:標榜解決了一切的技術一般都什麼沒解決,而標榜沒有問題的方案只是沒遇到問題。真正優秀的技術,永遠是能先於別人發現自己的問題。

我對deferred shading推崇的乙個原因是:deferred shading的大體思路,其實就是我們不厭其煩所聽說的封裝。作為乙個程式設計師,可能我們都需要經歷這樣的時刻——當你有一段**,它在90%的地方都有所出現,只是外部形式稍有不同時,你應該把它做成乙個函式。

deferred shading,就是這樣乙個函式,而這重複率如此之高的**段,正好是傳統圖形光照系統那千篇一律的光照**。所謂的材質,就是用於描述物體的外在表徵的方式,材質本身是沒有意義的,光和材質的配合才會有意義。而我們如果回想一下就不難發現:基於傳統光照模型的圖形技術,無論其他方面有什麼樣的差別,在乙個地方上都是一致的——那就是光照模型的**:diffuse是n乘l,specular是半形h,emissive是直接狂加,不過如此而已。如果將這個過程中所需的所有用於描述表面的資料,全部快取到若干張紋理上,而在之後的光照過程中統一計算,那麼,至少將享有如下的好處:

首先,硬體occlusion可以裁切掉那些不需要渲染的光源。而不像傳統管道那樣,只是影響到了,但其實並不顯示的光源也有可能被提交到渲染管道。

其次,最終的效率與場景的複雜度無關。準備材質資料的過程(base pass)非常簡化,因此這個過程的計算量是很小的。打光的時候,你所面對的無非只是幾張紋理,所做的所有工作幾乎都是線性的。

第三,強制的基於畫素的光照系統,這個可能既是個好處,也是個壞處。好處是品質確實很高,壞處是對於國內這種基於低品質來做遊戲的思路,這種方式並不討好,反倒是有種牛刀殺雞的感覺。deferred shading的優勢是多面多光源,而且是動態光源,這在現有的專案中幾乎是不可想象的,所要冒的風險不比最後的結果差多少。南韓人之所以敢做,是因為南韓網咖和個人普遍的配置都比較高,中國嘛……正如你我都知道的那樣。

假設說你已經準備支援了逐畫素光照系統,那麼在這樣的**面前,你有什麼理由放棄deferred shading呢?

總結來說,deferred shading,就是用最小的代價,換取逐畫素光照的品質——但是,誠然,沒有任何午餐是免費的,您也將為此付出代價……

同時,如果您的專案是準備基於逐頂點、少面數、低動態光源的品質的話,那麼,deferred shading是絕對的不適合。

題外話,畢竟網遊總是和圖形說拜拜的,這一點,你沒法要求太高……

Deferred Shading翻譯後記 二

本周四,跟同事們討論的時候,大概說了一下deferred shading的一些基本細節,以及與我們專案的關係。我對unreal3沒有全面支援deferred shading至今耿耿於懷,甚至有時候讓一部分同事產生了對unreal3的不信任感。其實,我最想表達的,是這個blog一貫以來的主題 沒有最好...

深圳之行後記

找工也算告一段落了,出去20天,感覺自己成熟了很多。雖然現在變得有些麻木,但某些事情結束了,也就不會再放在心上了,開始新的生活,珍惜剩下的不多的大學生活的日子,多嘗試著改變,做最好的自己!當我15號拿到品高的offer時,我心裡真的挺高興的,畢竟自己第一次出來找工,而且那麼快就搞定乙份工作了,這可是...

面試後記(C )

題目一 1 3 5 7 101 main int i,t 1,s 0 s是最後的結果 for i 0 i 101 i i 2 t 1 s s t t 2 答案應該是 1 t i 2 t i 第二空具體錯在需要除個i,因為在第一空時就t已經改變了不再是1或者 1,而是i或者 i,平常我會直接把for裡...