1. 程式人生 > >ShaderLab教程系列(一)

ShaderLab教程系列(一)

文章來自http://www.manew.com/thread-43291-1-1.html 

首先,第一步,我們先看shader有什麼作用。我們在場景裡面新建一個cube。我們可以看到下圖:
 

 

      在Hierarchy中選中這個新建的cube,我們可以在Inspector面板中看到

 

 

      我們來做一個小動作,通過photoshop建立一張很傻冒的圖,如下:

 

      然後將該psd檔案複製到專案中,並託給當前的cube。我們會看到

 

      至此,我們已經粗略的看到了shader的作用。那麼shader到底是什麼,他存在的意義是什麼,我們可以用它來做什麼。

 

      接下來,我們首先需要的是重溫舊知識,溫故而知新是任意一個可以正常呼吸正常吃飯的人必須掌握的本領。

 

      我們遇到的第一個問題是何為模型,如這個cube到底是什麼,他為什麼就是cube,沒有多一個角,也沒有少一個角。他的資訊是怎麼儲存的。何為模型,模型就是模型,有點廢話。那麼換個角度看問題,從程式角度看,模型到底是怎麼存在的。如cube為啥沒顯示成sphere。

 

      模型=網格mesh+材質material。(此係列教程是shader,所以,此處不會引入bone相關的資訊,後續,有時間,來做動畫知識體系的時候,會介紹bone以及T-POSE等概念。)網格mesh中儲存的資訊為頂點,三角面(3damax等傳統軟體可以任意凸多邊形,遊戲引擎中為了計算方便,就都整成了三角面。)如果你見過蒙古包或者類似的帳篷之類的東西,你可以想象下,我們搭建一個帳篷,如果不是買的現成的帳篷的話,我們第一件事情是弄一些竹竿或者木棍之類的搭建出龍骨,然後把那個油布或者類似的東西往上面一包,問題解決。模型其實也是這個概念,mesh就相當於我們竹竿或者木棍搭建的龍骨,他需要儲存的資訊頂點(即那些竹子木棍的結點)、面(即那些點之間需要包油布)、紋理座標(每個點對應油布的哪一個位置)、法線(這個有點抽象,即某個點反射光線的方向問題,主要用於視覺作用,對於shader來說,這個是重點)。材質球material就相當於油布,即我們到底有啥樣的油布,當然他的資訊遠不止油布這麼簡單,更準確的說油布僅僅相當於material中shader的漫反射紋理,也是主紋理。於是,模型的實際構建過程就是先構建出骨架,然後將指定的油布按照指定的方式包到骨架上。

 

      我們的第一個知識點溫故結束。接下來,我們需要溫故的是GPU的問題。GPU存在的意義通俗點的說就是渲染,講需要展示的物體形象的表現在顯示器上,所以,可以形象的理解為繪圖專家,你給他真實的三維場景的資訊,他需要計算透視燈光等等各種因素,最後在二維的紙上形象的繪製出三維的場景,讓你感覺栩栩如生。所以,通過這些淺顯的知識,我們可以知道我們開篇的cube渲染出來需要經過的事情:CPU需要組裝好CUBE的三維資訊、燈光資訊、攝像機資訊等,然後將這些資訊送交給GPU,GPU然後根據這些資訊繪製出一張栩栩如生的圖。(此處劃分並不嚴格,只是為了形象說明。)而我們的shader存在的意義,也就是shader的功效就是用來讓這個畫紙栩栩如生。所以,shader的好壞的衡量標準就是儘量逼真的效果儘量低的效能消耗(萬事萬物都在幹這個事情,希望的美好,現實的殘酷,尋找折衷點自我YY的活著。)