簡介
本篇筆記主要是整理有關於負責電腦圖形繪製的硬體有哪些、WebGL涉及的硬體有哪些(程式碼能影響的硬體)以及每個硬體又負責處理什麼事情。本篇用一張從Professional WebGL Programming: Developing 3D Graphics for the Web 原文電子書截取的圖片開始作重點說明。內文
GPU:
首先我們先來看最上面大框框的GPU,相信這個硬體大家都不陌生,其主要功能也是眾所皆知,典型的GPU是以管線化(pipeline)來處理圖形資料並且讓電腦螢幕呈現,其設計能快速地操作圖形資料。
FrameBuffer:
當圖形資料由GPU管線化處理傳來之後,這些資料最終會被寫入到FrameBuffer裡頭,而FrameBuffer是一個記憶體,其存放的資料即是最終呈現的在螢幕上的圖片。在簡單的圖形系統中,FrameBuffer適配置在主記憶體空間中,而現代的圖形系統則是配置在GPU記憶體或是靠近GPU記憶體階層的記憶空間。FrameBuffer至少會含有三個不同的sub-buffers,分別是:
1. Color Buffer
2. Z-Buffer
3. Stencil-Buffer
Color Buffer:
ColorBuffer是一個長方形陣列(一維陣列)[像素量*RGB(or RGBA)]的記憶空間,其資料格式可以是每個像素的RGB或RGBA,而A指的就是Alpha,其值影響著圖片的”不透明度(opacity)”。ColorBuffer能夠表示一個像素的能力就看FrameBuffer的顏色深度(Color Depth),Color Depth例如:
1. 16 bits per pixel (RGB565)
2. 24 bits per pixel (RGB)
3. 32 bits per pixel (RGBA)
這裡有疑問的是,通常RGB每個顏色常見的會是有8 bits的範圍來表示,所以這裡的16 bits per pixel是只有在較小的硬體才會出現,像是簡易型的手機,它會被配置為5個bits表示紅色,6個bits表示綠色,5個bits表示藍色,寫法格式為RGB565。
Z-Buffer
或稱Depth Buffer,它在GPU裡主要負責判斷哪些像素是被遮蔽的,而被遮蔽的像素就不會有資料在Color Buffer裡。舉例來說為了讓繪製的3D場景更為寫實,很大的機會會出現物體遮蔽另一個物體,而為了不繪製被遮蔽的物體像素,其像素RGB資料就應該從Color Buffer裡刪除,這些的運算處理都需依靠Z-Buffer,它會儲存每個像素的”距離(Distance)”資訊。
Stencil-Buffer
在現代的GPU也都會含有Stencil-Buffer,其主要是控制Color Buffer應該繪製什麼樣的內容,在後續的筆記將會介紹用Stencil-Buffer來繪製”陰影效果”。
Texture Memory
在3D圖形繪製表面中扮演很重要的處理角色,可以把它想像成是抹上了膠水的圖片,貼在3D的幾何物體上。為了能快速的接收紋理圖片,GPU裡配置了這樣的記憶體空間來存放紋理圖片。
Video Controller
或稱Video Generator,它會以一定的速率逐行掃描Color Buffer並更新顯示,典型的更新顯示速率是每秒60幀(FPS)給LCD顯示。
留言
張貼留言