今天跟大家分享Shader小白入門基礎教程之固定管線(上)。在講Shader之前,可能會問為什麼遊戲美術當中需要編程呢?這一點主要和兩方麵有關係,一方麵是當前遊戲美術的特征;另一方麵就是當前遊戲的一種說新不新但是很高效的開發模式。

首先各位看官要明白的是,遊戲美術軟件,如果借用WEB開發技術來講,也有“前端”和“後台”之分。這裏的“前端”是看得見的、直觀的、簡易的、可直接操作的;“後台”是指不能輕易看見的、不可輕易直接操作的以及隱性的。
舉例來說,在你用Maya建模的時候,軟件開發者將多個複雜的代碼轉化成一些功能和命令,這些功能命令在菜單中可以直接找到並在3D視圖中直接參與使用;可是,在一些大型項目,尤其是國外獨立項目和大型次時代開發項目中,建模師或是動畫師,想要表現特別、複雜或是優化表現效果時,軟件當中的已有功能不能滿足需要,那麼這時候就不得不進行魔改,對軟件“底端”進行操作,用Maya Embedded Language(也就是Mel)腳本語言進行直接命令修改、設計。

沒有編程基礎的,很少能做到Mel編程。但是為什麼門檻高還要有人去做呢,就在於“高門檻”帶來“高回報”。有了這樣的技術,可以讓你基本達到“為所欲為”的目的:):有的,可以增強畫麵表現效果,讓人驚歎“你是如何做到的”;有的,則可以“一勞永逸”,將你的這段代碼作為永久插件進行使用,在你日後的工作、創作中進行運用。
這也就是為什麼技術美術(TA)可以給出更加豐厚的薪酬。

另一方麵,就是和當前一種“說新不新”的遊戲開發模式有關:Agile Game Development with Scrum,即Scrum敏捷遊戲開發。這是一種相對於傳統遊戲開發流程的開發模式,它的核心就是“迭代”,確立一個小的開發周期,不斷進行迭代開發。這種模式小巧、迅速且貼近市場風向,可以減低製作風險。這種開發模式,廣泛的應用於當今遊戲大廠和獨立遊戲製作人。為了在短時間內,製作出一個可交互式的遊戲Demo,就需要“精兵簡政”提高團隊運作效率,一旦人少,那麼每個人會承擔額外工作,也要求美工需要多麵能力,尤其是在引擎中實現美術資源與程序對接的關鍵環節。而類似Shader,就是其中必要的技術之一。

我相信,除了一線的工作人員、遊戲愛好者,還有很多懷揣著獨立遊戲製作想法的朋友們。那麼引擎、shader等相關的TA領域複合技術,會更為直接的幫助你們。
二、Fixed Function Shader
在前文中,我們已經了解unity中有三種shader,而今天介紹的Fixed Function Shader就是其中一種。字麵意思來講,FFshader就是固定功能的shader,是對硬件能執行的基本的命令進行編寫的shader。這類shader功能很有限,但是速度卻是最快的。在unity中官方文檔中,介紹說,這種shader可以在當前所有硬件設備上正常運行。
FFshader涉及五方麵內容Properties(屬性)、Material(材質)、Lighting(光照)、Settexture(設置紋理)以及Pass(通道)。
在之前我們介紹了Unity當中ShaderLab的基本結構

回顧完之後,我們在unity中創建出一個Shader,這裏創建的默認shader是unity中的Surface Shader。

這裏麵我們仔細觀察unity給的默認shader中,是沒有Pass通道的,這是為什麼呢?在之前我們提到過,surface shader是對頂點和片段shader的包裝,這裏pass通道就是被包裝進去了。

為了教學方便,現在我把Properties和Fallback塊全刪除,如下

針對FF,我們在subshader中要添加pass命令,去編寫一個渲染通道。這裏需要注意,我在shader名稱前加了一個“Weg/”,是級聯菜單命令的意思。如下圖

pass命令中,第一個就是可以描述“顏色”,這個命令就是Color命令,這是個四維命令RGBA。這裏我們進行實驗,設置一個材質球,賦予該材質如圖:

我們在視窗中建立一個Cube,再將材質托給他,我們就看到一個不透明的白色cube了。這裏我們用四維數組對顏色進行指定,那麼有沒有更方便的顏色選取方式呢?有的,我們就需要Properties塊了,如下圖
這裏我們在Properties中建立了“_Color”並將它複製到下方,這裏注意,pass中的color命令如果用小括號,是指這個顏色是個固定值不變的;如果用中括號,就說明這是個參數值,是可以變的。
接下來我們看看材質菜單中有了什麼變化,很明顯,有了color選擇麵板,點擊時可以彈出,材質在默認狀態下是不透明白色狀態。(隨便改個色)
現在我們又發現,這正方體是一個平麵效果,並沒有三維立體的感覺,這個時候該怎麼辦呢?我們需要一個光照。這裏我們需要用一個功能命令塊——“Material”材質。針對表現效果,我們需要第一個屬性:diffuse,這個是用來描述漫反射效果的,可以簡單理解為一個物體的固有色。代碼如下

但是呢,保存一下回去,我們發現一個問題,我們在麵 color中,怎麼改顏色,都還是純白默認的樣子,這是為什麼呢?

這個,就是我在講引擎材質的時候反複強調的一個概念:質和光。你現在有一個顏色的材質,但是沒有光,那麼一切事物都是沒有顏色的,什麼也看不見。所以我們要啟用光照命令。我們在pass管道後輸入“lighting on”命令,意思是這條渲染管道,需要開燈。如下

我們保存在回到界麵,三維效果就出現了

我們再觀察,還是覺得怪怪的,顏色太純,尤其是暗部背光麵是受環境光的影響的,從美術角度看就是現在顏色太死。怎麼辦呢,我們就需要ambient命令,代碼如下

這時候我們切換回來,看到材質中多了ambient命令,並且我把它調到了粉色,會明顯看到立方體暗部有粉色效果了

暗部效果有了,但是我們會想,如果這個方體是一個光滑物體,那麼他應該有高光部分吧?那如何實現呢?這時我們就需要命令,specular,代碼如下

我們保存檢查,但是發現加了高光之後沒什效果。這是因為在FFshader當中,如果你是用了Specular,就必須添加一個separatespecular,即鏡麵高光
添加代碼如下

這時我們再回到界麵,調節高光,就發現高光有了明顯變化

可是呢,我事多,強度是有變化了,但是還沒達到那種反光強度效果,腫麼辦呢?我們需要shininess一個鎖點值(是一個浮點值),用來描述高光到底有多強。shininess是一個範圍,我們要用到range給一個取值範圍,我這裏是給的0到8,默認為4。

之後我給出了兩個對比圖作為效果對比(我這裏為了增加對比效果換成了球)


如果說,一個物體時自發光的怎麼辦呢?在FFshader中有一個命令,叫emssion,如下

如果說emission設置為白色,就是全曝光,那麼什麼效果都沒了,那麼我降低自發光強度,於是就會出現如下效果

今天我們講到了一些命令,諸如diffuse、specular、ambient等等,各位看官會覺得這些個單詞好熟悉啊,在8猴啊、3Dmax啊還有Maya啊,好像都見過。沒錯,你的感覺很對。Shader已經將大家初步帶進了整個遊戲視覺領域最深的部分——計算機圖形圖像學。他們是一個個數學模型構建的函數,來模擬真實的自然界效果。

有了他們,才有了令人驚豔的次世代效果模型、遊戲畫麵。所以,這就是為什麼一些核心大廠敢於自創IP,就在於擁有這些底層核心技術人才,一個個驚豔的遊戲效果才得以實現。如果看官想更有一番造詣,或是在建模上已經遊刃有餘還想得以提高,那麼你下一步就是這些深刻的理論,比如實時渲染技術、PBR技術等等。有人說,這些沒用,一般都不會使。這些技術有用與否,在於對自己的層次的定位和目的的選擇,如果你能掌握shader、render甚至更深的一些知識,就實現了“質光結合”的材質飛躍,類似於莊子所提過的一個概念“無所恃”。請各位看官酌情適用~
來源:Thepoly
作者:kinglary
下一篇 Shader小白入門基礎教程
熱門課程
專業講師指導 快速擺脫技能困惑相關文章
多種教程 總有一個適合自己專業問題谘詢
你擔心的問題,火星幫你解答在廣州這座繁華的都市中,數字創意產業正蓬勃發展,廣州視頻剪輯培訓成為許多影視愛好者的理想起點。隨著短視頻平台和影視製作需求的激......
在北京這樣一座充滿創意活力的都市,UI設計培訓正成為無數年輕人追逐職業夢想的跳板。隨著數字經濟的蓬勃發展,UI設計行業在北京展......
在當今創意經濟蓬勃發展的浪潮中,北京平麵設計培訓成為眾多職業追求者的理想起點。這座城市的活力與機遇吸引著無數人投身視覺藝術領域......
在影視和設計行業蓬勃發展的今天,虛幻引擎作為核心技術工具,正引領著視覺創作的革命。越來越多的人渴望掌握這門技能,而專業的培訓成......
在北京這座文化創意中心,平麵設計培訓行業蓬勃發展,為渴望入行的學員提供了豐富機遇。隨著數字媒體和影視產業的崛起,掌握視覺傳達技......
在上海這座充滿活力的城市,影視和設計行業正迎來前所未有的發展機遇,數字技術的進步讓3D建模成為創意產業的核心驅動力。參加專業的......
同學您好!