1. 程式人生 > >《GPU程式設計與CG語言之陽春白雪下里巴人》閱讀筆記 第一章+第二章

《GPU程式設計與CG語言之陽春白雪下里巴人》閱讀筆記 第一章+第二章

本科畢設選題與GPU程式設計有關,一個假期的荒廢過去後,在導師的鞭策下開始了艱辛的學習旅途。程式碼看不懂,上網求助也沒有顯著的成效,就在我黔驢技窮的時刻一本書的出現讓我頓感“山重水複疑無路,柳暗花明又一村”。這本書就是康玉之所著的《GPU程式設計與CG語言之陽春白雪下里巴人》,英文譯名為《GPU Programming And Cg Language Primer 1rd Edition》,對於我這種初次接觸GPU程式設計和CG語言的新手深感受益匪淺,在此對作者表達我深深的敬意。

閱讀的過程很愉快,這裡摘錄第一章和第二章的重點內容如下,基本都是原書重要語句。(這裡的重要內容是指對於像我這樣急需快速入門的菜鳥最渴望掌握的內容,如果有時間和精力的話,全部內容都值得仔細讀過,深入思考。)

第一章 Programmable Graphics Processing Unit (GPU) 

GPU,即可程式設計圖形處理單元,也稱為可程式設計圖形硬體。由於GPU具有高並行結構,所以在處理圖形資料和複雜演算法方面擁有比CPU更高的效率。這裡介紹兩個概念:vertex programmability (頂點可程式設計) 和 fragment programmability (片段可程式設計)。

如下是一段程式碼示例:(目的:提取2D影象上每個畫素點的顏色值)

void advect ( float2 uv: WPOS,
          out float4 xNew: COLOR,
      uniform float dt,  // time step
      uniform float dx,  // grid scale 
uniform samplerRECT u,  // velocity
uniform samplerRECT x,  // state
{
      float2 pos = ub - dt * f2texRECT( u, uv ) / dx;
      xNew = f4texRECTbilerp ( x, pos );
}

第二章 GPU圖形繪製管線
GPU圖形繪製用一句話概括就是給定視點、三維物體、光源、照明模型和紋理元素等,如何繪製一幅二維影象。可以分為三個階段:應用程式階段、幾何階段和光柵階段。
2.1 幾何階段 這一階段的主要工作是“變換三維頂點座標”和“光照計算”,所謂的"T&L”,即Transform&Lighting。
變換三維頂點座標(三維座標點,使之顯示在二維的螢幕上),一般,GPU幫我們自動完成了該轉換。基於GPU的頂點程式為開發人員提供了控制頂點座標空間轉換的方法。
四種座標空間:Object space(模型座標空間)、World space(世界座標系空間)、Eye space(觀察座標空間)和Clip and Project space(螢幕座標空間)。
從object space coordinate到world space coordinate的變換過程由一個四階矩陣控制,通常稱為world matrix。光照計算通常在world space coordinate中進行。定點法向量從object space coordinate到world space coordinate的轉換矩陣是world matrix的轉置矩陣的逆矩陣。
Viewing frustum(視錐體):以camera為原點,由視線方向、視角和遠近平面,共同組成的一個梯形體的三維空間。識別指定區域內或區域外的圖形部分的過程稱為裁剪演算法(Clip)。
規範立方體(Canonial view volume,CVV)的近平面的X、Y座標對應螢幕畫素座標,Z座標代表畫面畫素深度。多邊形裁剪就是CVV中完成的。所以由Eye space coordinate到Clip and Project space的轉換分為三步:1.用透視變換矩陣把頂點從視錐體中變換到裁剪空間的CVV中;2.在CVV中進行圖元裁剪;3.將前述過程得到的座標對映到螢幕座標系上。
2.2 Primitive Assembly&Triangle setup
Primitive Assembly(圖元裝配),由頂點和索引還原出網格;Triangle Setup處理三角形,運用裁減演算法。
2.3 光柵化(Rasterization):決定哪些畫素被幾何圖元覆蓋的過程。圖元(geometric primitive)是指點、線、面。
Pixel Operation:1.消除遮擋面;2.Texture Operation;3.Blending(混色):alpha混合技術;4.Filtering。之後,畫素的顏色值被寫入幀快取中。
2.4 硬體
z buffer(深度快取區)、stencil buffer(模板快取區)、frame buffer(幀快取區)、color buffer(顏色快取區)。
z buffer存放的是視點到每個畫素所對應的空間點的距離衡量,z值位於【0,1】區間,最接近眼睛的頂點z為0.0,最遠為1.0。z值決定了物體間的相互遮擋關係。
Frame buffer用於存放顯示輸出的資料。