Ryan的休日相談04:關於特效美術學習Shader


在開始之前這會是一篇基於特效"美術"人員的我,在學習SHADER的一些個人學習歷程的建議與心得分享,所以與程式職能的學習路徑會有所不同,通常美術人員大多偏向感性思維對於數理邏輯方面的知識相對較為不擅長,然而隨著軟硬體與遊戲開發技術不斷突破創新,連帶著身為美術職能的我們都不能迴避這項技術的需求與普及。


所以第一個常見的問題就是特效美術到底需不需要懂Shader?

答案是肯定!一定要會喔!
甚至是整個美術職能都會需要,但是特效美術絕對是無法迴避的。
身為美術人員也需要學這些程式數理邏輯的知識嗎? 單純畫圖不行嗎? 畫圖也要開根號算三角函數做陣列轉換?
還真的要呢

如今隨著軟硬體技術提昇,傳統純畫圖的特效製程已經無法滿足現在主流遊戲的視覺表現與需求,玩家也擁有了比五年前更好的硬體設備享受更好的遊戲視覺體驗,所以在當今及未來的遊戲特效開發上還真的不行只是畫圖呢~
因為光是在調用特效常用的加色/半透明材質球本身就已經是在接觸Shader,更別說許多超常見的效果如UV Offset、Dissolve、Distortion、FlowmapUV、Color Maping、PostFX...等等,所以不管商用Unity/UE4或自主引擎早就大多已經具備可視化編輯工具,其目的就是希望開放給非程式專業的美術開發人員也能夠自行製作,並滿足各職能專業上的需求與表現,而不是像過往傳統只能找程式人員溝通協調希望的效果(況且也不是每個程式都懂圖學),而往往需要許多次的來回才能達到想要的視覺結果,甚至沒搞好最後只好放棄而使效果打了折扣,使產品在視覺表現上失去相當的競爭力,也會使個人在專業技術的表現上難以有所突破。

因為傳統單靠貼圖搭配粒子系統的表現是有一定的侷限性,如果能具備Shader技術不僅可以使效果更加靈活生動,甚至還能比傳統製程更加節省資源或效能,卻能得到更好的視覺效果,而且特效美術是最容易碰觸到效能議題的職能,透過學習Shader與圖學相關知識也能幫助我們更能掌握效能與視覺表現之間的平衡,找出適合當下專案的解決辦法,也讓我們的表現手段可以更加多元。


既然這麼重要那是不是最好剛接觸特效時就要學?

其實我個人的心得並不建議剛開始就學習Shader或者說不應該放太多比重在這上面,我認為約莫82分法是理想的,也就是美術8分 Shader 2分,可以先接觸基本初淺的知識是必須的,總不能跟我說不知道什麼是加色、不知道什麼是半透明疊加、UV Tiling / Offset之類的吧!

然而特效美術的本質是美術,我更希望新手應該先顧好"美術"這個本質優先,把特效美術該做的造型、色彩、動態都做好做自然做漂亮是滿足工作的本分,也就是能處理好素材、運用好粒子系統,而光是這部分就有相當分量需要新手特效耗費幾年(約3~5年...)的時間學習與磨練,而且身為美術顧不好視覺表現徒有功能展現是無法交給玩家的,因為人是視覺動物不好看的畫面就是不吸引根本也沒興趣了解用了什麼酷炫的Shader技術玩家哪管這些。
而有了好的美術基礎再搭配SHADER表現可以使效果跳脫框架甚至別有新意,如果沒有美術的美感與製程方法做基礎,直接單靠Shader往往所看到的都是偏向單純的功能表現,不見得能滿足視覺表演的內容品質,而美術製程有足夠的熟練度再搭配熟練的Shader知識,更能製作出有別以往的視覺表現跳脫一般常見的成果

在理解Shader的一些運作知識後更能精準製作需要的紋理貼圖來完成效果,而不是看著"節點預覽"胡亂猜測連結硬是把效果"矇"出來,那對我來說就是"矇"不是"做"更別說是"懂"
一些高手製作的精彩效果表現可是從素材端如:模型拆UV法線分布就要思考配置在接著搭配有意義的紋理貼圖投入到Shader計算中來完成,所以先把基本的美術端製程都練熟相對是頭五年很重要的事喔。

當然如果有把握兼顧併行那也是樂觀其成,只是目前我接觸下來似乎還沒遇到這種狀況就是了,而美術面或者美感如果不是從一開始奠定好基礎其實越到後期越是定型相對要調整難度也會提高很多,這也是我會建議優先顧好這部份的一個原因。


那麼我是怎麼學習SHADER的呢?

我跟大多數不擅長數理邏輯的美術夥伴們一樣,一開始看到下一秒就是關起來....都看得很痛苦
但是實在不想放棄...所以資質駑鈍的我花了少說兩年的時間專心吸收理解這些知識,才稍稍有點成果
這裡我就用條列式的順序來說明:

一定、務必、絕對要先去官網看每個節點(Node)的說明,理解節點的運算公式,而我當時的狀況是先從UE4開始因為當時的UNITY還沒有官方的可視化工具僅有一些外掛程式如:Shader Forge,而UE4的Material官方有完整說明且功能相對完整許多。

再來就是上網找教學實作
Google 或YouTube上只要搜尋UE4 Material Tutorial 、Unity Shader tutorial就會看到非常多教學,而教學的難易度參差不齊,可以的話盡量挑選節點少或者簡單基礎的效果開始試作,製作過程一定要確實搞懂每一個節點到底在做什麼事情,千萬不要只是單看節點預覽作效果,而找教學的內容也提醒不用侷限在單一引擎工具,因為不管是Unity的Amplify shader、shader forge、或官方的shader graph以及 UE4的Material ,幾乎通通都是相通可以相互重現的,只是提供的節點名稱略有不同、節點數量不同、介面不同以及運行的目標平台限制而略有不同而已,因為背後都是將這些節點轉化成shader code給GPU運行,並不會用了不同的引擎就變成別的東西了,所以相對的我們就可以把看到不錯的效果搬運到專案所使用的引擎中實現,很多UE4看起來不錯的效果也都是可以在UNITY實現的,當然如果有機會接觸到國外一些公司獨立開發的內部引擎也會有其所屬的可視化Shader編輯工具,就可以運用相同的知識來實現效果。

然後就是練習練習再練習.....
Open Book跟著教學做完一次後,Close Book務必在練習個幾次不看教學來製作出類似或相同的效果確保自己是真的理解能運用了,確保SHADER串接的思維方法是流暢正確的,至於要練習幾次就單看每個人自己的資質了,像我資質駑鈍光是個簡單的Flow map UV運用當初可是練習類似的效果不下2.30次以上....,而光是在網路上可以搜尋到的教學可是多到這輩子可能都不可能看得完....
所以就看吧~練吧~ 那些最終沒難倒你的都將成為你的。

就這以上三點,1.官網文件 2.網路教學 3 練習再練習,看下來似乎也沒什麼特別之處XD

對我來說學習SHADER的這條路真心覺得沒有捷徑,真的得老老實實的搞懂每個節點,確實的多作練習不斷練習持續練習,才能讓自己的思路更加清晰,並且這個過程中累積到一定程度的經驗值會有種突然豁然開朗的感覺,突然想通了一些更好更有效或者更有創意的做法,這些真的唯有在不斷的練習與實作中才可能發生,只是看教學沒實作 、只是覺得有聽懂卻沒實作通通都是無用的,不因看似簡單就不做也不因困難而不嘗試,這個領域要學的知識真的很深我也持續學習中始終無法說出:我都懂了這句話呢....只能繼續加油了,練習是不會背叛你的!

大推這個學習頻道很清楚地講解單一節點的運算功能
https://www.youtube.com/c/BenCloward

書籍的部分推薦Unity Shader入門精要
https://www.books.com.tw/products/CN11348513 相關圖學知識都有不錯的介紹

Shader程式教學
https://shaderdev.com/


最後再補充一個問題是特效需要學到會寫程式嗎?

我認為不需要,但是如果可以會建議需要能看得懂Shader code的初階程度,因為如果要求需要會從0開始寫那何必開發可視化工具給美術人員,從0開始那是一套完整的專業應該是交由專責的圖學程式人員,需要付出的時間也是相對應完整的,身為美術人員卻去花這一份時間那豈不是要你去轉職能了,這就有點本末倒置了,所以美術職能的本質並非在此但是如果能看得懂將會是有所幫助。
因為學習到高深的Shader編輯將會接觸到HLSL高階Shader語言的自定義編輯,也就是UE4 Material 或Unity shader graph裡的Custom node自定義節點,這裡的應用就需要直接輸入程式碼,但是大多時候其實都是搬運別人已寫好的CODE轉編輯到自定義節點中,所以身為特效美術來到這高階的部分其實能夠做到看得懂能搬能改就相當夠用了,當然這會是比較後期需要去精進的部分,當然也就更有助於直接與圖學程式或TA更精準的溝通與偕同視覺開發。

最後這期送上簡單的旗幟飄揚Shader給大家
也懇請喜歡這期的朋友分享與追蹤本專業~感恩!
#Ryan的休日相談







留言

這個網誌中的熱門文章

Zelda Stylize Camp Fire 薩爾達風格營火特效

Shader: Sin wave trail 波形擺動拖尾效果

群組提問: 關於獲得RIOT面試的分享