Shader Development using unity 筆記01
- 閔翔 詹
- Jul 10, 2018
- 3 min read

前言:
前陣子每天都會在google上爬文,找看看有沒有哪些文章能簡單的幫助我入門shader這個大坑,找了好久、繞了好幾個圈,但弱者如我,看了許多對岸的大神寫了很多教學分享文章,依舊對shader是什麼,到底要如何運作感到懞懞懂懂、一知半解,所以找到這系列影片時,非常開心地希望可以分享給大家,我會盡量用比較口語化的方式介紹專有名詞,希望是一系列連你阿母都能看得懂的教學😁
p.s我的英文也是破破的,所以不敢說是系列影片的翻譯,頂多只能算是筆記,大家就將就看一下吧XD
正文:
所以什麼是Shader呢?
再深入學習shader之前,首先我們要先了解GPU到底是什麼,
GPU也就是大家口中所謂的顯示卡、顯卡,是專門負責計算電腦中圖形處理、圖像處理的電腦硬體,全名是Graphic Processing Unit 中文叫做圖形運算單元、圖形處理器。 不同於CPU,他們之間最大的差別在於運作方式、內核數量,CPU就像是台上的老師,他們的數量或許沒有學生數量來的多,但是個體運算能力都遠遠超過學生許多,再來是他們處理事情的方法,CPU處理多件事情的時候他們會按照順序,一件一件執行,而我們的GPU處理事情時則會“多件事情同時處理“
也因此CPU擅長處理單一且複雜的邏輯運算 GPU擅長處理大量且簡單的邏輯運算

再來進入我們的主題,shader則是一個運作在GPU上的指令集合,不同於一般的程式語法,shader生來就是為了在GPU上面運作的程式語法說得再多都不如直接看比較快,以下分享一個網站,裡面許多特效、電腦動畫全部只依靠短短的幾行程式碼、跟一兩張貼圖製作而成
是的,這就是shader的魅力,短短的幾行代碼,就可以製造出千奇百怪的效果

shader的工作
在電腦的世界裡,如果我們要畫一張卡片,我們首先需要的是他的頂點位置,這些頂點的法向量、顏色,以上這些我們稱之為頂點資訊(vertex input)
接者介紹我們第一個shaader – 頂點著色器(vertex shader)
我們可以簡單的把它看作一台機器(函數)
當你把以上這些頂點資訊丟給頂點著色器(vertex shader)後他會輸出處理過後的資料(data)
舉例來說如果你丟給他一張靜止的旗幟,並讓他用sin()函數作時間上的變化,他可以生成出一張飄動的旗子(如下圖)

而這些輸出的資料他們不會閒著什麼也不做,這些經過頂點著色器(vertex shader)處理過的資料,會傳給光柵器(rasterizer),他是電腦裡的另外一個硬體, 並且只負責處理兩個任務
第一:他檢查像素點是否出現在幾何區域內
(也就是幾何圖形的範圍之中,像下圖中的三角形區域)
第二 :他會根據你給他的頂點資訊(一樣只有幾何區域內), 計算出每個像素的顏色插值,並將其傳遞給pixel shader
接著我們第二個夥伴pixel shader輸出每一點的顏色、透明度

重點整理: 1.cpu序列執行,GPU平行處理
2頂點著色器(.vertex shader)負責處理頂點訊息,諸如頂點位
置、法向量、顏色訊息
3.光柵器(raterizer) 處理兩個任務找出幾何區域內的像素
找出每一片像素的顏色插值
4.像素點著色引擎(pixel shader) 每一個像素顏色的加工、透明度的設定
5.簡單的工作流程: 頂點資料 --> 頂點著色器 -->光柵器 -->像素著色引擎
p.s.如果對搞清楚這些shader、元件到底是什麼而感到困難的話,可以先從記住這些元件的工作內容開始哦~
第一次分享自己整理的筆記,如果有寫錯的地方或寫得不太好的地方還請大大們指點一下,我一定會馬上修改文章😊 如果有看不太懂的地方也歡迎大家回報給我喔😆 我會盡量一一回覆的XD
Comments