Shader入門基礎

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界面讓你調節複雜的參數。

 

下一篇:創建並編寫你的第一個Shader程序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章