Shader入門基礎(一)
圖形渲染程序
顯卡在設計之初,主要是爲了解決實時渲染3D圖像的問題,
實時即以很快的速度生成圖像,而不是播放已經錄好的圖像——播放視頻。
實時渲染對任何一個遊戲都至關重要,
因爲計算機在屏幕上生成的圖像,都是對玩家操作的即時反饋。
CPU中非常常見的if-else語句,在GPU中效率並不高,
這就是爲什麼我們要學習Shader編程。
首先,需要知道,應當儘量避免if-else語句在Shader編程中出現。
其次,對顯卡的編程大致分爲兩種
① 並行計算(Parallel Computing)
例如CUDA\OpenCL\OpenACC,使用它們我們可以對圖形圖像進行處理,
或者進行高效、密集的數學運算,製作實時電影特效,或訓練深度學習網絡。
② 圖形編程(Graphic Programming)
顯卡設計之初最主要的功能,沒有之一;
它利用顯卡來生成實時的三維圖像。
在屏幕中顯示的3D物體其實是由三角形構成的。
移動3D視角的反饋,實際上是座標變換的結果。
三角形作爲最基本的圖元之一,可以構造出很多複雜的圖形。
任何圖形在計算機中,都可以由許多三角形構成。
在確定完所有三角形的空間位置之後,顯卡開始並行運算。
第一件事,顯卡會對三角形進行座標變換。
第二件事,顯卡就會對三角形覆蓋區域,進行逐點繪製。
對場景中成千上萬個三角形並行運算後,產生了最終我們觀察到的畫面。
對顯卡的編程,其實就是向顯卡下達指令來告訴它去做什麼。
說到對顯卡的圖形編程,就不得不提OpenGL\DirectX\Vulkan三大API。
當你使用這些API的時候,這些指令會經過一個叫做驅動程序的東西,
它會將你下達的指令翻譯成顯卡硬件能直接運行的機器碼,也就是0和1。
說到顯卡編程就不得不提Shader程序,
Shader中文翻譯爲 着色器 ,但這樣翻譯其實並不準確,
Shader程序主要是用來繪製光照和陰影的,而Shade就是陰影的意思。
不過繪製光照和陰影只是Shader的基本作用之一。
Shader的編程語言有GLSL、Cg/HLSL、SPIR-V,它們分別來自OpenGL、DirectX、Vulkan。
對今天Shader程序的編寫,我們在Unity中完成,
之所以選擇Unity,是因爲真正的圖形編程,
大多都是在遊戲引擎中直接完成。
遊戲引擎通常會提供一個方便的編輯器,
可以快速測試你編寫的Shader程序,並且提供UI界面讓你調節複雜的參數。