1. 程式人生 > >計算機圖形學筆記---shader language

計算機圖形學筆記---shader language

用shader language寫的程式叫著色程式,著色程式又分為頂點著色程式(vertex shader program)和片段著色程式(fragment shader program ) 前者負責頂點座標轉換(幾何方面的運算),後者負責畫素顏色計算;前者的輸出是後者的輸入;二者同時存在,相互配合
也可以只有頂點著色程式,這樣的話就用硬體預設的方式進行自動插值;
如果圖形硬體使用Gourand明暗處理演算法,就會出現馬赫帶效應(條帶化)【即是指人們在明暗交界處感到亮處更亮,暗處更暗的現象。它是一種主觀的邊緣對比效應】
而片段著色程式是對每個片段進行獨立的顏色計算,演算法自己編寫
這就不得不說GPU上的兩個元件——
Programmable Vertex Processor(可程式設計頂點處理器,又叫頂點著色器)
Programmable Fragment Processor(可程式設計片段處理器,又叫片段著色器)
這兩個處理器都有平行計算的能力,擅長不高於4階的矩陣計算,片段處理器還可以查詢紋理資訊


這裡寫圖片描述

暫存器的資料存放如下圖所示:
這裡寫圖片描述
對GPU而言,紋理等價為陣列===做通用計算如陣列排序、字串檢索等必須用到片段著色程式
注意:片段與畫素的區別——片段是所有的三維頂點在光柵化後是資料集合,這些資料還沒有經過深度值比較,而螢幕顯示的畫素是經過深度值比較的。

Shader language目前有3種主流語言:基於OpenGL的GLSL(OpenGL Shading Language,也稱為GLslang),基於Direct3D的HLSL(High Level Shading Language),還有NVIDIA公司的Cg (C for Graphic)語言。
GLSL與HLSL分別提基於OpenGL和Direct3D的介面,兩者不能混用,事實上OpenGL和Direct3D一直都是冤家對頭,
使用Cg語言進行研發,基於如下理由:
Cg是一個可以被OpenGL和Direct3D廣泛支援的圖形處理器程式語言。Cg程式是執行在OpenGL和 DirectX標準頂點和畫素著色的基礎上的;Cg語言是Microsoft和NVIDIA相互協作在標準硬體光照語言的語法和語義上達成了一致。
Cg語言極力保留了C語言的大部分語義,力圖讓開發人員從硬體細節中解脫出來,Cg同時擁有高階語言的好處,如程式碼的易重用性,可讀性提高等。
使用cg還可以實現動畫驅動、通用計算(排序、查詢)等功能。
下一篇部落格我們會詳細介紹神奇的Cg語言(這也是在遊戲shader編寫中常用的語言哦)