学习游戏渲染(Shader)的用处
?本文在討論的主題并不限于具體引擎或具體語言,為了說明方便可能會提到Unity的一些內容。
最近漸漸發現很多從事游戲開發的新人,對于學會寫Shader似乎總是有幾分神往,但一般入了門或者學了一段時間后,想再提高時就找不到方向,也不知道學這些東西有什么用,好像只能在不會的人面前顯擺顯擺。特別是如今像Unity這樣特別普及的引擎,可用的資源太多,幾乎不需要自己懂任何渲染的知識,更不需要動手寫Shader。
我就自己知道的來談談”關于渲染知識在工作中有什么用”。
一.理解誤區
不少客戶端開發新手,甚至是老手做了好幾年都不知道Shader具體是指的什么。有的同學讀過一些書學會了怎么寫Shader實現一些效果。但知其然,不知其所以然。常常把Shader等同于游戲渲染。這是不對的,Shader只是游戲渲染中的一部分,雖然是比較重要的一部分,但不可以偏概全。不少渲染書籍也都會在前一兩章談到渲染管線的相關內容,往往都是一筆帶過,要想全面的了解,還是要系統的學習。
(圖片來源:互聯網,這里只關注了頂點著色器和片源著色器)
像Unity這樣的引擎,對渲染封裝的比較厲害(有的引擎甚至連Shader都不暴露給客戶端),不利于新人學習渲染。如果要了解整個圖形管線的話,可以先學學UnityShader有個初步了解,然后再選擇OpenGL或者DirectX來進行更系統的學習。幾乎所有用引擎最終也都是依靠它們來完成渲染工作的。
二.在工作中有什么用
國內基本一個游戲項目里,至少要有一個對渲染比較有了解的人吧。我以前做客戶端的時候,團隊里就專門有人負責渲染問題。最基本的需求,就是要實現一些特殊效果,比如說波光粼粼的水面,旗幟燒毀時的溶解效果,蓋倫大招劈下來時候的氣浪等等。雖然像Unity這樣的引擎有很多資源可用,但還是有效果需要自己來實現的,看看這幾年國內的手游市場,不少產品都在渲染上下了很大功夫,像《崩壞3》,《天下》。像3DMMORPG這樣的游戲,如果渲染上沒什么亮點,很難有競爭力。所以項目里總是要有人會的。
? (圖片來源:互聯網)
再有就是和美術人員對接,要實現各種渲染效果沒有美術的支持是不可能的,但如果不了解渲染的相關知識的話,根本就沒法和美術進行對接,比如你要他做個法線貼圖,美術不會,而你也只是知道法線貼圖可以用來增加模型細節,但是不知道法線貼圖是怎么生成的,這樣工作就沒法進行了。再舉個例子,玩過3DS口袋妖怪XY之后的版本你會發現里面各個寶寶的卡通渲染看起來很棒,而由于3DS的機能十分有限(老任的機能一向是最弱的),為了節省資源,每張貼圖甚至通道都要物盡其用,設計的很巧妙,很顯然這種貼圖的使用方式不可能是美術突發奇想,而一定是在程序的指導下繪制的。
(圖片來源,Trace翻譯口袋妖怪X/Y制作技法)
最后一點可能就是性能優化了,上線之前每個項目都要拼了命的優化性能,以便兼容更多的低端機型,特別是手游,Boss們往往是既要效果又要幀率。這段時間一般是比較痛苦的,像Unity這樣用戶龐大的引擎,網上有很多優化經驗,很多書也會有專門章節來如何優化。像合并批次,減少特效透明重疊區域,降低陰影質量,改變lightMap分辨率,不要在Shader中使用AlphaTest等等,往往大家對這些都是知道的,不知道也至少聽說過。但如果不知道背后的原理,不知道為什么這么做,那便是是隔靴搔癢,無法舉一反三。遇到一些特殊的情況,就找不到思路了。如果能了解更多的渲染知識,那么優化起來會更加得心應手。
三.工作方向
?
有人問,是否有與渲染(Shader)相關的專門工作,當然是有的,我跟自己了解的大概分了以下幾類:
1.專門負責渲染工作的客戶端程序員
我在上面提到過的,一個團隊里總要有幾個人懂點渲染的,他們在團隊里一般不寫邏輯功能,專門實現各種渲染效果,并負責跟美術進行工作對接,在最后的項目優化時負責渲染部分的優化工作。有的公司還會專門成立一個部門來負責這部分工作,項目團隊只負責邏輯開發,渲染效果和優化全部都由這個團隊負責。這應該是最常見的一類了,這幾年大家的水平應該都有所提高吧,我看很多Unity程序員招聘的時候都寫著,會Shader有加分。不過這個“會”水分就很大了。
2.技術美術(TA)
這曾經是我比較神往的職位,不過自己美術實在太渣。有個前輩曾跟我水哦過:“TA至少要是50%的美術”。這個職位在國內是不常見,國外比較多。TA一般是屬于美術團隊的,或者是一個單獨團隊,不屬于客戶端程序。對于有TA的項目開發流程不太一樣,項目一般會提出需求,而TA負責實現,TA可以簡單理解為即會寫Shader又會做模型的人。往往是對美術方面的的要求比程序方面的要求高,必須對整個美術工作流程都比較清楚。這樣的工作流程做出的效果往往是效率比較高的,TA在制作的同時就考慮了美術效率的問題。
3.游戲引擎開發
此處指自研引擎的開發。不是說使用XX引擎開進行游戲開發?,F在國內普遍都是在做手游,很多都在用Unity,還在使用自研引擎的公司實在是不多了。這個工作要求對渲染知識的了解就比較高一些了,不是說會寫幾個效果就可以的,必須對整個渲染流程有比較系統的了解。當然了游戲引擎不只是有渲染一個方面,還有比如資源管理,UI系統,物理系統等,想想自己動手開發(維護)個Unity,頭都大,一般不太可能一人完成,引擎開發的團隊一般都稍微大一些,由于引擎的目標用戶是客戶端程序員和美術,測試,而不是玩家,所以作為工具鏈的起點,必須保證引擎的穩定和高效,這就需要比較好的語言知識(市面上絕大多數引擎都是C++實現的)。
自研引擎的一大好處就是可以隨便改,在性能優化的時候,由于能直接調試引擎源代碼,也比較容易定位性能熱點。有個問題就是,如果你是Unity程序員如果引擎本身有了Bug你就只能忍著,或者繞過它,但如果是自己的引擎,你就一定要查個究竟了。
4.大神之路
像龔大,余國荔,乃至卡馬克這樣的超級大牛,我就不清楚人家的具體工作了,但我想他們也一定是一步一個腳印走到那樣的高度的。
?
四.程序員的求知欲
程序員的求知欲普遍是很強的,沒有太多職業像程序員一樣需要一直不斷的學習。即使你不出于任何其他目的,當玩游戲或者做游戲的時候,你總是要好奇,這么好的效果是怎么做出來的。于是乎就要去探究,學習,進步。不一定非要個理由,一切只是出于好奇也是可以的。隨著工作越來越久,逐漸感受到知識都是相通的,重要的不是學習方法,學習能力還有學習的內驅力?,F有知識早晚是要過時的,但有些東西是萬變不離其宗的。所以學東西,還是要深入,究其本質,這樣既符合當前利益,也符合長遠利益。
寫的比較亂,總之就是為了解答一下一開始的疑惑,大家隨便看看,別太當真,說的不對的請批評指正。
?未經本人同意,請勿轉載。
轉載于:https://www.cnblogs.com/Esfog/p/What_is_the_use_of_learning_GameRendering.html
總結
以上是生活随笔為你收集整理的学习游戏渲染(Shader)的用处的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker入门简介
- 下一篇: java多线程解读一(基础篇)