傳統渲染管線與可程式設計Shader著色器

2021-07-03 08:24:25 字數 1409 閱讀 9894

上世紀的絕大多數顯示加速晶元都不能稱之為完整意義上的gpu,因為它們僅僅只有畫素填充和紋理貼圖的基本功能。而

nvidia

公司在2023年所發布的geforce 256圖形處理晶元則首次提出了gpu的概念。gpu所採用的核心技術有硬體t&l、立方環境材質貼圖和頂點混合、紋理壓縮和凹凸對映貼圖、雙重紋理四畫素256位渲染引擎等,而硬體t&l(transform and lighting,多邊形轉換與光源處理)技術可以說是gpu問世的標誌。

渲染管線類似工作流水線,為了提高工作能力和效率。

什麼叫做一條「畫素渲染管線」?簡單的說,

傳統的一條渲染管線是由包括pixel shader unit(畫素著色單元)+ tmu(紋理貼圖單元) + rop(光柵化引擎)三部分組成的

。用公式表達可以簡單寫作:ps=psu+tmu+rop 。從功能上看,psu完成畫素處理,tmu負責紋理渲染,而rop則負責畫素的最終輸出。所以,一條完整的畫素管線意味著在乙個時鐘週期完成至少進行1個ps運算,並輸出一次紋理。

而gpu的下一次革新則是引入可程式設計shader(著色器)。著色器代替了傳統的渲染管線,可以實現3d圖形學中的相關計算。由於可程式設計性,由於可程式設計性,從而實現各種各樣的影象效果,而不受顯示卡固定渲染管線限制。這極大的提高了影象的畫質。而從geforce 3到geforce 9,gpu的發展都是一直基於這種用於顯示卡硬體幾何架構/渲染過程的shader來進行的。

目前面向gpu的程式設計有三種高階影象語言庫可供選擇:微軟提供hlsl(high level shading language),低層是通過direct3d編寫的。opengl提供glsl(opengl shading language),第三個就是nvidia研發的cg(c for graphics)語言。由於cg是由nvidia和微軟公司共同研發的,也就是以hlsl為基礎開發的,二者很相識。不過cg同時相容d3d和opengl圖形介面,這意味著cg編寫的shader可以編譯到d3d和opengl都能適應執行的環境。

早期的shader(著色器)有兩種,一種是頂點著色器,稱為vertex shader(opengl叫vertex program 也有叫vertex shader),取代渲染管線中的變換和光照部分,程式設計師可以自己控制頂點變換和光照等。另一種是畫素作色器,稱為pixel shader(opengl稱為fragment program,也有叫fragment

shader)取代固定渲染管線中的光柵化部分,程式設計師可以自己控制畫素顏色和紋理取樣等。

在圖形處理中,最常見的畫素都是由rgb(紅綠藍)三種顏色構成的,加上它們共有的資訊說明(alpha),總共是4個通道。而頂點資料一般是由xyzw四個座標構成,這樣也是4個通道。在3d圖形進行渲染時,其實就是改變rgba四個通道或者xyzw四個座標的數值。為了一次性處理1個完整的畫素渲染或幾何轉換,

gpu的畫素著色單元和頂點著色單元從一開始就被設計成為同時具備4次運算能力的算數邏輯運算器(alu)。

固定渲染管線與可程式設計渲染管線

1.固定渲染管線與可程式設計渲染管線的區別 1 固定渲染管線 這是標準的幾何 光照 t l 管線,功能是固定的,它控制著世界 視 投影變換及固定光照控制和紋理混合。t l管線可以被渲染狀態控制,矩陣,光照和採製引數。2 頂點著色器 圖形開發人員可以對渲染管線中的頂點運算和畫素運算分別進行程式設計處理...

LILYGO T Wristband 可程式設計的手環

因為最近開發一款大眾化的健康產品,購買了一款可以自己程式設計的手環。其實現在銷售的眾多手環就是這樣的,只是沒有開放出來大家程式設計而已。這是我拆開進行程式設計的樣子 除了程式設計能力限制以外,它的長電版105mah,也受不了超過1個半小時。另外,還沒來得急研究抬手顯示等 它的程式設計接線口就壞掉了,...

可程式設計記憶體區

堆區 亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意大小的記憶體,程式設計師自己負責在適當的時候用free或delete釋放記憶體。動態記憶體的生存期可以由我們決定,如果我們不釋放記憶體,程式將在最後才釋放掉動態記憶體。但是,良好的程式設計習慣是 如果某動態記憶體不再使用,需要將...